From 31c26d60eb5302e0047fbe88cdb79e3868ec4dcc Mon Sep 17 00:00:00 2001 From: LingASDJ <2735951230@qq.com> Date: Tue, 8 Aug 2023 15:42:14 +0800 Subject: [PATCH 01/13] Add Android Library Test --- android/build.gradle | 2 +- android/src/main/AndroidManifest.xml | 1 + build.gradle | 4 +- .../services/analyticsfirebase/Beta.java | 5 +++ services/analyticsfirebase/.gitignore | 1 + services/analyticsfirebase/build.gradle | 37 +++++++++++++++++++ services/analyticsfirebase/consumer-rules.pro | 0 services/analyticsfirebase/proguard-rules.pro | 21 +++++++++++ .../ExampleInstrumentedTest.java | 26 +++++++++++++ .../src/main/AndroidManifest.xml | 4 ++ .../analyticsfirebase/FireBaseLing.java | 4 ++ .../analyticsfirebase/ExampleUnitTest.java | 17 +++++++++ services/build.gradle | 5 ++- .../analyticsfirebase/FireBaseService.java | 3 ++ settings.gradle | 1 + 15 files changed, 127 insertions(+), 4 deletions(-) create mode 100644 core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/services/analyticsfirebase/Beta.java create mode 100644 services/analyticsfirebase/.gitignore create mode 100644 services/analyticsfirebase/build.gradle create mode 100644 services/analyticsfirebase/consumer-rules.pro create mode 100644 services/analyticsfirebase/proguard-rules.pro create mode 100644 services/analyticsfirebase/src/androidTest/java/com/shatteredpixel/shatteredpixeldungeon/services/analyticsfirebase/ExampleInstrumentedTest.java create mode 100644 services/analyticsfirebase/src/main/AndroidManifest.xml create mode 100644 services/analyticsfirebase/src/main/java/com/shatteredpixel/shatteredpixeldungeon/services/analyticsfirebase/FireBaseLing.java create mode 100644 services/analyticsfirebase/src/test/java/com/shatteredpixel/shatteredpixeldungeon/services/analyticsfirebase/ExampleUnitTest.java create mode 100644 services/src/main/java/com/shatteredpixel/shatteredpixeldungeon/services/analyticsfirebase/FireBaseService.java diff --git a/android/build.gradle b/android/build.gradle index ea7454d69..6793b95a6 100644 --- a/android/build.gradle +++ b/android/build.gradle @@ -81,7 +81,7 @@ dependencies { implementation project(path: ':services:news:shatteredNews') - // implementation project(path: ':services:analytics:analyticsFirebase') + implementation project(path: ':services:analyticsfirebase') natives "com.badlogicgames.gdx:gdx-platform:$gdxVersion:natives-armeabi-v7a" natives "com.badlogicgames.gdx:gdx-platform:$gdxVersion:natives-x86" diff --git a/android/src/main/AndroidManifest.xml b/android/src/main/AndroidManifest.xml index 255557bf1..2581c9b12 100644 --- a/android/src/main/AndroidManifest.xml +++ b/android/src/main/AndroidManifest.xml @@ -47,6 +47,7 @@ diff --git a/build.gradle b/build.gradle index 256676a80..0d7891c3e 100644 --- a/build.gradle +++ b/build.gradle @@ -23,9 +23,9 @@ allprojects { appJavaCompatibility = JavaVersion.VERSION_11 - appAndroidCompileSDK = 30 + appAndroidCompileSDK = 33 appAndroidMinSDK = 19 - appAndroidTargetSDK = 30 + appAndroidTargetSDK = 33 gdxControllersVersion = '2.2.1' diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/services/analyticsfirebase/Beta.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/services/analyticsfirebase/Beta.java new file mode 100644 index 000000000..02d2160a6 --- /dev/null +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/services/analyticsfirebase/Beta.java @@ -0,0 +1,5 @@ +package com.shatteredpixel.shatteredpixeldungeon.services.analyticsfirebase; + +public class Beta { + public static FireBaseService service; +} diff --git a/services/analyticsfirebase/.gitignore b/services/analyticsfirebase/.gitignore new file mode 100644 index 000000000..42afabfd2 --- /dev/null +++ b/services/analyticsfirebase/.gitignore @@ -0,0 +1 @@ +/build \ No newline at end of file diff --git a/services/analyticsfirebase/build.gradle b/services/analyticsfirebase/build.gradle new file mode 100644 index 000000000..b67007851 --- /dev/null +++ b/services/analyticsfirebase/build.gradle @@ -0,0 +1,37 @@ +plugins { + id 'com.android.library' +} + +android { + namespace 'com.shatteredpixel.shatteredpixeldungeon.services.analyticsfirebase' + compileSdk 33 + + defaultConfig { + minSdk 19 + targetSdk 33 + + testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" + consumerProguardFiles "consumer-rules.pro" + } + + buildTypes { + release { + minifyEnabled false + proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro' + } + } + compileOptions { + sourceCompatibility JavaVersion.VERSION_11 + targetCompatibility JavaVersion.VERSION_11 + } +} + +dependencies { + implementation project(':SPD-classes') + api project(':services') + implementation 'androidx.appcompat:appcompat:1.6.1' + implementation 'com.google.android.material:material:1.5.0' + testImplementation 'junit:junit:4.13.2' + androidTestImplementation 'androidx.test.ext:junit:1.1.3' + androidTestImplementation 'androidx.test.espresso:espresso-core:3.4.0' +} \ No newline at end of file diff --git a/services/analyticsfirebase/consumer-rules.pro b/services/analyticsfirebase/consumer-rules.pro new file mode 100644 index 000000000..e69de29bb diff --git a/services/analyticsfirebase/proguard-rules.pro b/services/analyticsfirebase/proguard-rules.pro new file mode 100644 index 000000000..481bb4348 --- /dev/null +++ b/services/analyticsfirebase/proguard-rules.pro @@ -0,0 +1,21 @@ +# Add project specific ProGuard rules here. +# You can control the set of applied configuration files using the +# proguardFiles setting in build.gradle. +# +# For more details, see +# http://developer.android.com/guide/developing/tools/proguard.html + +# If your project uses WebView with JS, uncomment the following +# and specify the fully qualified class name to the JavaScript interface +# class: +#-keepclassmembers class fqcn.of.javascript.interface.for.webview { +# public *; +#} + +# Uncomment this to preserve the line number information for +# debugging stack traces. +#-keepattributes SourceFile,LineNumberTable + +# If you keep the line number information, uncomment this to +# hide the original source file name. +#-renamesourcefileattribute SourceFile \ No newline at end of file diff --git a/services/analyticsfirebase/src/androidTest/java/com/shatteredpixel/shatteredpixeldungeon/services/analyticsfirebase/ExampleInstrumentedTest.java b/services/analyticsfirebase/src/androidTest/java/com/shatteredpixel/shatteredpixeldungeon/services/analyticsfirebase/ExampleInstrumentedTest.java new file mode 100644 index 000000000..9b982c52a --- /dev/null +++ b/services/analyticsfirebase/src/androidTest/java/com/shatteredpixel/shatteredpixeldungeon/services/analyticsfirebase/ExampleInstrumentedTest.java @@ -0,0 +1,26 @@ +package com.shatteredpixel.shatteredpixeldungeon.services.analyticsfirebase; + +import static org.junit.Assert.assertEquals; + +import android.content.Context; + +import androidx.test.ext.junit.runners.AndroidJUnit4; +import androidx.test.platform.app.InstrumentationRegistry; + +import org.junit.Test; +import org.junit.runner.RunWith; + +/** + * Instrumented test, which will execute on an Android device. + * + * @see Testing documentation + */ +@RunWith(AndroidJUnit4.class) +public class ExampleInstrumentedTest { + @Test + public void useAppContext() { + // Context of the app under test. + Context appContext = InstrumentationRegistry.getInstrumentation().getTargetContext(); + assertEquals("com.shatteredpixel.shatteredpixeldungeon.services.analyticsfirebase.test", appContext.getPackageName()); + } +} \ No newline at end of file diff --git a/services/analyticsfirebase/src/main/AndroidManifest.xml b/services/analyticsfirebase/src/main/AndroidManifest.xml new file mode 100644 index 000000000..a5918e68a --- /dev/null +++ b/services/analyticsfirebase/src/main/AndroidManifest.xml @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/services/analyticsfirebase/src/main/java/com/shatteredpixel/shatteredpixeldungeon/services/analyticsfirebase/FireBaseLing.java b/services/analyticsfirebase/src/main/java/com/shatteredpixel/shatteredpixeldungeon/services/analyticsfirebase/FireBaseLing.java new file mode 100644 index 000000000..b94bdf594 --- /dev/null +++ b/services/analyticsfirebase/src/main/java/com/shatteredpixel/shatteredpixeldungeon/services/analyticsfirebase/FireBaseLing.java @@ -0,0 +1,4 @@ +package com.shatteredpixel.shatteredpixeldungeon.services.analyticsfirebase; + +public class FireBaseLing { +} diff --git a/services/analyticsfirebase/src/test/java/com/shatteredpixel/shatteredpixeldungeon/services/analyticsfirebase/ExampleUnitTest.java b/services/analyticsfirebase/src/test/java/com/shatteredpixel/shatteredpixeldungeon/services/analyticsfirebase/ExampleUnitTest.java new file mode 100644 index 000000000..187b73c69 --- /dev/null +++ b/services/analyticsfirebase/src/test/java/com/shatteredpixel/shatteredpixeldungeon/services/analyticsfirebase/ExampleUnitTest.java @@ -0,0 +1,17 @@ +package com.shatteredpixel.shatteredpixeldungeon.services.analyticsfirebase; + +import static org.junit.Assert.assertEquals; + +import org.junit.Test; + +/** + * Example local unit test, which will execute on the development machine (host). + * + * @see Testing documentation + */ +public class ExampleUnitTest { + @Test + public void addition_isCorrect() { + assertEquals(4, 2 + 2); + } +} \ No newline at end of file diff --git a/services/build.gradle b/services/build.gradle index e94412de9..b0fdb50bb 100644 --- a/services/build.gradle +++ b/services/build.gradle @@ -1,4 +1,7 @@ apply plugin: 'java-library' [compileJava, compileTestJava]*.options*.encoding = 'UTF-8' -sourceCompatibility = targetCompatibility = appJavaCompatibility \ No newline at end of file +sourceCompatibility = targetCompatibility = appJavaCompatibility +dependencies { + implementation project(path: ':services:analyticsfirebase') +} \ No newline at end of file diff --git a/services/src/main/java/com/shatteredpixel/shatteredpixeldungeon/services/analyticsfirebase/FireBaseService.java b/services/src/main/java/com/shatteredpixel/shatteredpixeldungeon/services/analyticsfirebase/FireBaseService.java new file mode 100644 index 000000000..bd0b0e176 --- /dev/null +++ b/services/src/main/java/com/shatteredpixel/shatteredpixeldungeon/services/analyticsfirebase/FireBaseService.java @@ -0,0 +1,3 @@ +package com.shatteredpixel.shatteredpixeldungeon.services.analyticsfirebase; +public class FireBaseService { +} diff --git a/settings.gradle b/settings.gradle index da66e41ac..6ae8f88fd 100644 --- a/settings.gradle +++ b/settings.gradle @@ -11,3 +11,4 @@ include ':services' //news include ':services:news:shatteredNews' +include ':services:analyticsfirebase' From f1c20c48080fff18c28fa29395058c3c9ede4c8a Mon Sep 17 00:00:00 2001 From: LingASDJ <2735951230@qq.com> Date: Tue, 8 Aug 2023 18:04:32 +0800 Subject: [PATCH 02/13] Update build.gradle --- services/build.gradle | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/services/build.gradle b/services/build.gradle index b0fdb50bb..e94412de9 100644 --- a/services/build.gradle +++ b/services/build.gradle @@ -1,7 +1,4 @@ apply plugin: 'java-library' [compileJava, compileTestJava]*.options*.encoding = 'UTF-8' -sourceCompatibility = targetCompatibility = appJavaCompatibility -dependencies { - implementation project(path: ':services:analyticsfirebase') -} \ No newline at end of file +sourceCompatibility = targetCompatibility = appJavaCompatibility \ No newline at end of file From 1d87f6b16aec8f5bdab36fc93f0fc17e4e3e5ed3 Mon Sep 17 00:00:00 2001 From: LingASDJ <2735951230@qq.com> Date: Sat, 19 Aug 2023 00:51:15 +0800 Subject: [PATCH 03/13] update firegirl --- .../main/assets/sprites/boss/FireWitch.png | Bin 0 -> 6329 bytes .../shatteredpixeldungeon/Assets.java | 3 ++ .../shatteredpixeldungeon/Conducts.java | 16 +++------ .../sprites/FireWitchGirlSprites.java | 31 ++++++++++++++++++ 4 files changed, 38 insertions(+), 12 deletions(-) create mode 100644 core/src/main/assets/sprites/boss/FireWitch.png create mode 100644 core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/sprites/FireWitchGirlSprites.java diff --git a/core/src/main/assets/sprites/boss/FireWitch.png b/core/src/main/assets/sprites/boss/FireWitch.png new file mode 100644 index 0000000000000000000000000000000000000000..6de62bbc7df38db6238372fc5254a80fa10e8e09 GIT binary patch literal 6329 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 literal 0 HcmV?d00001 diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/Assets.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/Assets.java index 1ef568561..5532d20c9 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/Assets.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/Assets.java @@ -317,8 +317,11 @@ public class Assets { public static final String DICT = "sprites/boss/DictFish.png"; public static final String ROOMSTONE = "sprites/boss/RoomStone.png"; + public static final String VSGR = "sprites/boss/SeaVastGirl.png"; + public static final String FSGR = "sprites/boss/FireWitch.png"; + public static final String SXGR = "sprites/boss/IceSlowGirl.png"; public static final String SKFS = "sprites/boss/SakaFishBoss.png"; diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/Conducts.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/Conducts.java index c70d933e4..6ce976ee2 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/Conducts.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/Conducts.java @@ -10,18 +10,10 @@ import java.util.Arrays; public class Conducts { public enum Conduct { NULL, - BOSSRUSH(1.2f), - MONEYLETGO(1.5f); - - public float scoreMod; - - Conduct(){ - scoreMod = 1f; - } - - Conduct(float scoreMod){ - this.scoreMod = scoreMod; - } + BOSSRUSH, + MONEYLETGO; + /**深海副本*/ + //SEADLC @Override public String toString() { diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/sprites/FireWitchGirlSprites.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/sprites/FireWitchGirlSprites.java new file mode 100644 index 000000000..953a9e471 --- /dev/null +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/sprites/FireWitchGirlSprites.java @@ -0,0 +1,31 @@ +package com.shatteredpixel.shatteredpixeldungeon.sprites; + +import com.shatteredpixel.shatteredpixeldungeon.Assets; +import com.watabou.noosa.TextureFilm; + +public class FireWitchGirlSprites extends MobSprite { + + public FireWitchGirlSprites() { + super(); + + texture( Assets.Sprites.FSGR ); + + TextureFilm frames = new TextureFilm( texture, 24, 24 ); + + idle = new Animation( 2, true ); + idle.frames( frames, 0, 0, 0, 1,1,1 ); + + run = new Animation( 8, true ); + run.frames( frames, 2,3, 4, 5 ); + + attack = new Animation( 15, false ); + attack.frames( frames, 6,7, 8,0 ); + + die = new Animation( 7, false ); + die.frames( frames, 9,10,11); + + play( idle ); + } + +} + From 670dbaf732083c202101141a9310317f13a1b7d1 Mon Sep 17 00:00:00 2001 From: LingASDJ <2735951230@qq.com> Date: Tue, 22 Aug 2023 21:27:52 +0800 Subject: [PATCH 04/13] Update V0.6.4.0-Beta12 --- android/build.gradle | 7 +- .../android/AndroidGame.java | 3 - .../android/AndroidPlatformSupport.java | 21 +- build.gradle | 4 +- .../src/main/assets/interfaces/LanterLing.png | Bin 133 -> 267 bytes core/src/main/assets/interfaces/boss_hp.png | Bin 428 -> 1204 bytes core/src/main/assets/interfaces/chrome.png | Bin 1458 -> 3830 bytes .../interfaces/status_pane-puresoul.png | Bin 3551 -> 0 bytes .../interfaces/status_pane-puresoul_dark.png | Bin 1456 -> 0 bytes .../main/assets/interfaces/status_pane.png | Bin 3551 -> 3012 bytes .../assets/interfaces/status_pane_normal.png | Bin 1475 -> 1606 bytes core/src/main/assets/interfaces/toolbar.png | Bin 3516 -> 3813 bytes .../main/assets/interfaces/toolbar_normal.png | Bin 4571 -> 4769 bytes .../main/assets/messages/misc/misc.properties | 2 +- .../src/main/assets/messages/ui/ui.properties | 2 +- .../messages/windows/windows.properties | 10 +- .../shatteredpixeldungeon/Assets.java | 2 - .../shatteredpixeldungeon/Badges.java | 4 +- .../shatteredpixeldungeon/QuickSlot.java | 9 +- .../shatteredpixeldungeon/SPDAction.java | 4 + .../shatteredpixeldungeon/SPDSettings.java | 18 +- .../actors/mobs/Rat.java | 2 +- .../custom/utils/Constants.java | 8 +- .../items/lightblack/OilLantern.java | 9 +- .../levels/rooms/standard/EyeRoom.java | 4 +- .../levels/rooms/standard/YinYangRoom.java | 5 +- .../scenes/GameScene.java | 72 +- .../scenes/PixelScene.java | 6 +- .../services/analyticsfirebase/Beta.java | 5 - .../ui/BossHealthBar.java | 6 +- .../ui/JoinIndicator.java | 2 +- .../ui/QuickSlotButton.java | 4 + .../shatteredpixeldungeon/ui/StatusPane.java | 23 +- .../shatteredpixeldungeon/ui/ToobarV.java | 632 ++++++++++++++++++ .../shatteredpixeldungeon/ui/Toolbar.java | 5 +- .../ui/changelist/mlpd/vM0_6_7_X_Changes.java | 5 +- .../windows/WndSettings.java | 336 ++++++---- gradle.properties | 3 +- services/analyticsfirebase/.gitignore | 1 - services/analyticsfirebase/build.gradle | 37 - services/analyticsfirebase/consumer-rules.pro | 0 services/analyticsfirebase/proguard-rules.pro | 21 - .../ExampleInstrumentedTest.java | 26 - .../src/main/AndroidManifest.xml | 4 - .../analyticsfirebase/FireBaseLing.java | 4 - .../analyticsfirebase/ExampleUnitTest.java | 17 - .../services/news/GameNesImpl.java | 4 - .../analyticsfirebase/FireBaseService.java | 3 - settings.gradle | 1 - 49 files changed, 1023 insertions(+), 308 deletions(-) delete mode 100644 core/src/main/assets/interfaces/status_pane-puresoul.png delete mode 100644 core/src/main/assets/interfaces/status_pane-puresoul_dark.png create mode 100644 core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/ui/ToobarV.java delete mode 100644 services/analyticsfirebase/.gitignore delete mode 100644 services/analyticsfirebase/build.gradle delete mode 100644 services/analyticsfirebase/consumer-rules.pro delete mode 100644 services/analyticsfirebase/proguard-rules.pro delete mode 100644 services/analyticsfirebase/src/androidTest/java/com/shatteredpixel/shatteredpixeldungeon/services/analyticsfirebase/ExampleInstrumentedTest.java delete mode 100644 services/analyticsfirebase/src/main/AndroidManifest.xml delete mode 100644 services/analyticsfirebase/src/main/java/com/shatteredpixel/shatteredpixeldungeon/services/analyticsfirebase/FireBaseLing.java delete mode 100644 services/analyticsfirebase/src/test/java/com/shatteredpixel/shatteredpixeldungeon/services/analyticsfirebase/ExampleUnitTest.java delete mode 100644 services/src/main/java/com/shatteredpixel/shatteredpixeldungeon/services/analyticsfirebase/FireBaseService.java diff --git a/android/build.gradle b/android/build.gradle index 6793b95a6..dea00ca6b 100644 --- a/android/build.gradle +++ b/android/build.gradle @@ -3,7 +3,10 @@ apply plugin: 'com.google.gms.google-services' apply plugin: 'com.google.firebase.crashlytics' android { - compileSdkVersion appAndroidCompileSDK + compileSdkVersion 30 + + buildToolsVersion "30.0.2" +// compileSdkVersion appAndroidCompileSDK compileOptions.sourceCompatibility = compileOptions.targetCompatibility = appJavaCompatibility sourceSets.main.assets.srcDirs = [new File(project(':core').projectDir, "/src/main/assets")] @@ -81,8 +84,6 @@ dependencies { implementation project(path: ':services:news:shatteredNews') - implementation project(path: ':services:analyticsfirebase') - natives "com.badlogicgames.gdx:gdx-platform:$gdxVersion:natives-armeabi-v7a" natives "com.badlogicgames.gdx:gdx-platform:$gdxVersion:natives-x86" natives "com.badlogicgames.gdx:gdx-platform:$gdxVersion:natives-arm64-v8a" diff --git a/android/src/main/java/com/shatteredpixel/shatteredpixeldungeon/android/AndroidGame.java b/android/src/main/java/com/shatteredpixel/shatteredpixeldungeon/android/AndroidGame.java index a2702fba0..38191169d 100644 --- a/android/src/main/java/com/shatteredpixel/shatteredpixeldungeon/android/AndroidGame.java +++ b/android/src/main/java/com/shatteredpixel/shatteredpixeldungeon/android/AndroidGame.java @@ -33,7 +33,6 @@ import com.badlogic.gdx.backends.android.AndroidApplication; import com.badlogic.gdx.backends.android.AndroidApplicationConfiguration; import com.badlogic.gdx.backends.android.AndroidAudio; import com.badlogic.gdx.backends.android.AsynchronousAndroidAudio; -import com.google.firebase.analytics.FirebaseAnalytics; import com.shatteredpixel.shatteredpixeldungeon.SPDSettings; import com.shatteredpixel.shatteredpixeldungeon.ShatteredPixelDungeon; import com.shatteredpixel.shatteredpixeldungeon.services.news.GameNesImpl; @@ -48,8 +47,6 @@ public class AndroidGame extends AndroidApplication { public static AndroidApplication instance; - public FirebaseAnalytics mFirebaseAnalytics; - private static AndroidPlatformSupport support; @Override diff --git a/android/src/main/java/com/shatteredpixel/shatteredpixeldungeon/android/AndroidPlatformSupport.java b/android/src/main/java/com/shatteredpixel/shatteredpixeldungeon/android/AndroidPlatformSupport.java index 8a54d190a..e723df273 100644 --- a/android/src/main/java/com/shatteredpixel/shatteredpixeldungeon/android/AndroidPlatformSupport.java +++ b/android/src/main/java/com/shatteredpixel/shatteredpixeldungeon/android/AndroidPlatformSupport.java @@ -198,7 +198,8 @@ public class AndroidPlatformSupport extends PlatformSupport { } else if (Gdx.files.absolute("/system/fonts/DroidSans.ttf").exists()){ basicFontGenerator = new FreeTypeFontGenerator(Gdx.files.absolute("/system/fonts/DroidSans.ttf")); } - if (!systemfont) { + + if (basicFontGenerator == null) { basicFontGenerator = fallbackFontGenerator = new FreeTypeFontGenerator(Gdx.files.internal("fonts/pixel_font.ttf")); } @@ -206,7 +207,7 @@ public class AndroidPlatformSupport extends PlatformSupport { fallbackFontGenerator = basicFontGenerator; basicFontGenerator = new FreeTypeFontGenerator(Gdx.files.internal("fonts/pixel_font.ttf")); } - } + //android 7.0+. all asian fonts are nicely contained in one spot if (Gdx.files.absolute("/system/fonts/NotoSansCJK-Regular.ttc").exists()) { @@ -216,9 +217,6 @@ public class AndroidPlatformSupport extends PlatformSupport { case JAPANESE: typeFace = 0; break; -// case KOREAN: -// typeFace = 1; -// break; case HARDCHINESE: case CHINESE: default: @@ -284,6 +282,19 @@ public class AndroidPlatformSupport extends PlatformSupport { break; } KRFontGenerator = SCFontGenerator = TCFontGenerator = JPFontGenerator = new FreeTypeFontGenerator(Gdx.files.internal("fonts/fusion_pixel.ttf")); + } else { + switch (SPDSettings.language()) { + case CHINESE: + fallbackFontGenerator = SCFontGenerator; + break; + case HARDCHINESE: + fallbackFontGenerator = TCFontGenerator; + break; + case JAPANESE: + fallbackFontGenerator = JPFontGenerator; + break; + } + KRFontGenerator = SCFontGenerator = TCFontGenerator = JPFontGenerator = new FreeTypeFontGenerator(Gdx.files.absolute("/system/fonts/NotoSansCJK-Regular.ttc")); } if (basicFontGenerator != null) fonts.put(basicFontGenerator, new HashMap<>()); diff --git a/build.gradle b/build.gradle index 832cc6afc..2d4610675 100644 --- a/build.gradle +++ b/build.gradle @@ -18,8 +18,8 @@ allprojects { appName = 'Magic Ling Pixel Dungeon' appPackageName = 'com.ansdomagiclingpixeldungeon.ling' - appVersionCode =903000 - appVersionName = '0.6.4.0-Beta9' + appVersionCode =906000 + appVersionName = '0.6.4.0-Beta-XII' appJavaCompatibility = JavaVersion.VERSION_11 diff --git a/core/src/main/assets/interfaces/LanterLing.png b/core/src/main/assets/interfaces/LanterLing.png index c1622c605f77515a7b7770b010e86a0c26c6b981..019f28d38e4b4f3efacee3e7565e87d827885dc8 100644 GIT binary patch delta 239 zcmV1b_4?x z0|)>)Yfgb#Pyq-VOhQzk3&50v#F@YbqN_mS<1zH*Lx?);w!maTYOt#y&K8&|Qq2H{ z3llh`U2fn7jc9-#-j3XnWZ6>b$UQHXB}e8Pfm&002ovPDHLkV1hTxUv~fi delta 104 zcmeBXYGs_DlIY{<;uvDln><74$j|wVoCbyl1_n8PDgXPG4gf*Hx`xO0T@1|3%!mJ* zwf)y%lF)Kv1;MsPhGbD@<(LB*hxpxgaNYlDFPSLBU~bEs|8TnUMg}18boFyt=akR{ E0LC07egFUf diff --git a/core/src/main/assets/interfaces/boss_hp.png b/core/src/main/assets/interfaces/boss_hp.png index 6d5d4d3866b820149058b40d62ba9605cd10c82f..aac5f4042579a65ae8ea3e521ac10648833ec653 100644 GIT binary patch delta 1195 zcmV;c1XTO11GEW{8Gi-<005$$euMx31bazDK~!i3?O07{R96%}FF!NQBsB@TNZtgK z5<_WdN5M^WlUgw`5(kZfjR};v(6|UHv?BP2aZ|GK4_t_?2ujSNnKA*bwTfNe1G4&_nkMR(c7WF73Yl< z(E!!Jxb_oA{q(?ox*QHuTVs ziyAU=ws9Ica!~2f9~z~v$DdH_`p@KE-{=Ja`t;RnV*tMMfs5)rLma3oI_h~yeU&;V z=;lPN%Eb}3Q-8h~1&2bkFZ$e@Cn^@;@l@|TAOhIo*uP?#&(%~&JN_zUavc1<+}};> zPEpqULG+3CDJyr7I01P2^`7{)-xiM0a2^95ON9eMstbnrE{GFBRP6#G&KkgRwsxAT z2PsYf&U}#a*^_t0!KcAv-4$tE9kC>j0M7PKw)L|ePJbsv5|Ax$`1@Y3kYQ^J{v_3l z@m=lKc&jc8$WrJJg%A(KcujEWiWHS4%I`k202T27d|`YzEotW9$Q zczYX}WPko2TVvAd=-c8(Ygy4ZdoS_gL=cLs^b}C|<%A>w;9)<>ND*L?{gLO^v#0b$ z$r1|wc$EB`j?utmRQl&^X!62;--ad;mhs%|svD!x5Nq?xs4FQ-UsJr;*p$DLUrP%< zFzl{>e4iOCnQ@|c5x*cK1~UfiVitZv7qiNaI)6|X*4VcR&j*{(lWLxoh`Ny%7lufp zW8ut)MFwWvFdYF{7X*kzNM=ngZj^}~z5po-`mbkv3GxC23D^xP5&#}+rxz88f*t?+ zfqx1!#v{}0Df->3sL_3&`g7d0*_fm+t3FD37*`&SP*?N?(JmtGoQCrlNpW(J0WU!S z(0_9@O~X#WORb-M4F)tf-C`d`))Do%sf&T{dBj&74IT*iufZgc*=%XYgHOV}AkJF` ztVci+@%Q)-vMqVT!=$a)KclY|v+>}0cL>u}>8JAnLmG!(euD=#`#b6Sg`yr7*M_hGey?f*_n1{G&D5WrmCx}v-O#+LwR|*GBgkfP)ke8 z%w0ekr7%`hRHP+95i+Bxxw(19HM<2nqRYz4WQwY)DgrU03%t_~c%KBw3KPO?3CV;E zkf7^2$8PRD)+%iDY>KoiOx$WNk0gY+M|XF(5EteJ2Ie~hZvc@IALUrp=LrA+002ov JPDHLkV1mQyK0E*b delta 413 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 literal 1458 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 Z{tvXj0GfXniopN?002ovPDHLkV1hP2lY;;N diff --git a/core/src/main/assets/interfaces/status_pane-puresoul_dark.png b/core/src/main/assets/interfaces/status_pane-puresoul_dark.png deleted file mode 100644 index e5dc3b758a96d16b7f2a4f4446b03005a6651d98..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1456 zcmeAS@N?(olHy`uVBq!ia0vp^4M5z^!3-o{K3(X@z`z(8;1l9%=U`dgP@IvI7#bN+ zT#;jGZQ9&X1yo~UWnyh>zIfSGdq=DO$t~uV##T0FW)?=a_7P9BI zS~_Zm#yXnXss={d8d@s)hFa>H%6bNxY8pzq`WmY0iaL7gDrySax@yX*@>)8oN-A=i z+A505vICa;^Ev-tFInqkGC^CvR@ER=UMEpj^U$F~bLY-&X=%yM z&W?|d|8#HWr>h;G&J=$-mig&G%%^QGpH|B<{CD8EXvII%h__agJwjSwktx?<3*oEI zd@o#8wtUi@b55>dm2^)3|2Bqm1st0b*{1|?awT=I1BPR9NswRge+XcJ()6IXr?YHg zU|^o?>EaktG3V{9o5ezo0`1b%QVN)ql$4TOTwIQHbaZsOJ*vI`eeKi0SKY_||9{|j zXc6mX_rpHh`G4)pxKVOEhb&Z!r_PIbsjY@gOTr=-Z@1CV34H`v=s zeYaH)EqVv36!3ihQNrn3T7DT8!Y;md#hgnU?;M)BQQ=c8ho5@BCxGycWdV zSiLmhn90K)paDyF_$mrMzGm7xHF&be^4E#K(+gOC z&AmL?<9b%NT;qWS)oDU6BTIj=FstZq>^FQObmPMV!4o=tyA=;ADg1lMzWeK6mKP1& z89dxEN0PSfYw-5qxh`HH+5Yku)4BzQIt8NLH-Rig!+<(^ z&Eph(9=M0(aQ^A(So({p&h>CuE#rRW#I^tGH%J|0+UTGozmS-`#n}wh!MV=AW_?DfhEPmx&3@0_-V-0Zdi>k>O0jw*x5>x9KXy)D!#e9n-Jd(2 z*O+{3_8-+c8?~VOy}P2_$*2YW@7=i>jz%r$eP4P*$fL)6Uht03(^G=2Ui>mpxHYA( z?X1YFcn6~nx5H^%rnMey7c*}7EL_HaQbFq1*+#{y3b#He%DI>{dpvkwFvH~lbJ~Y; z4<2UznU3*EhP*aOY}MVzEI!PT6!4EIWEcFWG|`jACY7yz;z@%KJ(6F1wJskhPTLT^ zvxixK2II#`qU8d6lUxsEr#;{`{xD6l;yBNqbhabxVJrvA!x-$0nD5VMTz}?(dfEeH eV}|&MM*EGn4i}`FYzl#;1B0ilpUXO@geCx(Ftua= diff --git a/core/src/main/assets/interfaces/status_pane.png b/core/src/main/assets/interfaces/status_pane.png index a22ea846071dd46ed7e6af7c50058606d6314e86..dd53e404319bde437b4db826335e5dd313bf27e7 100644 GIT binary patch literal 3012 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 Z{tvXj0GfXniopN?002ovPDHLkV1hP2lY;;N diff --git a/core/src/main/assets/interfaces/status_pane_normal.png b/core/src/main/assets/interfaces/status_pane_normal.png index 4161e1d37808d1950c0f9be02b92a92b7996db0e..c4afb2643fc6fb2c9c8b5fb2350aa01af301ad1c 100644 GIT binary patch delta 1114 zcmV-g1f~1K3&sqP7Y>dH0{{R3&g$@q0004ou_bH)CJwLY51h^tjkghaod#5J1363r zA}tMwvyT4&1f43!;E-wn004rMnE`y0zyS(>A}sj?000B+Nkle&>5QiH! z*}(~jh%q8YL_|bHL|ie^NWAa+zHdu?_AY(!KbIj(VujgZ2BxQd;Co9_mETvDPS>)( z2B0QJOB`b0MWXnTK5^BTQy#=TZ#sgwANiwbe9nyM3M4i}kl9XRuRA&^aNk&?=CvmqQMUkJ>m zw@OLR8V%uS`9feWvrS57t~-P?y7M<;z7WV|w@b<9Oonj8d?ApZ-63T*Z!&}<<_m%O zxt&tx=JkhgcI zQVM16aV^Hk7Xp>yJ}Jct_s03v+5*+mekrA@BY|4^fRu90kwCq2P)eolNT5+YG=QZE z(-Uac4zGvD)*c(<=mM?!k@aw|*$4a2&=m+8N7uu<0bO7UWZT_a3{D7wMRb9<^zp`9YM&Iem(T^I-{oE>{9|;e z1eW{I2qgX0X^4>suz%(OH$O_i9dODR%L1oOv767}j3Jiu8Jso4c0Pl1##k0OZ;IV~ z1{VymoX_B*8MgBoT1qL|`H?5zy_~u|6g1*Y{`w%KF|5RzMX{)%QX8 z!WQp+<&gS52zoDU15^Q3eZLe6;JvLIQr~yN8Nhp6H>AGzIxBEY0Y!a(&y)SPb$}?K zs_&ib0abnPWDlt7dnbE9Ro@5AvH({=Ro^>VM5_AU$s$tK_f8g(s=jx!h!pkx+5rLP zzoDwWce02S^}X+hdjM5HQQ!N`u))QvkR$4QLAAmCpx#?Vb<{l|sqcH#nq2`Gn^02U z_o%lV2}tVuesk_SS;dln`o7?Cz7HP+S04!x zSFyCdmw_b^TYc^uz}08Nb~A#uqi4eKTx0-oKjLH&h36szi2D&Iizqx789>~RI9WuU zs6Ehe^GrCET#kS{c_vgYA{QS{$rlkbzu~Y6gImOy-;h`aZWCjFe8gfKxI>KT6^(V^ zE-}FFk&z0@^2?SinbO-~%!6mKb delta 988 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 O3TUb6t0Gh!;{F3%Eg_Zw literal 3516 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 diff --git a/core/src/main/assets/interfaces/toolbar_normal.png b/core/src/main/assets/interfaces/toolbar_normal.png index dbb1f1ad46a3bcab7543a6eb31c5ca3af01a4539..b3e49dcad410274d91259ef26748075b31c9c3ad 100644 GIT binary patch literal 4769 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

@4w)33CC8>ph+rf@DNyC-z_HiC~ZvVln zC(hlwz@wLYv$$7|QYf36VIyzK!gVcd43@$*C!tTF))OcJDi|nr)qG{TfxuFA^$VY3 zJRf{8!OM3J@|lFDPi&cD0P0Dh;Uvu1zty&%69w*$8&=3ngJ-=up34vizsIbt+W=r} zGr|nKD8;PCb^HnV_&xeu*|z!I$pgUsG~+Dab3FczD4ID)TJaNZ?k=&9)F*Po?>AOr z@W5DA5;rE5BPnap9ljq8ZB?$dtwFu7zAu(wV>1%VLfY%dxcl?1)i-EOL9Gk=tn<)* zt$1+qF8ld(OvF=T11%UUpWg?Ko_D5FPA7=l&ZFv&{$fBUX*950UBbZgr;q!--1}h+ z==Kx-_UB|ca3{YW^T_oc33&g_2TAupAD?$l%LI-5P+^f&QC$B1XttZ~)oG|j79)SZ z6-$1d+}vfX^Zo0z@p}wFe%)?fZc#}7I6>49m{yR(#Bs&vTtJV%9ZL2B_)q(ei-ZU$ zPRkEU;nd6&JtS_5=fSRCM^pu7qcfsq`Tat3wh@C5Ldvne;=rxm&uK~#yWr@ozTUzB zs1ZNkG3?k?^tv_kn9SxP(iDseq&G@Y22{=_46TTIH01rvmPyo3e5-t1)U3%fJf9{p z>)u~8JA4vN>&qY_?^x{6nEp*@ed3l`6xC5VhjF0GJ@ZqvdOk>Rsd84cA!Gre*c{l! zg)HdvqQj`y_tOt7Ttn&2^&JmH0fXaEkiQWRnqY-f%ZQ`2p)!4>2xpGQ{@jOc+dA>TMD!l9ma*(V~t z|KhHQ;!8VELY)piX_1ZH!kK`vzbpCc^-Ij>n#Xpzx|DHghU5APOxE4mHQ5|TubA5x zK;h&4egV%e+eR|R^yz0HF4)w(Q2(Sh2F8a5v$9zTj`%w&onO+Wq;N~{ml+*M^k~;B zqxqi}zR66K;MU&<%lJqQkpO0{4$G4hGs>C~-R`L{isjDz)~#?XwHPE?{l0$Ig9c#D z2(rEg33>74fmB47q1awzU)^Z$ZDj^rv$sIylz*37BinLn8k#fVY(F_t(Cy)oCk&sj z%`%|Wbmb;{OH6q9_Uh*A5S2o<`?w~Cj`Q^pkxbLkD>@mP274@T6x0WN9j%Pw7B@vc zTNP!^ckI>2I?P&p1sro$4T(Nm-M+WCEN-P`skR#Xt^enY+hbQanDieI!}(NER!#r( zzkb6wV10o0hqCMG`oETx8fPNv@y&UFb>wpMC){^5ZOPWH-Rg5oTC3^P(kw3DRifJe z#<4l(g-q}kWBztFN3!bO`po&M+$*Fxf+X^p^FerHqs3!=y8!fLqXp_3mo6%=u@}6w zzSisrz;G=s?1+0S+Xy1!2rzE$;Y%+WOL`XU;hIwIHpr{?k$ULHU~Kv2v{2v0<<8~U zH<$4gPUf+g!eg(Ajto`=C}oK`m}pj(&N2WRT0RcoZI!v`!7D3WoAL6@JHm_%eAQ%6H{i?QcJldxey$W9w`~D>&OZ z&*IGgjSUaSEdBlnjeD>w(D1?>Q}UPSpaKy__Io>9M5JTjT(z~eE%kOs>W3hU`{@at zEfmm`GExw{*yv-j$M(t!omtHbNQJ`*H%0y#r4hAY0q$-X+N;h!*s*j?O!SEz=*>Pm zv)Y!3h#|*-SXt+*+xn%wMr(VSHwNqZSD_o^dO55_yHrROUq`u7;eB4|?}!E>(w7FX zf$&HRlbN5mF$HB_CV!23SswT&rDpBwRU5BuyE=eX@zK$LPq90h$L#pP`r z61JZr`6jKCys9eN0*yI~jS96BsZLLe%RPs+Q>TNW=L|P5Z+9iRSTJ_skekWiUt}lq zVwb5y-oXRjP3z=6_}gKTp_|=-`72SPy zKA}#3m(7*ld1~K1Sn$qb>1mF&_9n)7bc}$wC^4#|DwTB9jQbkpNK<&X$05muQGE3J zUM%?%iPqEW`#fS?!_WT&YI2$Fs2OGse^RddzZ{vT*)VoD>cXhV(9+vbZneUmjW4E; zpkFi4A0*O}Im{6F7>=82I<`_uKqc}0_oVk6Wiy8JGyPw!z4MHQ YyKDbV=?2Zy^QR4= 50) { badge = Badge.GAMES_PLAYED_2; } - if (Rankings.INSTANCE.totalNumber >= 250) { + if (Rankings.INSTANCE.totalNumber >= 75) { badge = Badge.GAMES_PLAYED_3; } - if (Rankings.INSTANCE.totalNumber >= 1000) { + if (Rankings.INSTANCE.totalNumber >= 100) { badge = Badge.GAMES_PLAYED_4; } diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/QuickSlot.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/QuickSlot.java index d4a57d93e..0471c6fc7 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/QuickSlot.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/QuickSlot.java @@ -21,7 +21,6 @@ package com.shatteredpixel.shatteredpixeldungeon; -import com.shatteredpixel.shatteredpixeldungeon.custom.utils.Constants; import com.shatteredpixel.shatteredpixeldungeon.items.Item; import com.watabou.utils.Bundlable; import com.watabou.utils.Bundle; @@ -38,8 +37,12 @@ public class QuickSlot { */ //note that the current max size is coded at 4, due to UI constraints, but it could be much much bigger with no issue. - public static int SIZE = Constants.MAX_QUICKSLOTS; - private Item[] slots = new Item[SIZE]; + public static int SIZE = 12; + + public static int VSIZE = 9; + + public int quickslots; + private Item[] slots = new Item[SIZE]; //direct array interaction methods, everything should build from these methods. diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/SPDAction.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/SPDAction.java index cb226f785..7d9979a00 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/SPDAction.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/SPDAction.java @@ -55,6 +55,8 @@ public class SPDAction extends GameAction { public static final GameAction SE = new SPDAction("se"); public static final GameAction WAIT = new SPDAction("wait"); + public static final GameAction SLPD = new SPDAction("slpd"); + public static final GameAction INVENTORY = new SPDAction("inventory"); public static final GameAction QUICKSLOT_1 = new SPDAction("quickslot_1"); public static final GameAction QUICKSLOT_2 = new SPDAction("quickslot_2"); @@ -101,6 +103,8 @@ public class SPDAction extends GameAction { defaultBindings.put( Input.Keys.D, SPDAction.E ); defaultBindings.put( Input.Keys.SPACE, SPDAction.WAIT ); + defaultBindings.put( Input.Keys.K, SPDAction.SLPD ); + defaultBindings.put( Input.Keys.UP, SPDAction.N ); defaultBindings.put( Input.Keys.LEFT, SPDAction.W ); defaultBindings.put( Input.Keys.DOWN, SPDAction.S ); diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/SPDSettings.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/SPDSettings.java index 557f65bbd..93d1179f6 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/SPDSettings.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/SPDSettings.java @@ -137,6 +137,8 @@ public class SPDSettings extends GameSettings { private static final String ATBSettings = "ATBsettings"; + private static final String V1TOOL = "v1tool"; + public static void fullscreen( boolean value ) { put( KEY_FULLSCREEN, value ); @@ -231,7 +233,7 @@ public class SPDSettings extends GameSettings { } public static int interfaceSize(){ - int size = getInt( KEY_UI_SIZE, DeviceCompat.isDesktop() ? 2 : 0 ); + int size = getInt( KEY_UI_SIZE, DeviceCompat.isDesktop() ? 1 : 0 ); if (size > 0){ //force mobile UI if there is not enough space for full UI float wMin = Game.width / PixelScene.MIN_WIDTH_FULL; @@ -240,6 +242,10 @@ public class SPDSettings extends GameSettings { size = 0; } } + + if(size == 2){ + size = 1; + } return size; } @@ -429,6 +435,10 @@ public class SPDSettings extends GameSettings { } } + public static void systemFont(boolean value){ + put(KEY_SYSTEMFONT, value); + } + public static boolean systemFont(){ return getBoolean(KEY_SYSTEMFONT, (language() == Languages.CHINESE || language() == Languages.JAPANESE)); @@ -544,4 +554,10 @@ public class SPDSettings extends GameSettings { public static void ClassPage(boolean value) { put( KEY_PAGE, value ); } + + public static boolean quickSwapper() { + return getBoolean(V1TOOL, false); + } + + public static void quickSwapper(boolean value ){ put( V1TOOL, value ); } } diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/mobs/Rat.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/mobs/Rat.java index eb186b180..f84ce3ac7 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/mobs/Rat.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/mobs/Rat.java @@ -37,7 +37,7 @@ public class Rat extends Mob { HP = HT = 8; defenseSkill = 2; - maxLvl = 30; + maxLvl = 5; } @Override diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/custom/utils/Constants.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/custom/utils/Constants.java index 6877fa834..400270d2c 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/custom/utils/Constants.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/custom/utils/Constants.java @@ -1,15 +1,9 @@ package com.shatteredpixel.shatteredpixeldungeon.custom.utils; -import com.watabou.noosa.Game; - public class Constants { public static final int MAX_DEPTH = 26; public static final int MAX_QUICKSLOTS = 12; - public static final int MOX_QUICKSLOTS = 8; + public static final int MOX_QUICKSLOTS = 4; public static final int MIN_QUICKSLOTS = 3; - - public static boolean gameIsAndroid(){ - return Game.platform.getClass().getSimpleName().contains("Android"); - } } diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/lightblack/OilLantern.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/lightblack/OilLantern.java index 49fea8753..caf5b778b 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/lightblack/OilLantern.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/lightblack/OilLantern.java @@ -1,7 +1,4 @@ package com.shatteredpixel.shatteredpixeldungeon.items.lightblack; -// -// Decompiled by Jadx - 759ms -// import static com.shatteredpixel.shatteredpixeldungeon.Dungeon.hero; @@ -71,14 +68,14 @@ public class OilLantern extends Item { } public void storeInBundle(Bundle bundle) { - OilLantern.super.storeInBundle(bundle); + super.storeInBundle(bundle); bundle.put(ACTIVE, this.active); bundle.put(CHARGE, this.charge); bundle.put(FLASKS, this.flasks); } public void restoreFromBundle(Bundle bundle) { - OilLantern.super.restoreFromBundle(bundle); + super.restoreFromBundle(bundle); this.active = bundle.getBoolean(ACTIVE); this.charge = bundle.getInt(CHARGE); this.flasks = bundle.getInt(FLASKS); @@ -146,7 +143,7 @@ public class OilLantern extends Item { } public void refills(Hero hero) { - this.flasks--; + this.plingks--; this.charge += Math.min(MIX_CHARGE,100); hero.spend(TIME_TO_USE); hero.busy(); diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/rooms/standard/EyeRoom.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/rooms/standard/EyeRoom.java index 402e2d3f6..296eb5b58 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/rooms/standard/EyeRoom.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/rooms/standard/EyeRoom.java @@ -12,7 +12,6 @@ import com.shatteredpixel.shatteredpixeldungeon.actors.mobs.Mimic; import com.shatteredpixel.shatteredpixeldungeon.actors.mobs.Mob; import com.shatteredpixel.shatteredpixeldungeon.actors.mobs.SRPDHBLR; import com.shatteredpixel.shatteredpixeldungeon.items.Generator; -import com.shatteredpixel.shatteredpixeldungeon.items.Gold; import com.shatteredpixel.shatteredpixeldungeon.items.Heap; import com.shatteredpixel.shatteredpixeldungeon.levels.Level; import com.shatteredpixel.shatteredpixeldungeon.levels.Terrain; @@ -83,8 +82,7 @@ public class EyeRoom extends SpecialRoom { int chestPos = (top + 6) * level.width() + left + 6; - /** 套五个宝箱 */ - level.drop( new Gold(),chestPos).type = Heap.Type.TELECRYSTL; + /** 套4个宝箱 */ level.mobs.add(Mimic.spawnAt(chestPos,( Generator.randomUsingDefaults( Generator.Category.POTION ) ), CrystalMimic.class)); level.mobs.add(Mimic.spawnAt(chestPos,( Generator.randomUsingDefaults( Generator.Category.SCROLL ) ), CrystalMimic.class)); level.mobs.add(Mimic.spawnAt(chestPos,( Generator.randomUsingDefaults( Generator.Category.WEAPON ) ), diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/rooms/standard/YinYangRoom.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/rooms/standard/YinYangRoom.java index 3ac78240a..24ec204fa 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/rooms/standard/YinYangRoom.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/rooms/standard/YinYangRoom.java @@ -8,6 +8,7 @@ import com.shatteredpixel.shatteredpixeldungeon.items.Generator; import com.shatteredpixel.shatteredpixeldungeon.items.Heap; import com.shatteredpixel.shatteredpixeldungeon.items.Item; import com.shatteredpixel.shatteredpixeldungeon.items.keys.CrystalKey; +import com.shatteredpixel.shatteredpixeldungeon.items.keys.IronKey; import com.shatteredpixel.shatteredpixeldungeon.items.potions.PotionOfLevitation; import com.shatteredpixel.shatteredpixeldungeon.levels.Level; import com.shatteredpixel.shatteredpixeldungeon.levels.Terrain; @@ -120,11 +121,11 @@ public class YinYangRoom extends SpecialRoom { if(Dungeon.depth == 1){ door.set(Door.Type.REGULAR); } else { - door.set(Door.Type.HIDDEN); + door.set(Door.Type.LOCKED); } } - + level.addItemToSpawn( new IronKey( Dungeon.depth ) ); level.addItemToSpawn( new CrystalKey( Dungeon.depth ) ); level.addItemToSpawn( new PotionOfLevitation()); diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/scenes/GameScene.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/scenes/GameScene.java index 15741978c..3e12ed3bd 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/scenes/GameScene.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/scenes/GameScene.java @@ -120,6 +120,7 @@ import com.shatteredpixel.shatteredpixeldungeon.ui.StyledButton; import com.shatteredpixel.shatteredpixeldungeon.ui.Tag; import com.shatteredpixel.shatteredpixeldungeon.ui.TargetHealthIndicator; import com.shatteredpixel.shatteredpixeldungeon.ui.Toast; +import com.shatteredpixel.shatteredpixeldungeon.ui.ToobarV; import com.shatteredpixel.shatteredpixeldungeon.ui.Toolbar; import com.shatteredpixel.shatteredpixeldungeon.ui.Window; import com.shatteredpixel.shatteredpixeldungeon.utils.GLog; @@ -217,7 +218,8 @@ public class GameScene extends PixelScene { private InventoryPane inventory; private static boolean invVisible = true; - private Toolbar toolbar; + private ToobarV toolbar; + private Toolbar toolbarv1; private Toast prompt; private AttackIndicator attack; @@ -414,19 +416,35 @@ public class GameScene extends PixelScene { bringToFront(status); } - toolbar = new Toolbar(); - toolbar.camera = uiCamera; - add( toolbar ); + /**Toolbar V1+V2 */ + if(SPDSettings.quickSwapper()) { + toolbarv1 = new Toolbar(); + toolbarv1.camera = uiCamera; + add(toolbarv1); + } else { + toolbar = new ToobarV(); + toolbar.camera = uiCamera; + add( toolbar ); + } + if (uiSize == 2) { inventory = new InventoryPane(); inventory.camera = uiCamera; inventory.setPos(uiCamera.width - inventory.width(), uiCamera.height - inventory.height()); add(inventory); - - toolbar.setRect( 0, uiCamera.height - toolbar.height() - inventory.height(), uiCamera.width, toolbar.height() ); + if(SPDSettings.quickSwapper()) { + toolbarv1.setRect(0, uiCamera.height - toolbarv1.height() - inventory.height(), uiCamera.width, + toolbarv1.height()); + } else { + toolbar.setRect(0, uiCamera.height - toolbar.height() - inventory.height(), uiCamera.width, toolbar.height()); + } } else { - toolbar.setRect( 0, uiCamera.height - toolbar.height(), uiCamera.width, toolbar.height() ); + if(SPDSettings.quickSwapper()) { + toolbarv1.setRect(0, uiCamera.height - toolbarv1.height(), uiCamera.width, toolbarv1.height()); + } else { + toolbar.setRect(0, uiCamera.height - toolbar.height(), uiCamera.width, toolbar.height()); + } } layoutTags(); @@ -935,7 +953,9 @@ public class GameScene extends PixelScene { float invWidth = (scene.inventory != null && scene.inventory.visible) ? scene.inventory.width() : 0; - float y = SPDSettings.interfaceSize() == 0 ? scene.toolbar.top()-2 : scene.status.top()-2; + float y = SPDSettings.interfaceSize() == 0 ? SPDSettings.quickSwapper()? scene.toolbarv1.top()-2: + scene.toolbar.top()-2 : + scene.status.top()-2; if (tagsOnLeft) { scene.log.setRect(tagWidth, y, uiCamera.width - tagWidth - insets.right - invWidth, 0); } else if (invWidth > 0) { @@ -944,7 +964,7 @@ public class GameScene extends PixelScene { scene.log.setRect(insets.left, y, uiCamera.width - tagWidth - insets.left, 0); } - float pos = scene.toolbar.top(); + float pos = SPDSettings.quickSwapper()?scene.toolbarv1.top():scene.toolbar.top(); if (tagsOnLeft && SPDSettings.interfaceSize() > 0){ pos = scene.status.top(); } @@ -1190,7 +1210,13 @@ public class GameScene extends PixelScene { } public static void pickUp( Item item, int pos ) { - if (scene != null) scene.toolbar.pickup( item, pos ); + if (scene != null){ + if (SPDSettings.quickSwapper()) { + scene.toolbarv1.pickup(item, pos); + } else { + scene.toolbar.pickup(item, pos); + } + } } public static void pickUpJournal( Item item, int pos ) { @@ -1308,10 +1334,19 @@ public class GameScene extends PixelScene { if (scene != null && scene.inventory != null){ if (scene.inventory.visible){ scene.inventory.visible = scene.inventory.active = invVisible = false; - scene.toolbar.setPos(scene.toolbar.left(), uiCamera.height-scene.toolbar.height()); + if(SPDSettings.quickSwapper()){ + scene.toolbarv1.setPos(scene.toolbarv1.left(), uiCamera.height-scene.toolbarv1.height()); + } else { + scene.toolbar.setPos(scene.toolbar.left(), uiCamera.height-scene.toolbar.height()); + } + } else { scene.inventory.visible = scene.inventory.active = invVisible = true; - scene.toolbar.setPos(scene.toolbar.left(), scene.inventory.top()-scene.toolbar.height()); + if(SPDSettings.quickSwapper()) { + scene.toolbarv1.setPos(scene.toolbarv1.left(), scene.inventory.top() - scene.toolbarv1.height()); + } else { + scene.toolbar.setPos(scene.toolbar.left(), scene.inventory.top() - scene.toolbar.height()); + } } layoutTags(); } @@ -1605,7 +1640,18 @@ public class GameScene extends PixelScene { selectCell( defaultCellListener ); QuickSlotButton.cancel(); InventoryPane.cancelTargeting(); - if (scene != null && scene.toolbar != null) scene.toolbar.examining = false; + + if(SPDSettings.quickSwapper()){ + if (scene != null && scene.toolbarv1 != null){ + scene.toolbarv1.examining = false; + } + } else { + if (scene != null && scene.toolbar != null){ + scene.toolbar.examining = false; + } + } + + } public static void checkKeyHold(){ diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/scenes/PixelScene.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/scenes/PixelScene.java index 4488a38a8..20286c4db 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/scenes/PixelScene.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/scenes/PixelScene.java @@ -147,12 +147,12 @@ public class PixelScene extends Scene { renderedTextPageSize = 1024; } //asian languages have many more unique characters, so increase texture size to anticipate that - if - (Messages.lang() == Languages.CHINESE || + //asian languages have many more unique characters, so increase texture size to anticipate that + if (Messages.lang() == Languages.CHINESE || Messages.lang() == Languages.JAPANESE){ renderedTextPageSize *= 2; } - Game.platform.setupFontGenerators(renderedTextPageSize, false); + Game.platform.setupFontGenerators(renderedTextPageSize, SPDSettings.systemFont()); Tooltip.resetLastUsedTime(); diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/services/analyticsfirebase/Beta.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/services/analyticsfirebase/Beta.java index 02d2160a6..e69de29bb 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/services/analyticsfirebase/Beta.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/services/analyticsfirebase/Beta.java @@ -1,5 +0,0 @@ -package com.shatteredpixel.shatteredpixeldungeon.services.analyticsfirebase; - -public class Beta { - public static FireBaseService service; -} diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/ui/BossHealthBar.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/ui/BossHealthBar.java index c3ec72457..82ba40bdc 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/ui/BossHealthBar.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/ui/BossHealthBar.java @@ -166,11 +166,15 @@ public class BossHealthBar extends Component { float health = boss.HP; float shield = boss.shielding(); float max = boss.HT; - int maxHp = boss.HP; hp.scale.x = Math.max( 0, (health-shield)/max); shieldedHP.scale.x = health/max; rawShielding.scale.x = shield/max; + + if (hp.scale.x < 0.25f){ + bleed( true ); + } + if (shield <= 0){ hpText.text(health + "/" + max); } diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/ui/JoinIndicator.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/ui/JoinIndicator.java index 0d6a45234..7185dc1db 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/ui/JoinIndicator.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/ui/JoinIndicator.java @@ -66,7 +66,7 @@ public class JoinIndicator extends Button { bg.hardlight(0x00ffff); add(bg); - add(slot = new Toolbar.Tool(48, 26, 48, 72) { + add(slot = new Toolbar.Tool(48, 26, 24, 72) { @Override protected void onClick() { diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/ui/QuickSlotButton.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/ui/QuickSlotButton.java index 20ddf8d88..6bc82cd24 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/ui/QuickSlotButton.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/ui/QuickSlotButton.java @@ -70,6 +70,10 @@ public class QuickSlotButton extends Button { reset(); } + public void slotMargins( int left, int top, int right, int bottom){ + slot.setMargins(left, top, right, bottom); + } + public static void reset() { instance = new QuickSlotButton[Constants.MAX_QUICKSLOTS]; diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/ui/StatusPane.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/ui/StatusPane.java index 5f7e460eb..2a0e2e426 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/ui/StatusPane.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/ui/StatusPane.java @@ -104,7 +104,7 @@ public class StatusPane extends Component { public JoinIndicator joinxxx; public LanterFireCator lanter; - private static String asset = Assets.Interfaces.STATUS; + private static String asset = Assets.Interfaces.STATUS_DARK; private boolean large; @@ -164,8 +164,10 @@ public class StatusPane extends Component { else hg = new Image(asset, 0, 45, 49, 4); add( hg ); - if (large) icehp = new Image(asset, 0, 128, 128, 7); - else icehp = new Image(asset, 0, 49, 52, 4); + if (large) + icehp = new Image(asset, 0, 135, 128, 6); + else icehp = new Image(asset, 0, 49, 52, 4); + add( icehp ); lanterfirevae = new Image(Assets.Interfaces.LANTERLING); @@ -175,7 +177,6 @@ public class StatusPane extends Component { hpText.alpha(0.6f); add(hpText); - hgText = new BitmapText(PixelScene.pixelFont); hgText.alpha(0.6f); add(hgText); @@ -280,14 +281,18 @@ public class StatusPane extends Component { PixelScene.align(hpText); hg.x= x + 30; - hg.y= y + 10; + hg.y= y + 10f; hgText.x = x+80; hgText.y = hg.y; PixelScene.align(hgText); icehp.x = x+ 30; - icehp.y = y + 4; + icehp.y = y + 2f; + + icehpText.x = x+80; + icehpText.y = icehp.y-0.6f; + PixelScene.align(icehpText); expText.x = exp.x + (128 - expText.width())/2f; expText.y = exp.y; @@ -378,6 +383,12 @@ public class StatusPane extends Component { public void update() { super.update(); + if (SPDSettings.ClassUI()) { + asset = Assets.Interfaces.STATUS; + } else { + asset = Assets.Interfaces.STATUS_DARK; + } + int maxHunger = (int) Hunger.STARVING; int maxPureSole = Dungeon.hero.lanterfire; int mtPureSole = 100; diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/ui/ToobarV.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/ui/ToobarV.java new file mode 100644 index 000000000..046e70b71 --- /dev/null +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/ui/ToobarV.java @@ -0,0 +1,632 @@ +package com.shatteredpixel.shatteredpixeldungeon.ui; + +import static com.shatteredpixel.shatteredpixeldungeon.QuickSlot.VSIZE; + +import com.shatteredpixel.shatteredpixeldungeon.Assets; +import com.shatteredpixel.shatteredpixeldungeon.Dungeon; +import com.shatteredpixel.shatteredpixeldungeon.QuickSlot; +import com.shatteredpixel.shatteredpixeldungeon.SPDAction; +import com.shatteredpixel.shatteredpixeldungeon.SPDSettings; +import com.shatteredpixel.shatteredpixeldungeon.items.Item; +import com.shatteredpixel.shatteredpixeldungeon.messages.Messages; +import com.shatteredpixel.shatteredpixeldungeon.scenes.CellSelector; +import com.shatteredpixel.shatteredpixeldungeon.scenes.GameScene; +import com.shatteredpixel.shatteredpixeldungeon.scenes.PixelScene; +import com.shatteredpixel.shatteredpixeldungeon.sprites.ItemSprite; +import com.shatteredpixel.shatteredpixeldungeon.tiles.DungeonTerrainTilemap; +import com.shatteredpixel.shatteredpixeldungeon.windows.WndBag; +import com.shatteredpixel.shatteredpixeldungeon.windows.WndKeyBindings; +import com.shatteredpixel.shatteredpixeldungeon.windows.WndQuickBag; +import com.watabou.gltextures.TextureCache; +import com.watabou.input.GameAction; +import com.watabou.noosa.Camera; +import com.watabou.noosa.ColorBlock; +import com.watabou.noosa.Game; +import com.watabou.noosa.Gizmo; +import com.watabou.noosa.Image; +import com.watabou.noosa.PointerArea; +import com.watabou.noosa.audio.Sample; +import com.watabou.noosa.ui.Component; +import com.watabou.utils.Point; +import com.watabou.utils.PointF; + +public class ToobarV extends Component { + + private Tool btnWait; + private Tool btnExamine; + private Tool btnInventory; + private SwitchQuickSlotTool btnSwitchSlot; + private QuickslotTool[] btnQuick; + private int numVisibleSlots; + + private PickedUpItem pickedUp; + + private boolean lastEnabled = true; + public boolean examining = false; + + private static ToobarV instance; + + public enum Mode { + SPLIT, + GROUP, + CENTER + } + + public ToobarV() { + super(); + instance = this; + height = btnInventory.height(); + } + + @Override + protected void createChildren() { + + numVisibleSlots = 2; + if (PixelScene.uiCamera.width > 120) numVisibleSlots++; + if (PixelScene.uiCamera.width > 138) numVisibleSlots++; + if (PixelScene.uiCamera.width > 156) numVisibleSlots++; + if (PixelScene.uiCamera.width > 174) numVisibleSlots++; + if (PixelScene.uiCamera.width > 192) numVisibleSlots++; + if (PixelScene.uiCamera.width > 210) numVisibleSlots++; + if (PixelScene.uiCamera.width > 228) numVisibleSlots++; + + if (numVisibleSlots < VSIZE) { + numVisibleSlots--; + add( btnSwitchSlot = new SwitchQuickSlotTool( 125, 0, 16, 16) ); + } + + btnQuick = new QuickslotTool[VSIZE]; + for (int i = 0; i < btnQuick.length; i++){ + add( btnQuick[i] = new QuickslotTool(64, 0, 22, 24, i) ); + } + + add(btnWait = new Tool(24, 0, 20, 26) { + @Override + protected void onClick() { + if (Dungeon.hero.ready && !GameScene.cancel()) { + examining = false; + Dungeon.hero.rest(false); + } + } + + @Override + public GameAction keyAction() { + return SPDAction.WAIT; + } + + @Override + protected String hoverText() { + return Messages.titleCase(Messages.get(WndKeyBindings.class, "wait")); + } + + protected boolean onLongClick() { + if (Dungeon.hero.ready && !GameScene.cancel()) { + examining = false; + Dungeon.hero.rest(true); + } + return true; + } + }); + + add(new Button(){ + @Override + protected void onClick() { + if (Dungeon.hero.ready && !GameScene.cancel()) { + examining = false; + Dungeon.hero.rest(true); + } + } + + @Override + public GameAction keyAction() { + if (btnWait.active) return SPDAction.REST; + else return null; + } + }); + + add(btnExamine = new Tool(44, 0, 20, 26) { + @Override + protected void onClick() { + if (Dungeon.hero.ready) { + if (!examining && !GameScene.cancel()) { + GameScene.selectCell(informer); + examining = true; + } else if (examining) { + informer.onSelect(null); + Dungeon.hero.search(true); + } + } + } + + @Override + public GameAction keyAction() { + return SPDAction.EXAMINE; + } + + @Override + protected String hoverText() { + return Messages.titleCase(Messages.get(WndKeyBindings.class, "examine")); + } + + @Override + protected boolean onLongClick() { + Dungeon.hero.search(true); + return true; + } + }); + + addToBack(btnInventory = new Tool(0, 0, 24, 26) { + private GoldIndicator gold; + + @Override + protected void onClick() { + if (Dungeon.hero.ready || !Dungeon.hero.isAlive()) { + if (!GameScene.cancel()) { + GameScene.show(new WndBag(Dungeon.hero.belongings.backpack)); + } + } + } + + @Override + public GameAction keyAction() { + return SPDAction.INVENTORY; + } + + @Override + protected String hoverText() { + return Messages.titleCase(Messages.get(WndKeyBindings.class, "inventory")); + } + + @Override + protected boolean onLongClick() { + GameScene.show(new WndQuickBag(null)); + return true; + } + + @Override + protected void createChildren() { + super.createChildren(); + gold = new GoldIndicator(); + add(gold); + } + + @Override + protected void layout() { + super.layout(); + gold.fill(this); + } + }); + + add(pickedUp = new PickedUpItem()); + } + + @Override + protected void layout() { + + float right = width; + + final int quickSlots = numVisibleSlots == QuickSlot.VSIZE ? 0 : Dungeon.quickslot.quickslots; + int slotIndex; + for(int i = 0; i < numVisibleSlots; i++) { + slotIndex = boundIndex(quickSlots + i); + if (i == 0 && !SPDSettings.flipToolbar() || + i == numVisibleSlots -1 && SPDSettings.flipToolbar()){ + btnQuick[slotIndex].border(0, 2); + btnQuick[slotIndex].frame(106, 0, 19, 24); + } else if (i == 0 && SPDSettings.flipToolbar() || + i == numVisibleSlots -1 && !SPDSettings.flipToolbar()){ + btnQuick[slotIndex].border(2, 1); + btnQuick[slotIndex].frame(86, 0, 20, 24); + } else { + btnQuick[slotIndex].border(0, 1); + btnQuick[slotIndex].frame(88, 0, 18, 24); + } + } + + boolean[] visible = new boolean[QuickSlot.VSIZE]; + slotIndex = boundIndex(quickSlots); + visible[slotIndex] = true; + + + if (SPDSettings.interfaceSize() == 0) { + switch (Mode.valueOf(SPDSettings.toolbarMode())) { + case SPLIT: + btnWait.setPos(x, y); + btnExamine.setPos(btnWait.right(), y); + + btnInventory.setPos(right - btnInventory.width(), y); + + btnQuick[slotIndex].setPos(btnInventory.left() - btnQuick[slotIndex].width(), y + 2); + for (int i = 1; i < numVisibleSlots; i++) { + slotIndex = boundIndex(quickSlots + i); + visible[slotIndex] = true; + btnQuick[slotIndex].setPos(btnQuick[boundIndex(quickSlots + i - 1)].left() - btnQuick[slotIndex].width(), y + 2); + } + if (numVisibleSlots < QuickSlot.VSIZE) + btnSwitchSlot.setPos(btnQuick[slotIndex].left() - btnSwitchSlot.width(), y + 10); + + break; + + //center = group but.. well.. centered, so all we need to do is pre-emptively set the right side further in. + case CENTER: + float toolbarWidth = btnWait.width() + btnExamine.width() + btnInventory.width(); + for (int i = 0; i < numVisibleSlots; i++) { + toolbarWidth += btnQuick[boundIndex(quickSlots + i)].width(); + } + if (numVisibleSlots < QuickSlot.VSIZE) toolbarWidth += btnSwitchSlot.width(); + right = (width + toolbarWidth) / 2; + + case GROUP: + btnWait.setPos(right - btnWait.width(), y); + btnExamine.setPos(btnWait.left() - btnExamine.width(), y); + btnInventory.setPos(btnExamine.left() - btnInventory.width(), y); + + btnQuick[slotIndex].setPos(btnInventory.left() - btnQuick[slotIndex].width(), y + 2); + for (int i = 1; i < numVisibleSlots; i++) { + slotIndex = boundIndex(quickSlots + i); + visible[slotIndex] = true; + btnQuick[slotIndex].setPos(btnQuick[boundIndex(quickSlots + i - 1)].left() - btnQuick[slotIndex].width(), y + 2); + } + if (numVisibleSlots < QuickSlot.VSIZE) + btnSwitchSlot.setPos(btnQuick[slotIndex].left() - btnSwitchSlot.width(), y + 10); + + break; + } + } else { + btnWait.setPos(x, y); + btnExamine.setPos(btnWait.right(), y); + + btnInventory.setPos(right - btnInventory.width(), y); + + btnQuick[slotIndex].setPos(btnInventory.left() - btnQuick[slotIndex].width(), y + 2); + for (int i = 1; i < numVisibleSlots; i++) { + slotIndex = boundIndex(quickSlots + i); + visible[slotIndex] = true; + btnQuick[slotIndex].setPos(btnQuick[boundIndex(quickSlots + i - 1)].left() - btnQuick[slotIndex].width(), y + 2); + } + if (numVisibleSlots < QuickSlot.VSIZE) + btnSwitchSlot.setPos(btnQuick[slotIndex].left() - btnSwitchSlot.width(), y + 10); + } + for (int i = 0; i < visible.length; i ++) { + btnQuick[i].visible = visible[i]; + if (!visible[i]) btnQuick[i].setPos(Integer.MAX_VALUE, Integer.MAX_VALUE); + } + right = width; + + if (SPDSettings.interfaceSize() > 0){ + btnInventory.setPos( right- btnInventory.width(), y); + btnWait.setPos(right - btnInventory.width(), y/3); + btnExamine.setPos(right - btnInventory.width(), btnWait.bottom()); + float toolbarWidth = btnWait.width() + btnExamine.width() + btnInventory.width(); + for (int i = 0; i < numVisibleSlots; i++) { + toolbarWidth += btnQuick[boundIndex(quickSlots + i)].width(); + } + if (numVisibleSlots < QuickSlot.VSIZE) toolbarWidth += btnSwitchSlot.width(); + right = (width + toolbarWidth)/2; + } + + if (SPDSettings.flipToolbar()) { + + btnWait.setPos( (right - btnWait.right()), y); + btnExamine.setPos( (right - btnExamine.right()), y); + btnInventory.setPos( (right - btnInventory.right()), y); + + for(int i = 0; i < numVisibleSlots; i++) { + slotIndex = boundIndex(quickSlots + i); + btnQuick[slotIndex].setPos( right - btnQuick[slotIndex].right(), y+2); + } + if (numVisibleSlots < QuickSlot.VSIZE) btnSwitchSlot.setPos(right - btnSwitchSlot.right(), y+10); + + } + + + } + + public static void updateLayout(){ + if (instance != null) instance.layout(); + } + + @Override + public void update() { + super.update(); + + if (lastEnabled != (Dungeon.hero.ready && Dungeon.hero.isAlive())) { + lastEnabled = (Dungeon.hero.ready && Dungeon.hero.isAlive()); + + for (Gizmo tool : members.toArray(new Gizmo[0])) { + if (tool instanceof Tool) { + ((Tool)tool).enable( lastEnabled ); + } + } + } + + if (!Dungeon.hero.isAlive()) { + btnInventory.enable(true); + } + } + + public void pickup(Item item, int cell ) { + pickedUp.reset( item, + cell, + btnInventory.centerX(), + btnInventory.centerY()); + } + + private int boundIndex(int index) { + int result = index; + while (result < 0) result += QuickSlot.VSIZE; + while (result >= QuickSlot.VSIZE) result -= QuickSlot.VSIZE; + return result; + } + + + @SuppressWarnings("FieldMayBeFinal") + private static CellSelector.Listener informer = new CellSelector.Listener() { + @Override + public void onSelect( Integer cell ) { + instance.examining = false; + GameScene.examineCell( cell ); + } + @Override + public String prompt() { + return Messages.get(Toolbar.class, "examine_prompt"); + } + }; + + private static class SwitchQuickSlotTool extends Tool { + + Tool bg; + ColorBlock[] fill; + + public SwitchQuickSlotTool(int x, int y, int width, int height) { + super(x, y, width, height); + } + + + @Override + protected void onClick() { + // + } + private Toolbar.Tool slot; + @Override + protected void createChildren() { + + super.createChildren(); + + bg = new Tool(72, 26, 16, 16){ + @Override + protected void onClick() { + super.onClick(); + Dungeon.quickslot.quickslots = instance.boundIndex(Dungeon.quickslot.quickslots + instance.numVisibleSlots); + instance.layout(); + } + @Override + protected String hoverText() { + return Messages.titleCase(Messages.get(WndKeyBindings.class, "quickslot_switch")); + } + + @Override + protected boolean onLongClick() { + GameScene.show(new WndQuickBag(null)); + return true; + } + + @Override + protected void onPointerDown() { + Sample.INSTANCE.play( Assets.Sounds.CLICK, 0.7f, 0.7f, 1.2f ); + super.onPointerDown(); + } + + @Override + public GameAction keyAction() { + return SPDAction.SLPD; + } + + }; + fill = new ColorBlock[9]; + for (int i = 0; i < fill.length; i ++) { + fill[i] = new ColorBlock(4, 4, SPDSettings.ClassUI() ? 0xFF00ffff : 0xffffff00); + add(fill[i]); + } + add(bg); + } + + protected void setFill(int quickslots) { + boolean[] visible = new boolean[9]; + for (int i = 0; i < instance.numVisibleSlots; i ++) { + visible[instance.boundIndex(i + quickslots)] = true; + } + fill[0].x = fill[3].x = fill[6].x = x + 2; + fill[1].x = fill[4].x = fill[7].x = x + 6; + fill[2].x = fill[5].x = fill[8].x = x + 10; + fill[0].y = fill[1].y = fill[2].y = y + 2; + fill[3].y = fill[4].y = fill[5].y = y + 6; + fill[6].y = fill[7].y = fill[8].y = y + 10; + for (int i = 0; i < visible.length; i ++) { + PixelScene.align(fill[i]); + fill[i].visible = visible[i]; + } + } + + @Override + protected void layout(){ + super.layout(); + bg.x = x; + bg.y = y; + PixelScene.align(bg); + setFill(Dungeon.quickslot.quickslots); + } + + + + } + + private static class Tool extends Button { + + private static final int BGCOLOR = 0x7B8073; + + private Image base; + + @Override + public void update() { + super.update(); + if (SPDSettings.ClassUI()) { + base.texture = TextureCache.get(Assets.Interfaces.TOOLBAR); + } else { + base.texture = TextureCache.get(Assets.Interfaces.TOOLBARDRAK); + } + } + + public Tool( int x, int y, int width, int height ) { + super(); + + hotArea.blockLevel = PointerArea.ALWAYS_BLOCK; + frame(x, y, width, height); + } + + public void frame( int x, int y, int width, int height) { + base.frame( x, y, width, height ); + + this.width = width; + this.height = height; + } + + @Override + protected void createChildren() { + super.createChildren(); + + base = new Image( Assets.Interfaces.TOOLBAR ); + add( base ); + } + + @Override + protected void layout() { + super.layout(); + + base.x = x; + base.y = y; + } + + @Override + protected void onPointerDown() { + base.brightness( 1.4f ); + } + + @Override + protected void onPointerUp() { + if (active) { + base.resetColor(); + } else { + base.tint( BGCOLOR, 0.7f ); + } + } + + public void enable( boolean value ) { + if (value != active) { + if (value) { + base.resetColor(); + } else { + base.tint( BGCOLOR, 0.7f ); + } + active = value; + } + } + + } + + @SuppressWarnings("FieldMayBeFinal") + private static class QuickslotTool extends Tool { + + private QuickSlotButton slot; + private int borderLeft = 2; + private int borderRight = 2; + + public QuickslotTool( int x, int y, int width, int height, int slotNum ) { + super( x, y, width, height ); + + slot = new QuickSlotButton( slotNum ); + add( slot ); + } + + public void border( int left, int right ){ + borderLeft = left; + borderRight = right; + layout(); + } + + @Override + protected void layout() { + super.layout(); + slot.setRect( x, y, width, height ); + slot.slotMargins(borderLeft, 4, borderRight, 2); + } + + @Override + public void enable( boolean value ) { + super.enable( value ); + slot.enable( value ); + } + } + + public static class PickedUpItem extends ItemSprite { + + private static final float DURATION = 0.5f; + + private float startScale; + private float startX, startY; + private float endX, endY; + private float left; + + public PickedUpItem() { + super(); + + originToCenter(); + + active = + visible = + false; + } + + public void reset( Item item, int cell, float endX, float endY ) { + view( item ); + + active = + visible = + true; + + PointF tile = DungeonTerrainTilemap.raisedTileCenterToWorld(cell); + Point screen = Camera.main.cameraToScreen(tile.x, tile.y); + PointF start = camera().screenToCamera(screen.x, screen.y); + + x = this.startX = start.x - width() / 2; + y = this.startY = start.y - width() / 2; + + this.endX = endX - width() / 2; + this.endY = endY - width() / 2; + left = DURATION; + + scale.set( startScale = Camera.main.zoom / camera().zoom ); + + } + + @Override + public void update() { + super.update(); + + if ((left -= Game.elapsed) <= 0) { + + visible = + active = + false; + if (emitter != null) emitter.on = false; + + } else { + float p = left / DURATION; + scale.set( startScale * (float)Math.sqrt( p ) ); + + x = startX*p + endX*(1-p); + y = startY*p + endY*(1-p); + } + } + } +} diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/ui/Toolbar.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/ui/Toolbar.java index f49e66c1c..b4ad8fbd0 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/ui/Toolbar.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/ui/Toolbar.java @@ -232,7 +232,7 @@ public class Toolbar extends Component { */ float wMin = Game.width / PixelScene.MIN_WIDTH_FULL; float hMin = Game.height / PixelScene.MIN_HEIGHT_FULL; - final int maxHorizontalQuickslots = PixelScene.landscape() ? 8 : 4; + final int maxHorizontalQuickslots = PixelScene.landscape() ? 9 : 3; float right = width; if (SPDSettings.interfaceSize() > 0){ btnInventory.setPos(right - btnInventory.width(), y); @@ -479,7 +479,8 @@ public class Toolbar extends Component { @Override protected void layout() { super.layout(); - slot.setRect( x + borderLeft, y + 2, width - borderLeft-borderRight, height - 4 ); + slot.setRect( x, y, width, height ); + slot.slotMargins(borderLeft, 4, borderRight, 2); } @Override diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/ui/changelist/mlpd/vM0_6_7_X_Changes.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/ui/changelist/mlpd/vM0_6_7_X_Changes.java index d8907674c..b10828825 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/ui/changelist/mlpd/vM0_6_7_X_Changes.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/ui/changelist/mlpd/vM0_6_7_X_Changes.java @@ -143,7 +143,7 @@ public class vM0_6_7_X_Changes { } public static void add_v0_6_55_Changes( ArrayList changeInfos ) { - ChangeInfo changes = new ChangeInfo("v0.6.4.0-Beta2-9", true, ""); + ChangeInfo changes = new ChangeInfo("v0.6.4.0-BetaI-XI", true, ""); changes.hardlight(Window.TITLE_COLOR); changeInfos.add(changes); @@ -162,6 +162,9 @@ public class vM0_6_7_X_Changes { "现实仍然有很多东西,我是时候调节一下了。\n"+ "那么还是祝各位游戏中冒险愉快吧!"))); + changes.addButton(new ChangeButton(Icons.get(Icons.PREFS), ("快捷栏V1/V2"), + ("快捷栏降至9个,并且V1是魔绫原版快捷栏,V2是碳素那边借鉴优化的快捷栏。任君挑选。"))); + changes.addButton(new ChangeButton(new ItemSprite(ItemSpriteSheet.ALCH_PAGE), ("炼金界面优化"), ("炼金指南进行优化。"))); diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/windows/WndSettings.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/windows/WndSettings.java index 7f5ec7df5..27b440881 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/windows/WndSettings.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/windows/WndSettings.java @@ -41,6 +41,7 @@ import com.shatteredpixel.shatteredpixeldungeon.ui.Icons; import com.shatteredpixel.shatteredpixeldungeon.ui.OptionSlider; import com.shatteredpixel.shatteredpixeldungeon.ui.RedButton; import com.shatteredpixel.shatteredpixeldungeon.ui.RenderedTextBlock; +import com.shatteredpixel.shatteredpixeldungeon.ui.ToobarV; import com.shatteredpixel.shatteredpixeldungeon.ui.Toolbar; import com.shatteredpixel.shatteredpixeldungeon.ui.Window; import com.watabou.noosa.ColorBlock; @@ -406,14 +407,12 @@ public class WndSettings extends WndTabbed { RenderedTextBlock title; ColorBlock sep1; - OptionSlider optUISize; - RenderedTextBlock barDesc; - RedButton btnSplit; - CheckBox chkFlipToolbar; + OptionSlider optUIMode; + OptionSlider optUIScale; + RedButton btnToolbarSettings; CheckBox chkFlipTags; ColorBlock sep2; - ColorBlock sep3; - RedButton btnKeyBindings; + CheckBox chkFont; @Override protected void createChildren() { @@ -427,10 +426,9 @@ public class WndSettings extends WndTabbed { //add slider for UI size only if device has enough space to support it float wMin = Game.width / PixelScene.MIN_WIDTH_FULL; float hMin = Game.height / PixelScene.MIN_HEIGHT_FULL; - Boolean landscape = SPDSettings.landscape(); - if (Math.min(wMin, hMin) >= 2*Game.density){ - optUISize = new OptionSlider( - Messages.get(this, "size"), + if (Math.min(wMin, hMin) >= 2*Game.density && !SPDSettings.quickSwapper()){ + optUIMode = new OptionSlider( + Messages.get(this, "ui_mode"), Messages.get(this, "mobile"), Messages.get(this, "full"), 0, @@ -442,141 +440,245 @@ public class WndSettings extends WndTabbed { ShatteredPixelDungeon.seamlessResetScene(); } }; - optUISize.setSelectedValue(SPDSettings.interfaceSize()); - add(optUISize); + optUIMode.setSelectedValue(SPDSettings.interfaceSize()); + add(optUIMode); + } + + if ((int)Math.ceil(2* Game.density) < PixelScene.maxDefaultZoom) { + optUIScale = new OptionSlider(Messages.get(this, "scale"), + (int)Math.ceil(2* Game.density)+ "X", + PixelScene.maxDefaultZoom + "X", + (int)Math.ceil(2* Game.density), + PixelScene.maxDefaultZoom ) { + @Override + protected void onChange() { + if (getSelectedValue() != SPDSettings.scale()) { + SPDSettings.scale(getSelectedValue()); + ShatteredPixelDungeon.seamlessResetScene(); + } + } + }; + optUIScale.setSelectedValue(PixelScene.defaultZoom); + add(optUIScale); } if (SPDSettings.interfaceSize() == 0) { - barDesc = PixelScene.renderTextBlock(Messages.get(this, "mode"), 9); - add(barDesc); - - btnSplit = new RedButton(Messages.get(this, "split")) { + btnToolbarSettings = new RedButton(Messages.get(this, "toolbar_settings"), 9){ @Override protected void onClick() { - SPDSettings.toolbarMode(Toolbar.Mode.SPLIT.name()); - Toolbar.updateLayout(); + ShatteredPixelDungeon.scene().addToFront(new Window(){ + + RenderedTextBlock barDesc; + RedButton btnSplit; RedButton btnGrouped; RedButton btnCentered; + CheckBox chkQuickSwapper; + RenderedTextBlock swapperDesc; + CheckBox chkFlipToolbar; + CheckBox chkFlipTags; + + { + barDesc = PixelScene.renderTextBlock(Messages.get(WndSettings.UITab.this, "mode"), 9); + add(barDesc); + + btnSplit = new RedButton(Messages.get(WndSettings.UITab.this, "split")) { + @Override + protected void onClick() { + textColor(TITLE_COLOR); + btnGrouped.textColor(WHITE); + btnCentered.textColor(WHITE); + SPDSettings.toolbarMode(ToobarV.Mode.SPLIT.name()); + ToobarV.updateLayout(); + } + }; + if (SPDSettings.toolbarMode().equals(ToobarV.Mode.SPLIT.name())) { + btnSplit.textColor(TITLE_COLOR); + } + add(btnSplit); + + btnGrouped = new RedButton(Messages.get(WndSettings.UITab.this, "group")) { + @Override + protected void onClick() { + btnSplit.textColor(WHITE); + textColor(TITLE_COLOR); + btnCentered.textColor(WHITE); + SPDSettings.toolbarMode(ToobarV.Mode.GROUP.name()); + ToobarV.updateLayout(); + } + }; + if (SPDSettings.toolbarMode().equals(ToobarV.Mode.GROUP.name())) { + btnGrouped.textColor(TITLE_COLOR); + } + add(btnGrouped); + + btnCentered = new RedButton(Messages.get(WndSettings.UITab.this, "center")) { + @Override + protected void onClick() { + btnSplit.textColor(WHITE); + btnGrouped.textColor(WHITE); + textColor(TITLE_COLOR); + SPDSettings.toolbarMode(ToobarV.Mode.CENTER.name()); + ToobarV.updateLayout(); + } + }; + if (SPDSettings.toolbarMode().equals(ToobarV.Mode.CENTER.name())) { + btnCentered.textColor(TITLE_COLOR); + } + add(btnCentered); + + if(SPDSettings.quickSwapper()){ + btnSplit.alpha(0.5f); + btnGrouped.alpha(0.5f); + btnCentered.alpha(0.5f); + btnCentered.active = false; + btnGrouped.active = false; + btnSplit.active = false; + } + + chkQuickSwapper = new CheckBox(Messages.get(WndSettings.UITab.this, "quickslot_swapper")) { + @Override + protected void onClick() { + super.onClick(); + SPDSettings.quickSwapper(checked()); + ShatteredPixelDungeon.resetScene(); + } + }; + chkQuickSwapper.checked(SPDSettings.quickSwapper()); + add(chkQuickSwapper); + + swapperDesc = PixelScene.renderTextBlock(Messages.get(WndSettings.UITab.this, "swapper_desc"), 5); + swapperDesc.hardlight(0x888888); + add(swapperDesc); + + chkFlipToolbar = new CheckBox(Messages.get(WndSettings.UITab.this, "flip_toolbar")) { + @Override + protected void onClick() { + super.onClick(); + SPDSettings.flipToolbar(checked()); + //ToobarV.updateLayout(); + } + }; + chkFlipToolbar.checked(SPDSettings.flipToolbar()); + add(chkFlipToolbar); + + chkFlipTags = new CheckBox(Messages.get(WndSettings.UITab.this, "flip_indicators")){ + @Override + protected void onClick() { + super.onClick(); + SPDSettings.flipTags(checked()); + GameScene.layoutTags(); + } + }; + chkFlipTags.checked(SPDSettings.flipTags()); + add(chkFlipTags); + + //layout + resize(WIDTH_P, 0); + + barDesc.setPos((width - barDesc.width()) / 2f, GAP); + PixelScene.align(barDesc); + + int btnWidth = (int) (width - 2 * GAP) / 3; + + btnSplit.setRect(0, barDesc.bottom() + GAP, btnWidth, BTN_HEIGHT-2); + btnGrouped.setRect(btnSplit.right() + GAP, btnSplit.top(), btnWidth, BTN_HEIGHT-2); + btnCentered.setRect(btnGrouped.right() + GAP, btnSplit.top(), btnWidth, BTN_HEIGHT-2); + chkQuickSwapper.setRect(0, btnGrouped.bottom() + GAP, width, BTN_HEIGHT); + + + swapperDesc.maxWidth(width); + swapperDesc.setPos(0, chkQuickSwapper.bottom()+1); + + if (width > 200) { + chkFlipToolbar.setRect(0, swapperDesc.bottom() + GAP, width / 2 - 1, BTN_HEIGHT); + chkFlipTags.setRect(chkFlipToolbar.right() + GAP, chkFlipToolbar.top(), width / 2 - 1, BTN_HEIGHT); + } else { + chkFlipToolbar.setRect(0, swapperDesc.bottom() + GAP, width, BTN_HEIGHT); + chkFlipTags.setRect(0, chkFlipToolbar.bottom() + GAP, width, BTN_HEIGHT); + } + + resize(WIDTH_P, (int)chkFlipTags.bottom()); + + } + }); } }; - if (SPDSettings.toolbarMode().equals(Toolbar.Mode.SPLIT.name())) - btnSplit.textColor(TITLE_COLOR); - add(btnSplit); + add(btnToolbarSettings); - chkFlipToolbar = new CheckBox(Messages.get(this, "flip_toolbar")) { + } else { + + chkFlipTags = new CheckBox(Messages.get(this, "flip_indicators")) { @Override protected void onClick() { super.onClick(); - SPDSettings.flipToolbar(checked()); - Toolbar.updateLayout(); + SPDSettings.flipTags(checked()); + GameScene.layoutTags(); } }; - chkFlipToolbar.checked(SPDSettings.flipToolbar()); - add(chkFlipToolbar); - } + chkFlipTags.checked(SPDSettings.flipTags()); + add(chkFlipTags); - chkFlipTags = new CheckBox(Messages.get(this, "flip_indicators")){ - @Override - protected void onClick() { - super.onClick(); - SPDSettings.flipTags(checked()); - GameScene.layoutTags(); - } - }; - chkFlipTags.checked(SPDSettings.flipTags()); - add(chkFlipTags); + } sep2 = new ColorBlock(1, 1, 0xFF000000); add(sep2); -// chkFont = new CheckBox(Messages.get(this, "system_font")){ -// @Override -// protected void onClick() { -// super.onClick(); -// ShatteredPixelDungeon.seamlessResetScene(new Game.SceneChangeCallback() { -// @Override -// public void beforeCreate() { -// SPDSettings.systemFont(); -// } -// -// @Override -// public void afterCreate() { -// //do nothing -// } -// }); -// } -// }; -// chkFont.checked(SPDSettings.systemFont()); -// add(chkFont); + chkFont = new CheckBox(Messages.get(this, "system_font")){ + @Override + protected void onClick() { + super.onClick(); + ShatteredPixelDungeon.seamlessResetScene(new Game.SceneChangeCallback() { + @Override + public void beforeCreate() { + SPDSettings.systemFont(checked()); + } - if (DeviceCompat.hasHardKeyboard()){ - - sep3 = new ColorBlock(1, 1, 0xFF000000); - add(sep3); - - btnKeyBindings = new RedButton(Messages.get(this, "key_bindings")){ - @Override - protected void onClick() { - super.onClick(); - ShatteredPixelDungeon.scene().addToFront(new WndKeyBindings()); - } - }; - - add(btnKeyBindings); - } + @Override + public void afterCreate() { + //do nothing + } + }); + } + }; + chkFont.checked(SPDSettings.systemFont()); + add(chkFont); } @Override protected void layout() { title.setPos((width - title.width())/2, y + GAP); sep1.size(width, 1); - sep1.y = title.bottom() + 2*GAP; + sep1.y = title.bottom() + 3*GAP; height = sep1.y + 1; - if (optUISize != null){ - optUISize.setRect(0, height + GAP, width, SLIDER_HEIGHT); - height = optUISize.bottom(); + if (optUIMode != null && optUIScale != null && width > 200){ + optUIMode.setRect(0, height + GAP, width/2-1, SLIDER_HEIGHT); + optUIScale.setRect(width/2+1, height + GAP, width/2-1, SLIDER_HEIGHT); + height = optUIScale.bottom(); + } else { + if (optUIMode != null) { + optUIMode.setRect(0, height + GAP, width, SLIDER_HEIGHT); + height = optUIMode.bottom(); + } + + if (optUIScale != null) { + optUIScale.setRect(0, height + GAP, width, SLIDER_HEIGHT); + height = optUIScale.bottom(); + } } - if (barDesc != null) { - barDesc.setPos((width - barDesc.width()) / 2f, height + GAP); - PixelScene.align(barDesc); - if(Game.scene()!=null && Game.scene().getClass() == GameScene.class) { - btnSplit.setRect(0, barDesc.bottom() + GAP, width, 16); - } else { - btnSplit.setRect(500, barDesc.bottom() + GAP, width, 16); - } - - if (width > 200) { - chkFlipToolbar.setRect(0, btnSplit.bottom() + GAP, width / 2 - 1, BTN_HEIGHT); - chkFlipTags.setRect(chkFlipToolbar.right() + GAP, chkFlipToolbar.top(), width / 2 - 1, BTN_HEIGHT); - } else { - chkFlipToolbar.setRect(0, btnSplit.bottom() + GAP, width, BTN_HEIGHT); - chkFlipTags.setRect(0, chkFlipToolbar.bottom() + GAP, width, BTN_HEIGHT); - } + if (btnToolbarSettings != null) { + btnToolbarSettings.setRect(0, height + GAP, width, BTN_HEIGHT); + height = btnToolbarSettings.bottom(); } else { chkFlipTags.setRect(0, height + GAP, width, BTN_HEIGHT); + height = chkFlipTags.bottom(); } sep2.size(width, 1); - sep2.y = chkFlipTags.bottom() + 2; + sep2.y = height + GAP; - if (btnKeyBindings != null){ - if (width > 200){ - chkFlipTags.setSize(width/2-1, BTN_HEIGHT); - sep3.size(1, BTN_HEIGHT + 2*GAP); - sep3.x = chkFlipTags.right() + 0.5f; - sep3.y = sep2.y+1; - PixelScene.align(sep3); - btnKeyBindings.setRect(chkFlipTags.right()+2, chkFlipTags.top(), width/2 - 1, BTN_HEIGHT); - } else { - sep3.size(width, 1); - sep3.y = chkFlipTags.bottom() + 2; - btnKeyBindings.setRect(0, sep3.y + 1 + GAP, width, BTN_HEIGHT); - } - height = btnKeyBindings.bottom(); - } else { - height = chkFlipTags.bottom(); - } + chkFont.setRect(0, sep2.y + 1 + GAP, width, BTN_HEIGHT); + height = chkFont.bottom(); } } @@ -640,7 +742,12 @@ public class WndSettings extends WndTabbed { @Override protected void onChange() { SPDSettings.quickslots(getSelectedValue()); - Toolbar.updateLayout(); + if(SPDSettings.quickSwapper()){ + Toolbar.updateLayout(); + } else { + ToobarV.updateLayout(); + } + } }; quickslots.setSelectedValue(SPDSettings.quickslots()); @@ -662,11 +769,16 @@ public class WndSettings extends WndTabbed { bottom = sep1.y + 1; + if(!SPDSettings.quickSwapper()){ + quickslots.active = false; + quickslots.visible = false; + } + if (width > 200){ ClassUI.setRect(0, bottom, width, SLIDER_HEIGHT); optSplashScreen.setRect(0, ClassUI.bottom() + GAP, width, SLIDER_HEIGHT); optFPSLimit.setRect(0, optSplashScreen.bottom() + GAP, width/2, SLIDER_HEIGHT); - if(Game.scene()!=null && Game.scene().getClass() == GameScene.class) { + if ((Game.scene() == null || Game.scene().getClass() != GameScene.class) && SPDSettings.quickSwapper()) { quickslots.setRect(optFPSLimit.right(), optFPSLimit.top(), width/2, SLIDER_HEIGHT); wxts.visible = false; } else { @@ -677,7 +789,7 @@ public class WndSettings extends WndTabbed { ClassUI.setRect(0, bottom + GAP, width, SLIDER_HEIGHT); optSplashScreen.setRect(0, ClassUI.bottom() + GAP, width, SLIDER_HEIGHT); optFPSLimit.setRect(0, optSplashScreen.bottom() + GAP, width, SLIDER_HEIGHT); - if (Game.scene() == null || Game.scene().getClass() != GameScene.class) { + if ((Game.scene() == null || Game.scene().getClass() != GameScene.class) && SPDSettings.quickSwapper()) { quickslots.visible = false; } else { quickslots.setRect(0, optFPSLimit.bottom() + GAP, width, SLIDER_HEIGHT); diff --git a/gradle.properties b/gradle.properties index 95d128a89..fe57b0fa7 100644 --- a/gradle.properties +++ b/gradle.properties @@ -10,4 +10,5 @@ # This option should only be used with decoupled projects. More details, visit # http://www.gradle.org/docs/current/userguide/multi_project_builds.html#sec:decoupled_projects android.useAndroidX=true -android.enableJetifier=true \ No newline at end of file +android.enableJetifier=true +android.suppressUnsupportedCompileSdk=33 \ No newline at end of file diff --git a/services/analyticsfirebase/.gitignore b/services/analyticsfirebase/.gitignore deleted file mode 100644 index 42afabfd2..000000000 --- a/services/analyticsfirebase/.gitignore +++ /dev/null @@ -1 +0,0 @@ -/build \ No newline at end of file diff --git a/services/analyticsfirebase/build.gradle b/services/analyticsfirebase/build.gradle deleted file mode 100644 index b67007851..000000000 --- a/services/analyticsfirebase/build.gradle +++ /dev/null @@ -1,37 +0,0 @@ -plugins { - id 'com.android.library' -} - -android { - namespace 'com.shatteredpixel.shatteredpixeldungeon.services.analyticsfirebase' - compileSdk 33 - - defaultConfig { - minSdk 19 - targetSdk 33 - - testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" - consumerProguardFiles "consumer-rules.pro" - } - - buildTypes { - release { - minifyEnabled false - proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro' - } - } - compileOptions { - sourceCompatibility JavaVersion.VERSION_11 - targetCompatibility JavaVersion.VERSION_11 - } -} - -dependencies { - implementation project(':SPD-classes') - api project(':services') - implementation 'androidx.appcompat:appcompat:1.6.1' - implementation 'com.google.android.material:material:1.5.0' - testImplementation 'junit:junit:4.13.2' - androidTestImplementation 'androidx.test.ext:junit:1.1.3' - androidTestImplementation 'androidx.test.espresso:espresso-core:3.4.0' -} \ No newline at end of file diff --git a/services/analyticsfirebase/consumer-rules.pro b/services/analyticsfirebase/consumer-rules.pro deleted file mode 100644 index e69de29bb..000000000 diff --git a/services/analyticsfirebase/proguard-rules.pro b/services/analyticsfirebase/proguard-rules.pro deleted file mode 100644 index 481bb4348..000000000 --- a/services/analyticsfirebase/proguard-rules.pro +++ /dev/null @@ -1,21 +0,0 @@ -# Add project specific ProGuard rules here. -# You can control the set of applied configuration files using the -# proguardFiles setting in build.gradle. -# -# For more details, see -# http://developer.android.com/guide/developing/tools/proguard.html - -# If your project uses WebView with JS, uncomment the following -# and specify the fully qualified class name to the JavaScript interface -# class: -#-keepclassmembers class fqcn.of.javascript.interface.for.webview { -# public *; -#} - -# Uncomment this to preserve the line number information for -# debugging stack traces. -#-keepattributes SourceFile,LineNumberTable - -# If you keep the line number information, uncomment this to -# hide the original source file name. -#-renamesourcefileattribute SourceFile \ No newline at end of file diff --git a/services/analyticsfirebase/src/androidTest/java/com/shatteredpixel/shatteredpixeldungeon/services/analyticsfirebase/ExampleInstrumentedTest.java b/services/analyticsfirebase/src/androidTest/java/com/shatteredpixel/shatteredpixeldungeon/services/analyticsfirebase/ExampleInstrumentedTest.java deleted file mode 100644 index 9b982c52a..000000000 --- a/services/analyticsfirebase/src/androidTest/java/com/shatteredpixel/shatteredpixeldungeon/services/analyticsfirebase/ExampleInstrumentedTest.java +++ /dev/null @@ -1,26 +0,0 @@ -package com.shatteredpixel.shatteredpixeldungeon.services.analyticsfirebase; - -import static org.junit.Assert.assertEquals; - -import android.content.Context; - -import androidx.test.ext.junit.runners.AndroidJUnit4; -import androidx.test.platform.app.InstrumentationRegistry; - -import org.junit.Test; -import org.junit.runner.RunWith; - -/** - * Instrumented test, which will execute on an Android device. - * - * @see Testing documentation - */ -@RunWith(AndroidJUnit4.class) -public class ExampleInstrumentedTest { - @Test - public void useAppContext() { - // Context of the app under test. - Context appContext = InstrumentationRegistry.getInstrumentation().getTargetContext(); - assertEquals("com.shatteredpixel.shatteredpixeldungeon.services.analyticsfirebase.test", appContext.getPackageName()); - } -} \ No newline at end of file diff --git a/services/analyticsfirebase/src/main/AndroidManifest.xml b/services/analyticsfirebase/src/main/AndroidManifest.xml deleted file mode 100644 index a5918e68a..000000000 --- a/services/analyticsfirebase/src/main/AndroidManifest.xml +++ /dev/null @@ -1,4 +0,0 @@ - - - - \ No newline at end of file diff --git a/services/analyticsfirebase/src/main/java/com/shatteredpixel/shatteredpixeldungeon/services/analyticsfirebase/FireBaseLing.java b/services/analyticsfirebase/src/main/java/com/shatteredpixel/shatteredpixeldungeon/services/analyticsfirebase/FireBaseLing.java deleted file mode 100644 index b94bdf594..000000000 --- a/services/analyticsfirebase/src/main/java/com/shatteredpixel/shatteredpixeldungeon/services/analyticsfirebase/FireBaseLing.java +++ /dev/null @@ -1,4 +0,0 @@ -package com.shatteredpixel.shatteredpixeldungeon.services.analyticsfirebase; - -public class FireBaseLing { -} diff --git a/services/analyticsfirebase/src/test/java/com/shatteredpixel/shatteredpixeldungeon/services/analyticsfirebase/ExampleUnitTest.java b/services/analyticsfirebase/src/test/java/com/shatteredpixel/shatteredpixeldungeon/services/analyticsfirebase/ExampleUnitTest.java deleted file mode 100644 index 187b73c69..000000000 --- a/services/analyticsfirebase/src/test/java/com/shatteredpixel/shatteredpixeldungeon/services/analyticsfirebase/ExampleUnitTest.java +++ /dev/null @@ -1,17 +0,0 @@ -package com.shatteredpixel.shatteredpixeldungeon.services.analyticsfirebase; - -import static org.junit.Assert.assertEquals; - -import org.junit.Test; - -/** - * Example local unit test, which will execute on the development machine (host). - * - * @see Testing documentation - */ -public class ExampleUnitTest { - @Test - public void addition_isCorrect() { - assertEquals(4, 2 + 2); - } -} \ No newline at end of file diff --git a/services/news/shatteredNews/src/main/java/com/shatteredpixel/shatteredpixeldungeon/services/news/GameNesImpl.java b/services/news/shatteredNews/src/main/java/com/shatteredpixel/shatteredpixeldungeon/services/news/GameNesImpl.java index 447f6fc26..b708a0d68 100644 --- a/services/news/shatteredNews/src/main/java/com/shatteredpixel/shatteredpixeldungeon/services/news/GameNesImpl.java +++ b/services/news/shatteredNews/src/main/java/com/shatteredpixel/shatteredpixeldungeon/services/news/GameNesImpl.java @@ -8,8 +8,4 @@ public class GameNesImpl{ return newsChecker; } - public static boolean supportsNews(){ - return true; - } - } diff --git a/services/src/main/java/com/shatteredpixel/shatteredpixeldungeon/services/analyticsfirebase/FireBaseService.java b/services/src/main/java/com/shatteredpixel/shatteredpixeldungeon/services/analyticsfirebase/FireBaseService.java deleted file mode 100644 index bd0b0e176..000000000 --- a/services/src/main/java/com/shatteredpixel/shatteredpixeldungeon/services/analyticsfirebase/FireBaseService.java +++ /dev/null @@ -1,3 +0,0 @@ -package com.shatteredpixel.shatteredpixeldungeon.services.analyticsfirebase; -public class FireBaseService { -} diff --git a/settings.gradle b/settings.gradle index 6ae8f88fd..da66e41ac 100644 --- a/settings.gradle +++ b/settings.gradle @@ -11,4 +11,3 @@ include ':services' //news include ':services:news:shatteredNews' -include ':services:analyticsfirebase' From e6dcc371cc5cd98ad960aca39d7e837a7755dd20 Mon Sep 17 00:00:00 2001 From: LingASDJ <2735951230@qq.com> Date: Sat, 9 Sep 2023 03:16:30 +0800 Subject: [PATCH 05/13] update Test 0.6.5.0-Alpha --- .../android/AndroidPlatformSupport.java | 1 - build.gradle | 4 +- .../assets/messages/actors/actors.properties | 6 + .../main/assets/sprites/npc/whitepinkgirl.png | Bin 0 -> 2210 bytes core/src/main/assets/sprites/tribesman.png | Bin 0 -> 2617 bytes .../shatteredpixeldungeon/Assets.java | 3 + .../actors/mobs/Bestiary.java | 3 +- .../actors/mobs/bosses/SakaFishBoss.java | 12 +- .../actors/mobs/npcs/Ghost.java | 90 +- .../actors/mobs/spical/GnollHero.java | 49 + .../shatteredpixeldungeon/effects/Speck.java | 1018 ++++++++--------- .../items/weapon/melee/Sai.java | 2 +- .../levels/features/LevelTransition.java | 156 +++ .../levels/rooms/standard/YinYangRoom.java | 3 +- .../messages/Messages.java | 2 - .../scenes/CellSelector.java | 14 +- .../sprites/TribesmanSprite.java | 29 + .../ui/changelist/mlpd/vM0_6_7_X_Changes.java | 7 +- .../windows/WndSadGhost.java | 5 +- 19 files changed, 817 insertions(+), 587 deletions(-) create mode 100644 core/src/main/assets/sprites/npc/whitepinkgirl.png create mode 100644 core/src/main/assets/sprites/tribesman.png create mode 100644 core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/mobs/spical/GnollHero.java create mode 100644 core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/features/LevelTransition.java create mode 100644 core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/sprites/TribesmanSprite.java diff --git a/android/src/main/java/com/shatteredpixel/shatteredpixeldungeon/android/AndroidPlatformSupport.java b/android/src/main/java/com/shatteredpixel/shatteredpixeldungeon/android/AndroidPlatformSupport.java index e723df273..95bde8646 100644 --- a/android/src/main/java/com/shatteredpixel/shatteredpixeldungeon/android/AndroidPlatformSupport.java +++ b/android/src/main/java/com/shatteredpixel/shatteredpixeldungeon/android/AndroidPlatformSupport.java @@ -294,7 +294,6 @@ public class AndroidPlatformSupport extends PlatformSupport { fallbackFontGenerator = JPFontGenerator; break; } - KRFontGenerator = SCFontGenerator = TCFontGenerator = JPFontGenerator = new FreeTypeFontGenerator(Gdx.files.absolute("/system/fonts/NotoSansCJK-Regular.ttc")); } if (basicFontGenerator != null) fonts.put(basicFontGenerator, new HashMap<>()); diff --git a/build.gradle b/build.gradle index 2d4610675..b8082c8a3 100644 --- a/build.gradle +++ b/build.gradle @@ -18,8 +18,8 @@ allprojects { appName = 'Magic Ling Pixel Dungeon' appPackageName = 'com.ansdomagiclingpixeldungeon.ling' - appVersionCode =906000 - appVersionName = '0.6.4.0-Beta-XII' + appVersionCode =907000 + appVersionName = '0.6.5.0-Alpha1' appJavaCompatibility = JavaVersion.VERSION_11 diff --git a/core/src/main/assets/messages/actors/actors.properties b/core/src/main/assets/messages/actors/actors.properties index 423bcf835..97008eb5f 100644 --- a/core/src/main/assets/messages/actors/actors.properties +++ b/core/src/main/assets/messages/actors/actors.properties @@ -1,5 +1,11 @@ #####MLPD-P3文本 +actors.mobs.spical.gnollhero.name=豺狼部族长老 +actors.mobs.spical.gnollhero.desc=与其他豺狼不同的是,它清楚最大的威胁不是冒险者。同时,它会使用古老的占卜魔法狩猎预知告知玩家即将要狩猎的稀有生物在何处。\n\n但它们并不是完全帮助冒险者,如果冒险者有出格的举动,部族长老会让冒险者知道”叛徒“的下场…… +actors.mobs.spical.gnollhero.chat_1=哦,看看这是谁,这不是为了寻找水晶之心的冒险者吗? +actors.mobs.spical.gnollhero.chat_2=你和祂正式签下了狩猎契约?好吧,这个荒无人烟的地方确实有很多需要狩猎的生物。 +actors.mobs.spical.gnollhero.chat_3=集中精神,寻找交错的房间,你需要的猎物就在那里…… + actors.mobs.bosses.sakafishboss.name=萨卡班甲鱼 actors.mobs.bosses.sakafishboss.desc=曾经远古时代的海洋王者,因为不可避免的末日来临时,潜入了地底的阴暗水潭进入了沉睡。想着有朝一日回到大海,然而地牢的魔力和陆上的变化,它再也不可能回到那片理想的海洋。 actors.mobs.bosses.sakafishboss.notice=sakasaka……saka?腻……系……甚磨?! diff --git a/core/src/main/assets/sprites/npc/whitepinkgirl.png b/core/src/main/assets/sprites/npc/whitepinkgirl.png new file mode 100644 index 0000000000000000000000000000000000000000..be687a95f540b8bc0d129bdbdceb18f55c97e2e9 GIT binary patch literal 2210 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 literal 0 HcmV?d00001 diff --git a/core/src/main/assets/sprites/tribesman.png b/core/src/main/assets/sprites/tribesman.png new file mode 100644 index 0000000000000000000000000000000000000000..c74c1cfc497a2fb37ed4f423d7620d1241eae135 GIT binary patch literal 2617 zcmeH|=U3BP7KVRGh#?7~s(85}ArQJmKtO?@AwVRQ&=C=l(3L8Q6d56*NE;E64hpDL zg`u~h1d*l?#-YU^2#CU!dS$GD+;G?Y3G;34UhC|0*8Z^9-tT(eby93;=THb41ONai zs=28>0DuHfKu#DU$S)$Crv#UfpRu(u0My?>?$V(E00C^R9L)rE6c|850VOz~h(c+@ z07FfAG}_8s1fU%TY_KpZG@7i7Bk61SD65p)U`n~z41_?CA@)b_D3h&&nD zd@MFkMw?B5Co3WDY9R{^MN*YzVH@HNId@D3vM8hZ7URV<-Xpu(`?vDD$Da($aLN;BxotciZ*_Hbe}7*v z@L%zl0{<%oZuEt3ADD${Pje8^_5U1z!&jK1Kv#IE`2_|5h;|(u(7BzA8bR?FrkM-V zA;gy%K@al*Lg`n6nS@{;rkoBzlc25jyWEv*0DwNAni@O$o6NeP7<`JjqJ`5#J{0m3 zSTjxcqI)UVqnhx0`}?au<~DAEpWzwf+@(=oN5yP3|B^E}Xs~Gk8@=0)gQ~1y8Q}rj zvr-okArknJyN~_Je2t{u^;{$Pa6)?in6(`Z^nqC1V^}aY_^w{-Z6~`dxl`|gJkX|D zHRY=>Zg-j*2t#&?GC3|jxLxa^$iE5YoeSao#tTU62itM0TV}Ke^|In7c}QViXeJN; zkhqek(09!2tAsay;(o`5X2?%lB<4RID3{KQ^d%@YHq1V;xE$H^Ep*!8-$$eC+k~!$(H~G&=VwN6T ziy~>KLRPMHVS@DEJV*#!>KyZY!k(N9-&(-e-}R0=Dz`L}!QNp9=Bq+muVN$y^UhY+1KnV$8&u#m65dxyWu>}qHVAA z>ga@}g7gn~mD+dj>u0Ok)_hTiH}F?`tf@NbGLlu8F(wYx(a;OM%aEHUpXomG%x%s9 zxiCwtvOpYOu_?Jloj|No;zXVUaeh>-t^T#_=76MX8s?5heTpl_92BWKa6-RAXrF4{ zmB>>Xx*yFP4YOq_cgX}b^mnwcw<#a0ZGO>E`(!IpWV)0@)@DO9RDyQd!Y%-A{1eI$R@S{40r#3(4o_3zp3O;m`_yWGC42BOwR5`R=pF2ILn;?H$q4Cr6oM#t> z;0(NKK}PsXdgzXi4OzR?i=wb!&;gE`mc4zeuT;x#j$?1?UU*yraLaQHXhbKg6yaOq zq3$pPkIDw|Gg8{4%18NS zLTvU*^hW&2qVNUjPF}1;8eE9XeK_T73>D3XB?vsDl7alByTUl?dHJ<3cdO*>mnq8~ z+!}Sr#7)L&Cg``0Kk@%B)`vM=wI~pV4WP12DW1H3MYJKcFWt_YRquaJwFRkW~ zbMy>OR9P{<1Zqxrrs&QIsi99zOR#Pj@rrw5Y{*YZS&V-w?#^5D=@0_?JS`t4JS?Qa zx@m28fc|i8$hwUr&Z%tOW7gSEJw_o&m{+9G9As%AmdvNWi>U(-Ab3##Rf(k0SuVf) z?Y`4+g+E5q@&l+bX*3EDY?i{$DZ7r*p!$P)Txg*Y$y zWD&Luq6R+9f!PD@slQutReNJ4?L%-a@UUgfrAGAOdFnqXg@N_K!8^v=00NJfasg8Q zJ%CMSLB$u-dmGGv&3=<)$%-rw<3`4IZA^;SOCm`~G7~bei<}t`h;-iMS{(eHR5O}s IE!iXP4=I8bI{*Lx literal 0 HcmV?d00001 diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/Assets.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/Assets.java index a1b1aac11..5377ade5a 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/Assets.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/Assets.java @@ -421,6 +421,9 @@ public class Assets { public static final String ROT_LASH = "sprites/rot_lasher.png"; public static final String ROT_HEART= "sprites/rot_heart.png"; public static final String GUARD = "sprites/guard.png"; + + public static final String HEROGNOLL = "sprites/tribesman.png"; + public static final String WARDS = "sprites/wards.png"; public static final String GUARDIAN = "sprites/guardian.png"; public static final String SLIME = "sprites/slime.png"; diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/mobs/Bestiary.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/mobs/Bestiary.java index 993edca9d..b1759f4fe 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/mobs/Bestiary.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/mobs/Bestiary.java @@ -25,6 +25,7 @@ import static com.shatteredpixel.shatteredpixeldungeon.Challenges.RLPT; import com.shatteredpixel.shatteredpixeldungeon.Conducts; import com.shatteredpixel.shatteredpixeldungeon.Dungeon; +import com.shatteredpixel.shatteredpixeldungeon.actors.mobs.spical.GnollHero; import com.watabou.utils.Random; import java.util.ArrayList; @@ -47,7 +48,7 @@ public class Bestiary { case 1: //3x rat, 1x snake return new ArrayList<>(Arrays.asList( - Rat.class, Rat.class, + GnollHero.class, Rat.class, Rat.class)); case 2: return new ArrayList<>(Arrays.asList(Rat.class, diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/mobs/bosses/SakaFishBoss.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/mobs/bosses/SakaFishBoss.java index 7e470f2f6..96834c197 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/mobs/bosses/SakaFishBoss.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/mobs/bosses/SakaFishBoss.java @@ -169,7 +169,7 @@ public class SakaFishBoss extends Boss { @Override public int drRoll() { AncientMysteryCityBossLevel.State level = ((AncientMysteryCityBossLevel)Dungeon.level).pro(); - return level == AncientMysteryCityBossLevel.State.FALL_BOSS ? 10 : 45; + return level == AncientMysteryCityBossLevel.State.FALL_BOSS ? 10 : 40; } @@ -445,6 +445,7 @@ public class SakaFishBoss extends Boss { } else { endPos = leapPos; } + //do leap sprite.visible = Dungeon.level.heroFOV[pos] || Dungeon.level.heroFOV[leapPos] || Dungeon.level.heroFOV[endPos]; sprite.dirtcar(pos, leapPos, new Callback() { @@ -462,9 +463,12 @@ public class SakaFishBoss extends Boss { Sample.INSTANCE.play(Assets.Sounds.HIT); } - if (!enemy.isAlive() && enemy == hero) { - Dungeon.fail( getClass() ); - GLog.n( Messages.get(SakaFishBoss.class, "dictcar_kill"),Dungeon.hero.name() ); + Char ch = hero; + if(hero != null){ + if (!ch.isAlive()) { + Dungeon.fail( getClass() ); + GLog.n( Messages.get(SakaFishBoss.class, "dictcar_kill"),Dungeon.hero.name() ); + } } if (endPos != leapPos){ diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/mobs/npcs/Ghost.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/mobs/npcs/Ghost.java index f25b6ad68..a732b0b81 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/mobs/npcs/Ghost.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/mobs/npcs/Ghost.java @@ -50,7 +50,6 @@ import com.shatteredpixel.shatteredpixeldungeon.levels.ItemLevel; import com.shatteredpixel.shatteredpixeldungeon.levels.SewerLevel; import com.shatteredpixel.shatteredpixeldungeon.messages.Messages; import com.shatteredpixel.shatteredpixeldungeon.scenes.GameScene; -import com.shatteredpixel.shatteredpixeldungeon.sprites.CharSprite; import com.shatteredpixel.shatteredpixeldungeon.sprites.GhostSprite; import com.shatteredpixel.shatteredpixeldungeon.utils.GLog; import com.shatteredpixel.shatteredpixeldungeon.windows.WndQuest; @@ -291,6 +290,35 @@ public class Ghost extends NPC { reset(); } } + + private static void ghostQuest(){ + float itemLevelRoll = Random.Float(); + int itemLevel; + if (itemLevelRoll < 0.74f){ + itemLevel = 0; + } else if (itemLevelRoll < 0.75f){ + itemLevel = 1; + } else if (itemLevelRoll < 0.85f){ + itemLevel = 2; + } else if (itemLevelRoll < 0.90f) { + itemLevel = 3; + if ((!Badges.isUnlocked(Badges.Badge.GHOSTDAGE))) { + Statistics.dageCollected = 1; + } + } else if (itemLevelRoll < 0.95f && Badges.isUnlocked(Badges.Badge.GHOSTDAGE)) { + if ((!Badges.isUnlocked(Badges.Badge.DAGETO))) { + Statistics.dageCollected = 2; + } + itemLevel = 4; + } else { + if ((!Badges.isUnlocked(Badges.Badge.GHOSTDAGE))) { + Statistics.dageCollected = 1; + } + itemLevel = 3; + } + weapon.upgrade(itemLevel); + armor.upgrade(itemLevel); + } public static void spawn( SewerLevel level ) { if (!spawned && Dungeon.depth > 1 && Random.Int( 5 - Dungeon.depth ) == 0) { @@ -325,35 +353,7 @@ public class Ghost extends NPC { weapon = (MeleeWeapon) Reflection.newInstance(c.classes[Random.chances(c.probs)]); //26%:+0, 25%:+1, 15%:+2, 10%:+3, 5%:+4 - float itemLevelRoll = Random.Float(); - int itemLevel; - if (itemLevelRoll < 0.74f){ - itemLevel = 0; - } else if (itemLevelRoll < 0.75f){ - itemLevel = 1; - } else if (itemLevelRoll < 0.85f){ - itemLevel = 2; - } else if (itemLevelRoll < 0.90f) { - itemLevel = 3; - if ((!Badges.isUnlocked(Badges.Badge.GHOSTDAGE))) { - Statistics.dageCollected = 1; - Badges.GhostDageCollected(); - } - } else if (itemLevelRoll < 0.95f && Badges.isUnlocked(Badges.Badge.GHOSTDAGE)) { - if ((!Badges.isUnlocked(Badges.Badge.DAGETO))) { - Statistics.dageCollected = 2; - Badges.GhostDageCollected(); - } - itemLevel = 4; - } else { - if ((!Badges.isUnlocked(Badges.Badge.GHOSTDAGE))) { - Statistics.dageCollected = 1; - Badges.GhostDageCollected(); - } - itemLevel = 3; - } - weapon.upgrade(itemLevel); - armor.upgrade(itemLevel); + ghostQuest(); //10% to be enchanted. We store it separately so enchant status isn't revealed early if (Random.Int(10) == 0){ @@ -396,35 +396,7 @@ public class Ghost extends NPC { Generator.Category c = Generator.wepTiers[wepTier - 1]; weapon = (MeleeWeapon) Reflection.newInstance(c.classes[Random.chances(c.probs)]); - //26%:+0, 25%:+1, 15%:+2, 10%:+3, 5%:+4, 5%+5 - float itemLevelRoll = Random.Float(); - int itemLevel; - if (itemLevelRoll < 0.74f){ - itemLevel = 0; - } else if (itemLevelRoll < 0.75f){ - itemLevel = 1; - } else if (itemLevelRoll < 0.85f){ - itemLevel = 2; - } else if (itemLevelRoll < 0.90f) { - itemLevel = 3; - hero.sprite.showStatus( CharSprite.NEGATIVE, "+3!!!" ); - } else if (itemLevelRoll < 0.95f && Badges.isUnlocked(Badges.Badge.GHOSTDAGE)){ - hero.sprite.showStatus( CharSprite.POSITIVE, "+5!!!" ); - if(( !Badges.isUnlocked(Badges.Badge.DAGETO))) { - Statistics.dageCollected = 2; - Badges.GhostDageCollected(); - } - itemLevel = 5; - } else { - itemLevel = 4; - hero.sprite.showStatus( CharSprite.WARNING, "+4!!!" ); - if(( !Badges.isUnlocked(Badges.Badge.GHOSTDAGE))) { - Statistics.dageCollected = 1; - Badges.GhostDageCollected(); - } - } - weapon.upgrade(itemLevel); - armor.upgrade(itemLevel); + ghostQuest(); //10% to be enchanted. We store it separately so enchant status isn't revealed early if (Random.Int(10) == 0){ diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/mobs/spical/GnollHero.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/mobs/spical/GnollHero.java new file mode 100644 index 000000000..8d9fa84e8 --- /dev/null +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/mobs/spical/GnollHero.java @@ -0,0 +1,49 @@ +package com.shatteredpixel.shatteredpixeldungeon.actors.mobs.spical; + +import com.shatteredpixel.shatteredpixeldungeon.actors.Char; +import com.shatteredpixel.shatteredpixeldungeon.actors.mobs.npcs.NTNPC; +import com.shatteredpixel.shatteredpixeldungeon.messages.Messages; +import com.shatteredpixel.shatteredpixeldungeon.sprites.TribesmanSprite; +import com.watabou.utils.Random; + +import java.util.ArrayList; + +public class GnollHero extends NTNPC { + + { + spriteClass = TribesmanSprite.class; + HP = HT = 120; + properties.add(Property.NPC); + baseSpeed = 2f; + chat = new ArrayList() { + { + add(Messages.get(GnollHero.class, "chat_1")); + add(Messages.get(GnollHero.class, "chat_2")); + add(Messages.get(GnollHero.class, "chat_3")); + } + }; + } + + + + @Override + public float attackDelay() { + return 0.5f; + } + + @Override + public int damageRoll() { + return Random.NormalIntRange( 20, 40 ); + } + + @Override + public int attackSkill( Char target ) { + return 30; + } + + @Override + public int drRoll() { + return Random.NormalIntRange(10, 16); + } + +} diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/effects/Speck.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/effects/Speck.java index 931824240..dae6d46d5 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/effects/Speck.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/effects/Speck.java @@ -34,515 +34,511 @@ import com.watabou.utils.SparseArray; public class Speck extends Image { - public static final int HEALING = 0; - public static final int STAR = 1; - public static final int LIGHT = 2; - public static final int QUESTION = 3; - public static final int UP = 4; - public static final int SCREAM = 5; - public static final int BONE = 6; - public static final int WOOL = 7; - public static final int ROCK = 8; - public static final int NOTE = 9; - public static final int CHANGE = 10; - public static final int HEART = 11; - public static final int BUBBLE = 12; - public static final int STEAM = 13; - public static final int COIN = 14; - - public static final int DISCOVER = 101; - public static final int EVOKE = 102; - public static final int MASK = 103; - public static final int KIT = 104; - public static final int RATTLE = 105; - public static final int JET = 106; - public static final int TOXIC = 107; - public static final int CORROSION = 108; - public static final int PARALYSIS = 109; - public static final int DUST = 110; - public static final int STENCH = 111; - public static final int FORGE = 112; - public static final int CONFUSION = 113; - public static final int RED_LIGHT = 114; - public static final int CALM = 115; - public static final int SMOKE = 116; - public static final int STORM = 117; - public static final int INFERNO = 118; - public static final int BLIZZARD = 119; - //New Blobs - public static final int DIED = 120; - - private static final int SIZE = 7; - - private int type; - private float lifespan; - private float left; - - private static TextureFilm film; - - private static SparseArray factories = new SparseArray<>(); - - public Speck() { - super(); - - texture( Assets.Effects.SPECKS ); - if (film == null) { - film = new TextureFilm( texture, SIZE, SIZE ); - } - - origin.set( SIZE / 2f ); - } - - public Speck image( int type ){ - reset(0, 0, 0, type); - - left = lifespan = Float.POSITIVE_INFINITY; - this.type = -1; - - resetColor(); - scale.set( 1 ); - speed.set( 0 ); - acc.set( 0 ); - angle = 0; - angularSpeed = 0; - - return this; - } - - public void reset( int index, float x, float y, int type ) { - revive(); - - this.type = type; - switch (type) { - case DISCOVER: - case RED_LIGHT: - frame( film.get( LIGHT ) ); - break; - case EVOKE: - case MASK: - case KIT: - case FORGE: - frame( film.get( STAR ) ); - break; - case RATTLE: - frame( film.get( BONE ) ); - break; - case JET: - case TOXIC: - case DIED: - case CORROSION: - case PARALYSIS: - case STENCH: - case CONFUSION: - case STORM: - case DUST: - case SMOKE: - case BLIZZARD: - case INFERNO: - frame( film.get( STEAM ) ); - break; - case CALM: - frame( film.get( SCREAM ) ); - break; - default: - frame( film.get( type ) ); - } - - this.x = x - origin.x; - this.y = y - origin.y; - - resetColor(); - scale.set( 1 ); - speed.set( 0 ); - acc.set( 0 ); - angle = 0; - angularSpeed = 0; - - switch (type) { - - case HEALING: - speed.set( 0, -20 ); - lifespan = 1f; - break; - - case STAR: - speed.polar( Random.Float( 2 * 3.1415926f ), Random.Float( 128 ) ); - acc.set( 0, 128 ); - angle = Random.Float( 360 ); - angularSpeed = Random.Float( -360, +360 ); - lifespan = 1f; - break; - - case FORGE: - speed.polar( Random.Float( -3.1415926f ), Random.Float( 64 ) ); - acc.set( 0, 128 ); - angle = Random.Float( 360 ); - angularSpeed = Random.Float( -360, +360 ); - lifespan = 0.51f; - break; - - case EVOKE: - speed.polar( Random.Float( -3.1415926f ), 50 ); - acc.set( 0, 50 ); - angle = Random.Float( 360 ); - angularSpeed = Random.Float( -180, +180 ); - lifespan = 1f; - break; - - case KIT: - speed.polar( index * 3.1415926f / 5, 50 ); - acc.set( -speed.x, -speed.y ); - angle = index * 36; - angularSpeed = 360; - lifespan = 1f; - break; - - case MASK: - speed.set( Random.Int( 2 ) == 0 ? Random.Float( -128, -64 ) : Random.Float( +64, +128 ), 0 ); - angularSpeed = speed.x < 0 ? -180 : +180; - acc.set( -speed.x, 0 ); - lifespan = 0.5f; - break; - - case RED_LIGHT: - tint(0xFFCC0000); - case LIGHT: - angle = Random.Float( 360 ); - angularSpeed = 90; - lifespan = 1f; - break; - - case DISCOVER: - angle = Random.Float( 360 ); - angularSpeed = 90; - lifespan = 0.5f; - am = 0; - break; - - case QUESTION: - lifespan = 0.8f; - break; - - case UP: - speed.set( 0, -20 ); - lifespan = 1f; - break; - - case CALM: - color(0, 1, 1); - case SCREAM: - lifespan = 0.9f; - break; - - case BONE: - lifespan = 0.2f; - speed.polar( Random.Float( 2 * 3.1415926f ), 24 / lifespan ); - acc.set( 0, 128 ); - angle = Random.Float( 360 ); - angularSpeed = 360; - break; - - case RATTLE: - lifespan = 0.5f; - speed.set( 0, -100 ); - acc.set( 0, -2 * speed.y / lifespan ); - angle = Random.Float( 360 ); - angularSpeed = 360; - break; - - case WOOL: - lifespan = 0.5f; - speed.set( 0, -50 ); - angle = Random.Float( 360 ); - angularSpeed = Random.Float( -360, +360 ); - break; - - case ROCK: - angle = Random.Float( 360 ); - angularSpeed = Random.Float( -360, +360 ); - scale.set( Random.Float( 1, 2 ) ); - speed.set( 0, 64 ); - lifespan = 0.2f; - this.y -= speed.y * lifespan; - break; - - case NOTE: - angularSpeed = Random.Float( -30, +30 ); - speed.polar( (angularSpeed - 90) * PointF.G2R, 30 ); - lifespan = 1f; - break; - - case CHANGE: - angle = Random.Float( 360 ); - speed.polar( (angle - 90) * PointF.G2R, Random.Float( 4, 12 ) ); - lifespan = 1.5f; - break; - - case HEART: - speed.set( Random.Int( -10, +10 ), -40 ); - angularSpeed = Random.Float( -45, +45 ); - lifespan = 1f; - break; - - case BUBBLE: - speed.set( 0, -15 ); - scale.set( Random.Float( 0.8f, 1 ) ); - lifespan = Random.Float( 0.8f, 1.5f ); - break; - - case STEAM: - speed.y = -Random.Float( 10, 15 ); - angularSpeed = Random.Float( +180 ); - angle = Random.Float( 360 ); - lifespan = 1f; - break; - - case JET: - speed.y = +32; - acc.y = -64; - angularSpeed = Random.Float( 180, 360 ); - angle = Random.Float( 360 ); - lifespan = 0.5f; - break; - - case TOXIC: - hardlight( 0x50FF60 ); - angularSpeed = 30; - angle = Random.Float( 360 ); - lifespan = Random.Float( 1f, 3f ); - break; - - case DIED: - if(Dungeon.depth==27){ - hardlight(0x0); - } else { - hardlight(0xff5060); - } - - angularSpeed = 30; - angle =Random.Float( 360 ); - lifespan = Random.Float( 1f,3f); - break; - - case CORROSION: - hardlight( 0xAAAAAA ); - angularSpeed = 30; - angle = Random.Float( 360 ); - lifespan = Random.Float( 1f, 3f ); - break; - - case PARALYSIS: - hardlight( 0xFFFF66 ); - angularSpeed = -30; - angle = Random.Float( 360 ); - lifespan = Random.Float( 1f, 3f ); - break; - - case STENCH: - hardlight( 0x003300 ); - angularSpeed = -30; - angle = Random.Float( 360 ); - lifespan = Random.Float( 1f, 3f ); - break; - - case CONFUSION: - hardlight( Random.Int( 0x1000000 ) | 0x000080 ); - angularSpeed = Random.Float( -20, +20 ); - angle = Random.Float( 360 ); - lifespan = Random.Float( 1f, 3f ); - break; - - case STORM: - hardlight( 0x8AD8D8 ); - angularSpeed = Random.Float( -20, +20 ); - angle = Random.Float( 360 ); - lifespan = Random.Float( 1f, 3f ); - break; - - case INFERNO: - hardlight( 0xEE7722 ); - angularSpeed = Random.Float( 200, 300 ) * (Random.Int(2) == 0 ? -1 : 1); - angle = Random.Float( 360 ); - lifespan = Random.Float( 1f, 3f ); - break; - - case BLIZZARD: - hardlight( 0xFFFFFF ); - angularSpeed = Random.Float( 200, 300 ) * (Random.Int(2) == 0 ? -1 : 1); - angle = Random.Float( 360 ); - lifespan = Random.Float( 1f, 3f ); - break; - - case SMOKE: - hardlight( 0x000000 ); - angularSpeed = 30; - angle = Random.Float( 360 ); - lifespan = Random.Float( 1f, 1.5f ); - break; - - case DUST: - hardlight( 0xFFFF66 ); - angle = Random.Float( 360 ); - speed.polar( Random.Float( 2 * 3.1415926f ), Random.Float( 16, 48 ) ); - lifespan = 0.5f; - break; - - case COIN: - speed.polar( -PointF.PI * Random.Float( 0.3f, 0.7f ), Random.Float( 48, 96 ) ); - acc.y = 256; - lifespan = -speed.y / acc.y * 2; - break; - } - - left = lifespan; - } - - @Override - public void update() { - super.update(); - - left -= Game.elapsed; - if (left <= 0) { - - kill(); - - } else { - - float p = 1 - left / lifespan; // 0 -> 1 - - switch (type) { - - case STAR: - case FORGE: - scale.set( 1 - p ); - am = p < 0.2f ? p * 5f : (1 - p) * 1.25f; - break; - - case KIT: - case MASK: - am = 1 - p * p; - break; - - case EVOKE: - - case HEALING: - am = p < 0.5f ? 1 : 2 - p * 2; - break; - - case RED_LIGHT: - case LIGHT: - am = scale.set( p < 0.2f ? p * 5f : (1 - p) * 1.25f ).x; - break; - - case DISCOVER: - am = 1 - p; - scale.set( (p < 0.5f ? p : 1 - p) * 2 ); - break; - - case QUESTION: - scale.set( (float)(Math.sqrt( p < 0.5f ? p : 1 - p ) * 3) ); - break; - - case UP: - scale.set( (float)(Math.sqrt( p < 0.5f ? p : 1 - p ) * 2) ); - break; - - case CALM: - case SCREAM: - am = (float)Math.sqrt( (p < 0.5f ? p : 1 - p) * 2f ); - scale.set( p * 7 ); - break; - - case BONE: - case RATTLE: - am = p < 0.9f ? 1 : (1 - p) * 10; - break; - - case ROCK: - am = p < 0.2f ? p * 5 : 1 ; - break; - - case NOTE: - am = 1 - p * p; - break; - - case WOOL: - scale.set( 1 - p ); - break; - - case CHANGE: - am = (float)Math.sqrt( (p < 0.5f ? p : 1 - p) * 2); - scale.y = (1 + p) * 0.5f; - scale.x = scale.y * (float)Math.cos( left * 15 ); - break; - - case HEART: - scale.set( 1 - p ); - am = 1 - p * p; - break; - - case BUBBLE: - am = p < 0.2f ? p * 5 : 1; - break; - - case STEAM: - case TOXIC: - case PARALYSIS: - case DIED: - case CONFUSION: - case STORM: - case BLIZZARD: - case INFERNO: - case DUST: - am = (float)Math.sqrt( (p < 0.5f ? p : 1 - p) * 0.5f ); - scale.set( 1 + p ); - break; - - case CORROSION: - hardlight( ColorMath.interpolate( 0xAAAAAA, 0xFF8800 , p )); - case STENCH: - case SMOKE: - am = (float)Math.sqrt( (p < 0.5f ? p : 1 - p) ); - scale.set( 1 + p ); - break; - - case JET: - am = (p < 0.5f ? p : 1 - p) * 2; - scale.set( p * 1.5f ); - break; - - case COIN: - scale.x = (float)Math.cos( left * 5 ); - rm = gm = bm = (Math.abs( scale.x ) + 1) * 0.5f; - am = p < 0.9f ? 1 : (1 - p) * 10; - break; - } - } - } - - public static Emitter.Factory factory( final int type ) { - return factory( type, false ); - } - - public static Emitter.Factory factory( final int type, final boolean lightMode ) { - - Emitter.Factory factory = factories.get( type ); - - if (factory == null) { - factory = new Emitter.Factory() { - @Override - public void emit ( Emitter emitter, int index, float x, float y ) { - Speck p = (Speck)emitter.recycle( Speck.class ); - p.reset( index, x, y, type ); - } - @Override - public boolean lightMode() { - return lightMode; - } - }; - factories.put( type, factory ); - } - - return factory; - } + public static final int HEALING = 0; + public static final int STAR = 1; + public static final int LIGHT = 2; + public static final int QUESTION = 3; + public static final int UP = 4; + public static final int SCREAM = 5; + public static final int BONE = 6; + public static final int WOOL = 7; + public static final int ROCK = 8; + public static final int NOTE = 9; + public static final int CHANGE = 10; + public static final int HEART = 11; + public static final int BUBBLE = 12; + public static final int STEAM = 13; + public static final int COIN = 14; + + public static final int DISCOVER = 101; + public static final int EVOKE = 102; + public static final int MASK = 103; + public static final int KIT = 104; + public static final int RATTLE = 105; + public static final int JET = 106; + public static final int TOXIC = 107; + public static final int CORROSION = 108; + public static final int PARALYSIS = 109; + public static final int DUST = 110; + public static final int STENCH = 111; + public static final int FORGE = 112; + public static final int CONFUSION = 113; + public static final int RED_LIGHT = 114; + public static final int CALM = 115; + public static final int SMOKE = 116; + public static final int STORM = 117; + public static final int INFERNO = 118; + public static final int BLIZZARD = 119; + //New Blobs + public static final int DIED = 120; + + private static final int SIZE = 7; + + private int type; + private float lifespan; + private float left; + + private static TextureFilm film; + + private static SparseArray factories = new SparseArray<>(); + + public Speck() { + super(); + + texture(Assets.Effects.SPECKS); + if (film == null) { + film = new TextureFilm(texture, SIZE, SIZE); + } + + origin.set(SIZE / 2f); + } + + public Speck image(int type) { + reset(0, 0, 0, type); + + left = lifespan = Float.POSITIVE_INFINITY; + this.type = -1; + + resetColor(); + scale.set(1); + speed.set(0); + acc.set(0); + angle = 0; + angularSpeed = 0; + + return this; + } + + public void reset(int index, float x, float y, int type) { + revive(); + + this.type = type; + switch (type) { + case DISCOVER: + case RED_LIGHT: + frame(film.get(LIGHT)); + break; + case EVOKE: + case MASK: + case KIT: + case FORGE: + frame(film.get(STAR)); + break; + case RATTLE: + frame(film.get(BONE)); + break; + case JET: + case TOXIC: + case DIED: + case CORROSION: + case PARALYSIS: + case STENCH: + case CONFUSION: + case STORM: + case DUST: + case SMOKE: + case BLIZZARD: + case INFERNO: + frame(film.get(STEAM)); + break; + case CALM: + frame(film.get(SCREAM)); + break; + default: + frame(film.get(type)); + } + + this.x = x - origin.x; + this.y = y - origin.y; + + resetColor(); + scale.set(1); + speed.set(0); + acc.set(0); + angle = 0; + angularSpeed = 0; + + switch (type) { + + case HEALING: + speed.set(0, -20); + lifespan = 1f; + break; + + case STAR: + speed.polar(Random.Float(2 * 3.1415926f), Random.Float(128)); + acc.set(0, 128); + angle = Random.Float(360); + angularSpeed = Random.Float(-360, +360); + lifespan = 1f; + break; + + case FORGE: + speed.polar(Random.Float(-3.1415926f), Random.Float(64)); + acc.set(0, 128); + angle = Random.Float(360); + angularSpeed = Random.Float(-360, +360); + lifespan = 0.51f; + break; + + case EVOKE: + speed.polar(Random.Float(-3.1415926f), 50); + acc.set(0, 50); + angle = Random.Float(360); + angularSpeed = Random.Float(-180, +180); + lifespan = 1f; + break; + + case KIT: + speed.polar(index * 3.1415926f / 5, 50); + acc.set(-speed.x, -speed.y); + angle = index * 36; + angularSpeed = 360; + lifespan = 1f; + break; + + case MASK: + speed.set(Random.Int(2) == 0 ? Random.Float(-128, -64) : Random.Float(+64, +128), 0); + angularSpeed = speed.x < 0 ? -180 : +180; + acc.set(-speed.x, 0); + lifespan = 0.5f; + break; + + case RED_LIGHT: + tint(0xFFCC0000); + + case DISCOVER: + angle = Random.Float(360); + angularSpeed = 90; + lifespan = 0.5f; + am = 0; + break; + + case QUESTION: + lifespan = 0.8f; + break; + + case UP: + speed.set(0, -20); + lifespan = 1f; + break; + + case CALM: + color(0, 1, 1); + case SCREAM: + lifespan = 0.9f; + break; + + case BONE: + lifespan = 0.2f; + speed.polar(Random.Float(2 * 3.1415926f), 24 / lifespan); + acc.set(0, 128); + angle = Random.Float(360); + angularSpeed = 360; + break; + + case RATTLE: + lifespan = 0.5f; + speed.set(0, -100); + acc.set(0, -2 * speed.y / lifespan); + angle = Random.Float(360); + angularSpeed = 360; + break; + + case WOOL: + lifespan = 0.5f; + speed.set(0, -50); + angle = Random.Float(360); + angularSpeed = Random.Float(-360, +360); + break; + + case ROCK: + angle = Random.Float(360); + angularSpeed = Random.Float(-360, +360); + scale.set(Random.Float(1, 2)); + speed.set(0, 64); + lifespan = 0.2f; + this.y -= speed.y * lifespan; + break; + + case NOTE: + angularSpeed = Random.Float(-30, +30); + speed.polar((angularSpeed - 90) * PointF.G2R, 30); + lifespan = 1f; + break; + + case CHANGE: + angle = Random.Float(360); + speed.polar((angle - 90) * PointF.G2R, Random.Float(4, 12)); + lifespan = 1.5f; + break; + + case HEART: + speed.set(Random.Int(-10, +10), -40); + angularSpeed = Random.Float(-45, +45); + lifespan = 1f; + break; + + case BUBBLE: + speed.set(0, -15); + scale.set(Random.Float(0.8f, 1)); + lifespan = Random.Float(0.8f, 1.5f); + break; + + case STEAM: + speed.y = -Random.Float(10, 15); + angularSpeed = Random.Float(+180); + angle = Random.Float(360); + lifespan = 1f; + break; + + case JET: + speed.y = +32; + acc.y = -64; + angularSpeed = Random.Float(180, 360); + angle = Random.Float(360); + lifespan = 0.5f; + break; + + case TOXIC: + hardlight(0x50FF60); + angularSpeed = 30; + angle = Random.Float(360); + lifespan = Random.Float(1f, 3f); + break; + + case DIED: + if (Dungeon.depth == 27) { + hardlight(0x0); + } else { + hardlight(0xff5060); + } + + angularSpeed = 30; + angle = Random.Float(360); + lifespan = Random.Float(1f, 3f); + break; + + case CORROSION: + hardlight(0xAAAAAA); + angularSpeed = 30; + angle = Random.Float(360); + lifespan = Random.Float(1f, 3f); + break; + + case PARALYSIS: + hardlight(0xFFFF66); + angularSpeed = -30; + angle = Random.Float(360); + lifespan = Random.Float(1f, 3f); + break; + + case STENCH: + hardlight(0x003300); + angularSpeed = -30; + angle = Random.Float(360); + lifespan = Random.Float(1f, 3f); + break; + + case CONFUSION: + hardlight(Random.Int(0x1000000) | 0x000080); + angularSpeed = Random.Float(-20, +20); + angle = Random.Float(360); + lifespan = Random.Float(1f, 3f); + break; + + case STORM: + hardlight(0x8AD8D8); + angularSpeed = Random.Float(-20, +20); + angle = Random.Float(360); + lifespan = Random.Float(1f, 3f); + break; + + case INFERNO: + hardlight(0xEE7722); + angularSpeed = Random.Float(200, 300) * (Random.Int(2) == 0 ? -1 : 1); + angle = Random.Float(360); + lifespan = Random.Float(1f, 3f); + break; + + case BLIZZARD: + hardlight(0xFFFFFF); + angularSpeed = Random.Float(200, 300) * (Random.Int(2) == 0 ? -1 : 1); + angle = Random.Float(360); + lifespan = Random.Float(1f, 3f); + break; + + case SMOKE: + hardlight(0x000000); + angularSpeed = 30; + angle = Random.Float(360); + lifespan = Random.Float(1f, 1.5f); + break; + + case DUST: + hardlight(0xFFFF66); + angle = Random.Float(360); + speed.polar(Random.Float(2 * 3.1415926f), Random.Float(16, 48)); + lifespan = 0.5f; + break; + + case COIN: + speed.polar(-PointF.PI * Random.Float(0.3f, 0.7f), Random.Float(48, 96)); + acc.y = 256; + lifespan = -speed.y / acc.y * 2; + break; + } + + left = lifespan; + } + + @Override + public void update() { + super.update(); + + left -= Game.elapsed; + if (left <= 0) { + + kill(); + + } else { + + float p = 1 - left / lifespan; // 0 -> 1 + + switch (type) { + + case STAR: + case FORGE: + scale.set(1 - p); + am = p < 0.2f ? p * 5f : (1 - p) * 1.25f; + break; + + case KIT: + case MASK: + am = 1 - p * p; + break; + + case EVOKE: + + case HEALING: + am = p < 0.5f ? 1 : 2 - p * 2; + break; + + case RED_LIGHT: + case LIGHT: + am = scale.set(p < 0.2f ? p * 5f : (1 - p) * 1.25f).x; + break; + + case DISCOVER: + am = 1 - p; + scale.set((p < 0.5f ? p : 1 - p) * 2); + break; + + case QUESTION: + scale.set((float) (Math.sqrt(p < 0.5f ? p : 1 - p) * 3)); + break; + + case UP: + scale.set((float) (Math.sqrt(p < 0.5f ? p : 1 - p) * 2)); + break; + + case CALM: + case SCREAM: + am = (float) Math.sqrt((p < 0.5f ? p : 1 - p) * 2f); + scale.set(p * 7); + break; + + case BONE: + case RATTLE: + am = p < 0.9f ? 1 : (1 - p) * 10; + break; + + case ROCK: + am = p < 0.2f ? p * 5 : 1; + break; + + case NOTE: + am = 1 - p * p; + break; + + case WOOL: + scale.set(1 - p); + break; + + case CHANGE: + am = (float) Math.sqrt((p < 0.5f ? p : 1 - p) * 2); + scale.y = (1 + p) * 0.5f; + scale.x = scale.y * (float) Math.cos(left * 15); + break; + + case HEART: + scale.set(1 - p); + am = 1 - p * p; + break; + + case BUBBLE: + am = p < 0.2f ? p * 5 : 1; + break; + + case STEAM: + case TOXIC: + case PARALYSIS: + case DIED: + case CONFUSION: + case STORM: + case BLIZZARD: + case INFERNO: + case DUST: + am = (float) Math.sqrt((p < 0.5f ? p : 1 - p) * 0.5f); + scale.set(1 + p); + break; + + case CORROSION: + hardlight(ColorMath.interpolate(0xAAAAAA, 0xFF8800, p)); + case STENCH: + case SMOKE: + am = (float) Math.sqrt((p < 0.5f ? p : 1 - p)); + scale.set(1 + p); + break; + + case JET: + am = (p < 0.5f ? p : 1 - p) * 2; + scale.set(p * 1.5f); + break; + + case COIN: + scale.x = (float) Math.cos(left * 5); + rm = gm = bm = (Math.abs(scale.x) + 1) * 0.5f; + am = p < 0.9f ? 1 : (1 - p) * 10; + break; + } + } + } + + public static Emitter.Factory factory(final int type) { + return factory(type, false); + } + + public static Emitter.Factory factory(final int type, final boolean lightMode) { + + Emitter.Factory factory = factories.get(type); + + if (factory == null) { + factory = new Emitter.Factory() { + @Override + public void emit(Emitter emitter, int index, float x, float y) { + Speck p = (Speck) emitter.recycle(Speck.class); + p.reset(index, x, y, type); + } + + @Override + public boolean lightMode() { + return lightMode; + } + }; + factories.put(type, factory); + } + + return factory; + } } diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/weapon/melee/Sai.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/weapon/melee/Sai.java index f1a0dc1bf..c2244e754 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/weapon/melee/Sai.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/weapon/melee/Sai.java @@ -61,7 +61,7 @@ public class Sai extends MeleeWeapon { //50x0.1+7x0.5+1=10+3.5+1=15 if(attacker.HP >= attacker.HT){ GLog.p("血量已满!无法回血"); - } else if (Random.Int(10)==2) { + } else if (Random.Int(10)<=4) { R = (int) (attacker.HT * 0.1 + (buffedLvl() * 0.5) + 1.5); attacker.HP +=attacker.HT * 0.1 + (buffedLvl()) + 1.5; attacker.sprite.showStatus(CharSprite.POSITIVE, ("+" + R + "HP")); diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/features/LevelTransition.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/features/LevelTransition.java new file mode 100644 index 000000000..24ca621b7 --- /dev/null +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/features/LevelTransition.java @@ -0,0 +1,156 @@ +/* + * Pixel Dungeon + * Copyright (C) 2012-2015 Oleg Dolya + * + * Shattered Pixel Dungeon + * Copyright (C) 2014-2023 Evan Debenham + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see + */ + +package com.shatteredpixel.shatteredpixeldungeon.levels.features; + +import com.shatteredpixel.shatteredpixeldungeon.Dungeon; +import com.shatteredpixel.shatteredpixeldungeon.levels.Level; +import com.watabou.utils.Bundlable; +import com.watabou.utils.Bundle; +import com.watabou.utils.Point; +import com.watabou.utils.Random; +import com.watabou.utils.Rect; + +public class LevelTransition extends Rect implements Bundlable { + + public enum Type { + SURFACE, + REGULAR_ENTRANCE, + REGULAR_EXIT, + BRANCH_ENTRANCE, + BRANCH_EXIT; + } + + public Type type; + public int destDepth; + public int destBranch; + public Type destType; + + public int centerCell; + + //for bundling + public LevelTransition(){ + super(); + } + + public LevelTransition(Level level, int cell, Type type, int destDepth, int destBranch, Type destType){ + centerCell = cell; + Point p = level.cellToPoint(cell); + set(p.x, p.y, p.x, p.y); + this.type = type; + this.destDepth = destDepth; + this.destBranch = destBranch; + this.destType = destType; + } + + //gives default values for common transition types + public LevelTransition(Level level, int cell, Type type){ + centerCell = cell; + Point p = level.cellToPoint(cell); + set(p.x, p.y, p.x, p.y); + this.type = type; + switch (type){ + case REGULAR_ENTRANCE: default: + destDepth = Dungeon.depth-1; + destBranch = Dungeon.branch; + destType = Type.REGULAR_EXIT; + break; + case REGULAR_EXIT: + destDepth = Dungeon.depth+1; + destBranch = Dungeon.branch; + destType = Type.REGULAR_ENTRANCE; + break; + case SURFACE: + destDepth = 0; + destBranch = 0; + destType = null; + break; + } + } + + //note that the center cell isn't always the actual center. + // It is important when game logic needs to pick a specific cell for some action + // e.g. where to place the hero + public int cell(){ + return centerCell; + } + + //Transitions are inclusive to their right and bottom sides + @Override + public int width() { + return super.width()+1; + } + + @Override + public int height() { + return super.height()+1; + } + + @Override + public boolean inside(Point p) { + return p.x >= left && p.x <= right && p.y >= top && p.y <= bottom; + } + + public boolean inside(int cell){ + return inside(new Point(Dungeon.level.cellToPoint(cell))); + } + + public Point center() { + return new Point( + (left + right) / 2 + (((right - left) % 2) == 1 ? Random.Int( 2 ) : 0), + (top + bottom) / 2 + (((bottom - top) % 2) == 1 ? Random.Int( 2 ) : 0) ); + } + + public static final String TYPE = "type"; + public static final String DEST_DEPTH = "dest_depth"; + public static final String DEST_BRANCH = "dest_branch"; + public static final String DEST_TYPE = "dest_type"; + + @Override + public void storeInBundle(Bundle bundle) { + bundle.put( "left", left ); + bundle.put( "top", top ); + bundle.put( "right", right ); + bundle.put( "bottom", bottom ); + + bundle.put( "center", centerCell ); + + bundle.put(TYPE, type); + bundle.put(DEST_DEPTH, destDepth); + bundle.put(DEST_BRANCH, destBranch); + bundle.put(DEST_TYPE, destType); + } + + @Override + public void restoreFromBundle(Bundle bundle) { + left = bundle.getInt( "left" ); + top = bundle.getInt( "top" ); + right = bundle.getInt( "right" ); + bottom = bundle.getInt( "bottom" ); + + centerCell = bundle.getInt( "center" ); + + type = bundle.getEnum(TYPE, Type.class); + destDepth = bundle.getInt(DEST_DEPTH); + destBranch = bundle.getInt(DEST_BRANCH); + if (bundle.contains(DEST_TYPE)) destType = bundle.getEnum(DEST_TYPE, Type.class); + } +} diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/rooms/standard/YinYangRoom.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/rooms/standard/YinYangRoom.java index 24ec204fa..c6947a52e 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/rooms/standard/YinYangRoom.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/rooms/standard/YinYangRoom.java @@ -121,11 +121,12 @@ public class YinYangRoom extends SpecialRoom { if(Dungeon.depth == 1){ door.set(Door.Type.REGULAR); } else { + level.addItemToSpawn( new IronKey( Dungeon.depth ) ); door.set(Door.Type.LOCKED); } } - level.addItemToSpawn( new IronKey( Dungeon.depth ) ); + level.addItemToSpawn( new CrystalKey( Dungeon.depth ) ); level.addItemToSpawn( new PotionOfLevitation()); diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/messages/Messages.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/messages/Messages.java index e52a83cac..489ebc46f 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/messages/Messages.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/messages/Messages.java @@ -53,8 +53,6 @@ public class Messages { return lang; } - - /** * Setup Methods */ diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/scenes/CellSelector.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/scenes/CellSelector.java index 817c2a105..99f59fd94 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/scenes/CellSelector.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/scenes/CellSelector.java @@ -96,8 +96,8 @@ public class CellSelector extends ScrollArea { } } - //then mobs - for (Char mob : Dungeon.level.mobs.toArray(new Mob[0])){ + Mob[] mobs = Dungeon.level.mobs.toArray(new Mob[0]); + for (Char mob : mobs) { if (mob.sprite != null && mob.sprite.overlapsPoint( p.x, p.y )){ PointF c = DungeonTilemap.tileCenterToWorld(mob.pos); if (Math.abs(p.x - c.x) <= 12 && Math.abs(p.y - c.y) <= 12) { @@ -106,6 +106,16 @@ public class CellSelector extends ScrollArea { } } } + //then mobs +// for (Char mob : Dungeon.level.mobs.toArray(new Mob[0])){ +// if (mob.sprite != null && mob.sprite.overlapsPoint( p.x, p.y )){ +// PointF c = DungeonTilemap.tileCenterToWorld(mob.pos); +// if (Math.abs(p.x - c.x) <= 12 && Math.abs(p.y - c.y) <= 12) { +// select(mob.pos, event.button); +// return; +// } +// } +// } //then heaps for (Heap heap : Dungeon.level.heaps.valueList()){ diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/sprites/TribesmanSprite.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/sprites/TribesmanSprite.java new file mode 100644 index 000000000..c45d4d827 --- /dev/null +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/sprites/TribesmanSprite.java @@ -0,0 +1,29 @@ +package com.shatteredpixel.shatteredpixeldungeon.sprites; + +import com.shatteredpixel.shatteredpixeldungeon.Assets; +import com.watabou.noosa.TextureFilm; + +public class TribesmanSprite extends MobSprite { + + public TribesmanSprite() { + super(); + + texture( Assets.Sprites.HEROGNOLL ); + + TextureFilm frames = new TextureFilm( texture, 13, 16 ); + + idle = new Animation( 2, true ); + idle.frames( frames, 0, 0, 0, 1, 0, 0, 1, 1 ); + + run = new Animation( 12, true ); + run.frames( frames, 5, 6, 7, 8 ); + + attack = new Animation( 12, false ); + attack.frames( frames, 2, 3, 4, 0 ); + + die = new Animation( 12, false ); + die.frames( frames, 9, 10, 11 ); + + play( idle ); + } +} \ No newline at end of file diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/ui/changelist/mlpd/vM0_6_7_X_Changes.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/ui/changelist/mlpd/vM0_6_7_X_Changes.java index b10828825..eb2710ee1 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/ui/changelist/mlpd/vM0_6_7_X_Changes.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/ui/changelist/mlpd/vM0_6_7_X_Changes.java @@ -143,7 +143,7 @@ public class vM0_6_7_X_Changes { } public static void add_v0_6_55_Changes( ArrayList changeInfos ) { - ChangeInfo changes = new ChangeInfo("v0.6.4.0-BetaI-XI", true, ""); + ChangeInfo changes = new ChangeInfo("v0.6.4.0-BetaI-XIII", true, ""); changes.hardlight(Window.TITLE_COLOR); changeInfos.add(changes); @@ -198,6 +198,9 @@ public class vM0_6_7_X_Changes { changes.hardlight(Window.CYELLOW); changeInfos.add(changes); + changes.addButton(new ChangeButton(new ItemSprite(ItemSpriteSheet.SAI), ("吸血鬼刀-Beta13"), + ("修复了一些吸血权重问题。"))); + changes.addButton(new ChangeButton(new ItemSprite(ItemSpriteSheet.WRALIPS), ("暗金宝石护符"), ("现在最高上限+10,并调整优化了一些问题"))); @@ -219,7 +222,7 @@ public class vM0_6_7_X_Changes { changes.addButton(new ChangeButton(new ItemSprite(ItemSpriteSheet.GREATSHIELD), ("5阶武器"), ("现在5阶武器生成平均化"))); - changes.addButton(new ChangeButton(new ItemSprite(ItemSpriteSheet.SAI), ("吸血鬼刀"), + changes.addButton(new ChangeButton(new ItemSprite(ItemSpriteSheet.SAI), ("吸血鬼刀-Beta12"), ("优化数值,调整吸血权重。"))); changes.addButton(new ChangeButton(new ItemSprite(ItemSpriteSheet.DG3), ("归溯钥剑"), diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/windows/WndSadGhost.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/windows/WndSadGhost.java index 9c92c7284..374b740ef 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/windows/WndSadGhost.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/windows/WndSadGhost.java @@ -22,9 +22,9 @@ package com.shatteredpixel.shatteredpixeldungeon.windows; import com.shatteredpixel.shatteredpixeldungeon.Assets; +import com.shatteredpixel.shatteredpixeldungeon.Badges; import com.shatteredpixel.shatteredpixeldungeon.Chrome; import com.shatteredpixel.shatteredpixeldungeon.Dungeon; -import com.shatteredpixel.shatteredpixeldungeon.ShatteredPixelDungeon; import com.shatteredpixel.shatteredpixeldungeon.actors.mobs.npcs.Ghost; import com.shatteredpixel.shatteredpixeldungeon.items.Item; import com.shatteredpixel.shatteredpixeldungeon.items.armor.Armor; @@ -113,6 +113,9 @@ public class WndSadGhost extends Window { reward.identify(false); if (reward.doPickUp( Dungeon.hero )) { GLog.i( Messages.get(Dungeon.hero, "you_now_have", reward.name()) ); + if(reward.level() == 4 || reward.level() == 3){ + Badges.GhostDageCollected(); + } } else { Dungeon.level.drop( reward, ghost.pos ).sprite.drop(); } From 28cd52cc0cf8d0d6ad868231d51bda1cfe744a6f Mon Sep 17 00:00:00 2001 From: LingASDJ <2735951230@qq.com> Date: Thu, 21 Sep 2023 23:35:38 +0800 Subject: [PATCH 06/13] Update 0.6.5.0-Alpha2 --- build.gradle | 4 +- core/src/main/assets/interfaces/badges.png | Bin 21695 -> 21560 bytes core/src/main/assets/interfaces/banners.png | Bin 23154 -> 22682 bytes .../main/assets/interfaces/passwordbadges.png | Bin 0 -> 6228 bytes .../assets/interfaces/status_pane_normal.png | Bin 1606 -> 1609 bytes .../assets/messages/actors/actors.properties | 8 +- .../assets/messages/items/items.properties | 18 +- .../main/assets/messages/misc/misc.properties | 78 ++--- .../assets/messages/scenes/scenes.properties | 5 +- .../src/main/assets/messages/ui/ui.properties | 2 + .../messages/windows/windows.properties | 2 +- core/src/main/assets/sprites/items/items.png | Bin 89400 -> 89431 bytes .../shatteredpixeldungeon/Assets.java | 1 + .../shatteredpixeldungeon/Badges.java | 68 +---- .../shatteredpixeldungeon/Dungeon.java | 2 + .../shatteredpixeldungeon/PaswordBadges.java | 280 ++++++++++++++++++ .../actors/hero/Hero.java | 3 +- .../actors/hero/HeroClass.java | 18 +- .../actors/mobs/Bestiary.java | 3 +- .../actors/mobs/YogDzewa.java | 5 +- .../actors/mobs/bosses/DMZERO.java | 4 +- .../actors/mobs/bosses/DiamondKnight.java | 3 +- .../actors/mobs/bosses/DwarfMaster.java | 3 +- .../actors/mobs/bosses/FireMagicDied.java | 4 +- .../actors/mobs/bosses/SakaFishBoss.java | 4 +- .../effects/PasswordBadgeBanner.java | 198 +++++++++++++ .../shatteredpixeldungeon/items/Amulet.java | 2 + .../items/Generator.java | 79 ++--- .../shatteredpixeldungeon/items/Item.java | 2 +- .../items/MainBooks.java | 3 +- .../items/artifacts/Artifact.java | 2 +- .../items/books/Books.java | 28 +- .../items/weapon/melee/LifeTreeSword.java | 11 +- .../weapon/melee/legend/DiedCrossBow.java | 263 ++++++++++++++++ .../weapon/melee/legend/LegendWeapon.java | 128 ++++++++ .../levels/ZeroLevel.java | 14 +- .../shatteredpixeldungeon/scenes/GoScene.java | 2 +- .../scenes/PassWordBadgesScene.java | 147 +++++++++ .../scenes/PixelScene.java | 27 ++ .../scenes/TitleScene.java | 5 + .../scenes/WelcomeScene.java | 4 +- .../sprites/ItemSpriteSheet.java | 27 ++ .../ui/changelist/mlpd/vM0_6_7_X_Changes.java | 36 ++- .../windows/WndProBadge.java | 74 +++++ .../windows/WndSettings.java | 24 +- 45 files changed, 1369 insertions(+), 222 deletions(-) create mode 100644 core/src/main/assets/interfaces/passwordbadges.png create mode 100644 core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/PaswordBadges.java create mode 100644 core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/effects/PasswordBadgeBanner.java create mode 100644 core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/weapon/melee/legend/DiedCrossBow.java create mode 100644 core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/weapon/melee/legend/LegendWeapon.java create mode 100644 core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/scenes/PassWordBadgesScene.java create mode 100644 core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/windows/WndProBadge.java diff --git a/build.gradle b/build.gradle index b8082c8a3..44b320f0c 100644 --- a/build.gradle +++ b/build.gradle @@ -18,8 +18,8 @@ allprojects { appName = 'Magic Ling Pixel Dungeon' appPackageName = 'com.ansdomagiclingpixeldungeon.ling' - appVersionCode =907000 - appVersionName = '0.6.5.0-Alpha1' + appVersionCode =907300 + appVersionName = '0.6.5.0-Alpha2' appJavaCompatibility = JavaVersion.VERSION_11 diff --git a/core/src/main/assets/interfaces/badges.png b/core/src/main/assets/interfaces/badges.png index 3b9be2f25d9e8730b5e12ce51b2104772aa1eade..62fc07ea5ffe8490649e2c634ee1ea98efb86bc6 100644 GIT binary patch literal 21560 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 diff --git a/core/src/main/assets/interfaces/passwordbadges.png b/core/src/main/assets/interfaces/passwordbadges.png new file mode 100644 index 0000000000000000000000000000000000000000..196ece7deec26b5d6d570ce5c11db1859c173bd5 GIT binary patch literal 6228 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 f|B-_w5?PQ8IP~2w&X8BaMVY8 literal 0 HcmV?d00001 diff --git a/core/src/main/assets/interfaces/status_pane_normal.png b/core/src/main/assets/interfaces/status_pane_normal.png index c4afb2643fc6fb2c9c8b5fb2350aa01af301ad1c..713ee15f332bcdf41a88065b6e5eaead66d3ce71 100644 GIT binary patch delta 1045 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 LYAV#cwg~xOo{Xtq diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/Assets.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/Assets.java index 5377ade5a..30a92297a 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/Assets.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/Assets.java @@ -123,6 +123,7 @@ public class Assets { public static final String BANNERSSD = "interfaces/banners_sd.png"; public static final String BADGES = "interfaces/badges.png"; + public static final String PROBADGES = "interfaces/passwordbadges.png"; public static final String LOCKED = "interfaces/locked_badge.png"; public static final String CHROME = "interfaces/chrome.png"; diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/Badges.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/Badges.java index cbac632c3..1a257dd24 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/Badges.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/Badges.java @@ -144,7 +144,7 @@ public class Badges { VICTORY ( 78 ), YASD ( 79, true ), - GODD_MAKE ( 82 ), + CLEAR_WATER ( 83 ), GHOSTDAGE ( 84 ), // ENDIED ( 85 ), @@ -190,27 +190,15 @@ public class Badges { NYZ_SHOP ( 117 ), DAGETO ( 118 ), KILL_SM ( 119 ), - - TAKE_ITEM ( 120 ), - //rudy - FIREGIRL ( 128 ), - //SLIMEPR ( 129 ), - DRAWF_HEAD ( 130 ), - SPICEALBOSS ( 131), + + STORM ( 132), KILL_MG (133), - BIG_X (134), - EXSG (135), - BRCLER (136), - HIGH_SCORE_5 ( 137 ), - - SAKA_DIED ( 138 ), - - RESET_DAY ( 139 ); + HIGH_SCORE_5 ( 137 ); public boolean meta; @@ -265,7 +253,7 @@ public class Badges { displayBadge( badge ); } - private static HashSet global; + public static HashSet global; private static HashSet local = new HashSet<>(); private static boolean saveNeeded = false; @@ -755,17 +743,17 @@ public class Badges { global.contains( Badge.GET_SC ) && global.contains( Badge.KILL_COLDELE)) { - Badge badge = Badge.GODD_MAKE; - displayBadge( badge ); + PaswordBadges.Badge badge = PaswordBadges.Badge.GODD_MAKE; + PaswordBadges.displayBadge( badge ); } } - private static void validateAMZ() { + public static void validateAMZ() { if (global.contains( Badge.KILL_APPLE ) &&global.contains( Badge.KILL_DM720 ) && - global.contains( Badge.KILL_MG) && global.contains( Badge.FIREGIRL) && global.contains( Badge.DRAWF_HEAD) && global.contains( Badge.SAKA_DIED)) { + global.contains( Badge.KILL_MG) && PaswordBadges.global.contains( PaswordBadges.Badge.FIREGIRL) && PaswordBadges.global.contains( PaswordBadges.Badge.DRAWF_HEAD) && PaswordBadges.global.contains( PaswordBadges.Badge.SAKA_DIED)) { - Badge badge = Badge.SPICEALBOSS; - displayBadge( badge ); + PaswordBadges.Badge badge = PaswordBadges.Badge.SPICEALBOSS; + PaswordBadges.displayBadge( badge ); } } @@ -1035,14 +1023,9 @@ public class Badges { validateAMZ(); } - public static void KILLSAKA() { - displayBadge( Badge.SAKA_DIED); - validateAMZ(); - } - public static void REHOMESKY() { - displayBadge( Badge.RESET_DAY ); - } + + public static void STORM() { displayBadge( Badge.STORM); @@ -1061,15 +1044,6 @@ public class Badges { displayBadge( Badge.CLEAR_WATER ); } - public static void KILLDWARF() { - displayBadge( Badge.DRAWF_HEAD ); - validateAMZ(); - } - - public static void KILLFIREGIRL() { - displayBadge( Badge.FIREGIRL ); - validateAMZ(); - } public static void KILLMG() { displayBadge( Badge.KILL_MG ); @@ -1081,22 +1055,6 @@ public class Badges { validateAMZ(); } - public static void KILL_OMP() { - displayBadge( Badge.TAKE_ITEM ); - } - - - public static void BIGX() { - displayBadge( Badge.BIG_X ); - } - public static void EXSG() { - displayBadge( Badge.EXSG ); - } - - public static void BOSSRUSH() { - displayBadge( Badge.BRCLER ); - } - public static void GOODRLPT() { displayBadge( Badge.RLPT ); } diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/Dungeon.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/Dungeon.java index 64f288cfe..ac4af6755 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/Dungeon.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/Dungeon.java @@ -836,8 +836,10 @@ public class Dungeon { Bundle badges = bundle.getBundle(BADGES); if (!badges.isNull()) { Badges.loadLocal( badges ); + PaswordBadges.loadLocal( badges ); } else { Badges.reset(); + PaswordBadges.reset(); } Notes.restoreFromBundle( bundle ); diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/PaswordBadges.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/PaswordBadges.java new file mode 100644 index 000000000..b11069180 --- /dev/null +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/PaswordBadges.java @@ -0,0 +1,280 @@ +package com.shatteredpixel.shatteredpixeldungeon; + +import static com.shatteredpixel.shatteredpixeldungeon.Badges.validateAMZ; +import static com.shatteredpixel.shatteredpixeldungeon.Challenges.PRO; + +import com.shatteredpixel.shatteredpixeldungeon.messages.Messages; +import com.shatteredpixel.shatteredpixeldungeon.scenes.PixelScene; +import com.shatteredpixel.shatteredpixeldungeon.utils.GLog; +import com.watabou.utils.Bundle; +import com.watabou.utils.FileUtils; + +import java.io.IOException; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Collections; +import java.util.HashMap; +import java.util.HashSet; +import java.util.Iterator; +import java.util.List; + +public class PaswordBadges { + + public static void KILLDWARF() { + displayBadge( PaswordBadges.Badge.DRAWF_HEAD ); + validateAMZ(); + } + + public static void KILLFIREGIRL() { + displayBadge( PaswordBadges.Badge.FIREGIRL ); + validateAMZ(); + } + + public static void KILLSAKA() { + displayBadge( PaswordBadges.Badge.SAKA_DIED); + validateAMZ(); + } + + public static void REHOMESKY() { + displayBadge( PaswordBadges.Badge.RESET_DAY ); + } + + public static void BOSSRUSH() { + displayBadge( PaswordBadges.Badge.BRCLER ); + } + + public static void ALLCS(int challenges){ + if (challenges == 0) return; + if (challenges >= 13 && !(Dungeon.isChallenged(PRO))||!Statistics.happyMode && challenges >= 13){ + displayBadge(PaswordBadges.Badge.ALLCHSX ); + } + } + + public static void BIGX() { + displayBadge( PaswordBadges.Badge.BIG_X ); + } + public static void EXSG() { + displayBadge( PaswordBadges.Badge.EXSG ); + } + + + + public enum Badge { + + TAKE_ITEM( 0 ), + FIREGIRL(1), + SLIMEPRS(2), + DRAWF_HEAD(3), + SPICEALBOSS (4), + SAKA_DIED(5), + RESET_DAY(6), + BRCLER(7), + ALLCHSX(8), + + GODD_MAKE(12), + + BIG_X(13), + EXSG(14); + + + public boolean meta; + + public int image; + + Badge( int image ) { + this( image, false ); + } + + Badge( int image, boolean meta ) { + this.image = image; + this.meta = meta; + } + + public String title(){ + return Messages.get(this, name()+".title"); + } + + public String desc(){ + return Messages.get(this, name()+".desc"); + } + + Badge() { + this( -1 ); + } + } + + public static HashSet global; + private static HashSet local = new HashSet<>(); + + + + private static boolean saveNeeded = false; + + public static void reset() { + local.clear(); + loadGlobal(); + } + + public static final String BADGES_FILE = "badges.dat"; + private static final String BADGES = "badges"; + + private static final HashSet removedBadges = new HashSet<>(); + static{ + //removed in 0.6.5 + removedBadges.addAll(Arrays.asList("RARE_ALBINO", "RARE_BANDIT", "RARE_SHIELDED", + "RARE_SENIOR", "RARE_ACIDIC", "RARE", "TUTORIAL_WARRIOR", "TUTORIAL_MAGE")); + } + + private static final HashMap renamedBadges = new HashMap<>(); + static{ + //0.6.5 + renamedBadges.put("CHAMPION", "CHAMPION_1"); + } + + public static HashSet restore( Bundle bundle ) { + HashSet badges = new HashSet<>(); + if (bundle == null) return badges; + + String[] names = bundle.getStringArray( BADGES ); + for (int i=0; i < names.length; i++) { + try { + if (renamedBadges.containsKey(names[i])){ + names[i] = renamedBadges.get(names[i]); + } + if (!removedBadges.contains(names[i])){ + badges.add( Badge.valueOf( names[i] ) ); + } + } catch (Exception e) { + ShatteredPixelDungeon.reportException(e); + } + } + + return badges; + } + + public static void store( Bundle bundle, HashSet badges ) { + int count = 0; + String names[] = new String[badges.size()]; + + for (Badge badge:badges) { + names[count++] = badge.toString(); + } + bundle.put( BADGES, names ); + } + + public static void loadLocal( Bundle bundle ) { + local = restore( bundle ); + } + + public static void saveLocal( Bundle bundle ) { + store( bundle, local ); + } + + public static void loadGlobal() { + if (global == null) { + try { + Bundle bundle = FileUtils.bundleFromFile( BADGES_FILE ); + global = restore( bundle ); + + } catch (IOException e) { + global = new HashSet<>(); + } + } + } + + public static void saveGlobal() { + if (saveNeeded) { + + Bundle bundle = new Bundle(); + store( bundle, global ); + + try { + FileUtils.bundleToFile(BADGES_FILE, bundle); + saveNeeded = false; + } catch (IOException e) { + ShatteredPixelDungeon.reportException(e); + } + } + } + + public static void validateOMP() { + displayBadge( Badge.TAKE_ITEM ); + } + + public static void displayBadge( Badge badge ) { + + if (badge == null) { + return; + } + + if (global.contains( badge )) { + + if (!badge.meta) { + GLog.h( Messages.get(Badges.class, "endorsed", badge.desc()) ); + } + + } else { + + global.add( badge ); + saveNeeded = true; + + if (badge.meta) { + GLog.h( Messages.get(Badges.class, "new_super", badge.desc()) ); + } else { + GLog.h( Messages.get(Badges.class, "new", badge.desc()) ); + } + PixelScene.showProBadge( badge ); + } + } + + public static boolean isUnlocked( Badge badge ) { + return global.contains( badge ); + } + + public static HashSet allUnlocked(){ + loadGlobal(); + return new HashSet<>(global); + } + + public static void disown( Badge badge ) { + loadGlobal(); + global.remove( badge ); + saveNeeded = true; + } + + public static void addGlobal( Badge badge ){ + if (!global.contains(badge)){ + global.add( badge ); + saveNeeded = true; + } + } + + public static List filtered( boolean global ) { + + HashSet filtered = new HashSet<>(global ? PaswordBadges.global : PaswordBadges.local); + + Iterator iterator = filtered.iterator(); + while (iterator.hasNext()) { + Badge badge = iterator.next(); + if ((!global && badge.meta) || badge.image == -1) { + iterator.remove(); + } + } + + ArrayList list = new ArrayList<>(filtered); + Collections.sort( list ); + + return list; + } + + private static void leaveBest( HashSet list, Badge...badges ) { + for (int i=badges.length-1; i > 0; i--) { + if (list.contains( badges[i])) { + for (int j=0; j < i; j++) { + list.remove( badges[j] ); + } + break; + } + } + } +} \ No newline at end of file diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/hero/Hero.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/hero/Hero.java index dcb3cae41..98626732f 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/hero/Hero.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/hero/Hero.java @@ -39,6 +39,7 @@ import com.shatteredpixel.shatteredpixeldungeon.Challenges; import com.shatteredpixel.shatteredpixeldungeon.Conducts; import com.shatteredpixel.shatteredpixeldungeon.Dungeon; import com.shatteredpixel.shatteredpixeldungeon.GamesInProgress; +import com.shatteredpixel.shatteredpixeldungeon.PaswordBadges; import com.shatteredpixel.shatteredpixeldungeon.SPDSettings; import com.shatteredpixel.shatteredpixeldungeon.ShatteredPixelDungeon; import com.shatteredpixel.shatteredpixeldungeon.Statistics; @@ -1323,7 +1324,7 @@ public class Hero extends Char { if (Dungeon.depth == 0) { if (belongings.getItem(SakaFishSketon.class) != null) { - Badges.REHOMESKY(); + PaswordBadges.REHOMESKY(); } if (belongings.getItem(Amulet.class) == null) { diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/hero/HeroClass.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/hero/HeroClass.java index a70928042..37af73d67 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/hero/HeroClass.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/hero/HeroClass.java @@ -26,6 +26,7 @@ import com.shatteredpixel.shatteredpixeldungeon.Badges; import com.shatteredpixel.shatteredpixeldungeon.Challenges; import com.shatteredpixel.shatteredpixeldungeon.Conducts; import com.shatteredpixel.shatteredpixeldungeon.Dungeon; +import com.shatteredpixel.shatteredpixeldungeon.PaswordBadges; import com.shatteredpixel.shatteredpixeldungeon.QuickSlot; import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Buff; import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.ChampionHero; @@ -61,7 +62,6 @@ import com.shatteredpixel.shatteredpixeldungeon.items.armor.custom.AncityArmor; import com.shatteredpixel.shatteredpixeldungeon.items.artifacts.ChaliceOfBlood; import com.shatteredpixel.shatteredpixeldungeon.items.artifacts.CloakOfShadows; import com.shatteredpixel.shatteredpixeldungeon.items.artifacts.TalismanOfForesight; -import com.shatteredpixel.shatteredpixeldungeon.items.artifacts.TimekeepersHourglass; import com.shatteredpixel.shatteredpixeldungeon.items.artifacts.WraithAmulet; import com.shatteredpixel.shatteredpixeldungeon.items.bags.BookBag; import com.shatteredpixel.shatteredpixeldungeon.items.bags.HerbBag; @@ -69,7 +69,6 @@ import com.shatteredpixel.shatteredpixeldungeon.items.bags.KingBag; import com.shatteredpixel.shatteredpixeldungeon.items.bags.VelvetPouch; import com.shatteredpixel.shatteredpixeldungeon.items.books.bookslist.BrokenBooks; import com.shatteredpixel.shatteredpixeldungeon.items.books.bookslist.DimandBook; -import com.shatteredpixel.shatteredpixeldungeon.items.books.bookslist.IceCityBooks; import com.shatteredpixel.shatteredpixeldungeon.items.books.bookslist.TestBooks; import com.shatteredpixel.shatteredpixeldungeon.items.books.bookslist.YellowSunBooks; import com.shatteredpixel.shatteredpixeldungeon.items.food.Food; @@ -114,13 +113,17 @@ import com.shatteredpixel.shatteredpixeldungeon.items.weapon.melee.Sai; import com.shatteredpixel.shatteredpixeldungeon.items.weapon.melee.SkyShield; import com.shatteredpixel.shatteredpixeldungeon.items.weapon.melee.WashCrime; import com.shatteredpixel.shatteredpixeldungeon.items.weapon.melee.WornShortsword; +import com.shatteredpixel.shatteredpixeldungeon.items.weapon.melee.legend.DiedCrossBow; import com.shatteredpixel.shatteredpixeldungeon.items.weapon.missiles.ThrowingKnife; import com.shatteredpixel.shatteredpixeldungeon.items.weapon.missiles.ThrowingStone; +import com.shatteredpixel.shatteredpixeldungeon.items.weapon.missiles.darts.HaloDart; import com.shatteredpixel.shatteredpixeldungeon.messages.Messages; import com.shatteredpixel.shatteredpixeldungeon.plants.AikeLaier; import com.shatteredpixel.shatteredpixeldungeon.plants.Firebloom; import com.shatteredpixel.shatteredpixeldungeon.plants.SkyBlueFireBloom; +import java.util.List; + public enum HeroClass { WARRIOR( HeroSubClass.BERSERKER, HeroSubClass.GLADIATOR ), @@ -151,7 +154,9 @@ public enum HeroClass { Dungeon.gold += 320; } - if ( Badges.isUnlocked(Badges.Badge.EXSG)){ + PaswordBadges.loadGlobal(); + List passwordbadges = PaswordBadges.filtered( true ); + if(passwordbadges.contains(PaswordBadges.Badge.EXSG)){ Dungeon.gold += 720; } @@ -165,12 +170,10 @@ public enum HeroClass { new LockSword().quantity(1).identify().collect(); new IceFishSword().quantity(1).identify().collect(); new PotionOfInvisibility().quantity(45).identify().collect(); - //new CommRelay().quantity(1).identify().collect(); new AncityArmor().quantity(1).identify().collect(); new TengusMask().quantity(1).identify().collect(); new RingOfWealth().quantity(1).identify().collect(); - new TimekeepersHourglass().quantity(1).identify().collect(); - //new WandOfAnmy().quantity(1).identify().collect(); + new DiedCrossBow().quantity(1).identify().collect(); Buff.affect(hero, ChampionHero.AntiMagic.class, 50000f); new WraithAmulet().quantity(1).identify().collect(); new BloodthirstyThorn().quantity(1).identify().collect(); @@ -197,7 +200,6 @@ public enum HeroClass { new SkyBlueFireBloom.Seed().quantity(51).identify().collect(); new AikeLaier.Seed().quantity(51).identify().collect(); new Firebloom.Seed().quantity(15).identify().collect(); - new WandOfRegrowth().quantity(1).identify().collect(); new WandOfFrost().quantity(1).identify().collect(); new MagicalInfusion().quantity(1).identify().collect(); @@ -220,7 +222,7 @@ public enum HeroClass { new PotionOfLiquidFlameX().quantity(100).identify().collect(); new YellowSunBooks().quantity(1).identify().collect(); new BrokenBooks().quantity(12).identify().collect(); - new IceCityBooks().quantity(12).identify().collect(); + new HaloDart().quantity(100).identify().collect(); new ScrollOfFlameCursed().quantity(44).identify().collect(); new MailArmor().quantity(1).identify().collect(); diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/mobs/Bestiary.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/mobs/Bestiary.java index b1759f4fe..993edca9d 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/mobs/Bestiary.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/mobs/Bestiary.java @@ -25,7 +25,6 @@ import static com.shatteredpixel.shatteredpixeldungeon.Challenges.RLPT; import com.shatteredpixel.shatteredpixeldungeon.Conducts; import com.shatteredpixel.shatteredpixeldungeon.Dungeon; -import com.shatteredpixel.shatteredpixeldungeon.actors.mobs.spical.GnollHero; import com.watabou.utils.Random; import java.util.ArrayList; @@ -48,7 +47,7 @@ public class Bestiary { case 1: //3x rat, 1x snake return new ArrayList<>(Arrays.asList( - GnollHero.class, Rat.class, + Rat.class, Rat.class, Rat.class)); case 2: return new ArrayList<>(Arrays.asList(Rat.class, diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/mobs/YogDzewa.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/mobs/YogDzewa.java index 4b1b58ff5..f9a9a2f9e 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/mobs/YogDzewa.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/mobs/YogDzewa.java @@ -9,6 +9,7 @@ import com.shatteredpixel.shatteredpixeldungeon.Assets; import com.shatteredpixel.shatteredpixeldungeon.Badges; import com.shatteredpixel.shatteredpixeldungeon.Challenges; import com.shatteredpixel.shatteredpixeldungeon.Dungeon; +import com.shatteredpixel.shatteredpixeldungeon.PaswordBadges; import com.shatteredpixel.shatteredpixeldungeon.Statistics; import com.shatteredpixel.shatteredpixeldungeon.actors.Actor; import com.shatteredpixel.shatteredpixeldungeon.actors.Char; @@ -493,11 +494,11 @@ public class YogDzewa extends Mob { } if(Dungeon.isChallenged(SBSG)){ - Badges.BIGX(); + PaswordBadges.BIGX(); } if(Dungeon.isChallenged(EXSG)){ - Badges.EXSG(); + PaswordBadges.EXSG(); } updateVisibility(Dungeon.level); diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/mobs/bosses/DMZERO.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/mobs/bosses/DMZERO.java index b2eea127b..4744a2390 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/mobs/bosses/DMZERO.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/mobs/bosses/DMZERO.java @@ -3,8 +3,8 @@ package com.shatteredpixel.shatteredpixeldungeon.actors.mobs.bosses; import static com.shatteredpixel.shatteredpixeldungeon.Dungeon.hero; import com.shatteredpixel.shatteredpixeldungeon.Assets; -import com.shatteredpixel.shatteredpixeldungeon.Badges; import com.shatteredpixel.shatteredpixeldungeon.Dungeon; +import com.shatteredpixel.shatteredpixeldungeon.PaswordBadges; import com.shatteredpixel.shatteredpixeldungeon.Statistics; import com.shatteredpixel.shatteredpixeldungeon.actors.Actor; import com.shatteredpixel.shatteredpixeldungeon.actors.Char; @@ -382,7 +382,7 @@ public class DMZERO extends Mob GameScene.add(((Mob) (obj))); Actor.addDelayed(new Pushing(((Char) (obj)), pos, ((NullDiedTO) (obj)).pos), -1F); Statistics.bossScores[4] += 3000; - Badges.BOSSRUSH(); + PaswordBadges.BOSSRUSH(); yell( Messages.get(this, "defeated") ); } diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/mobs/bosses/DiamondKnight.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/mobs/bosses/DiamondKnight.java index 6aed0f5b2..1e8c16cf6 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/mobs/bosses/DiamondKnight.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/mobs/bosses/DiamondKnight.java @@ -27,6 +27,7 @@ import static com.shatteredpixel.shatteredpixeldungeon.levels.Level.set; import com.shatteredpixel.shatteredpixeldungeon.Assets; import com.shatteredpixel.shatteredpixeldungeon.Badges; import com.shatteredpixel.shatteredpixeldungeon.Dungeon; +import com.shatteredpixel.shatteredpixeldungeon.PaswordBadges; import com.shatteredpixel.shatteredpixeldungeon.ShatteredPixelDungeon; import com.shatteredpixel.shatteredpixeldungeon.Statistics; import com.shatteredpixel.shatteredpixeldungeon.actors.Actor; @@ -278,7 +279,7 @@ public class DiamondKnight extends Boss { Badges.KILL_SMK(); if(Statistics.dimandchestmazeCollected>=3){ - Badges.KILL_OMP(); + PaswordBadges.validateOMP(); Statistics.bossScores[1] += 1000; } diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/mobs/bosses/DwarfMaster.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/mobs/bosses/DwarfMaster.java index 64b74b276..27b4c2583 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/mobs/bosses/DwarfMaster.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/mobs/bosses/DwarfMaster.java @@ -6,6 +6,7 @@ import com.shatteredpixel.shatteredpixeldungeon.Assets; import com.shatteredpixel.shatteredpixeldungeon.Badges; import com.shatteredpixel.shatteredpixeldungeon.Conducts; import com.shatteredpixel.shatteredpixeldungeon.Dungeon; +import com.shatteredpixel.shatteredpixeldungeon.PaswordBadges; import com.shatteredpixel.shatteredpixeldungeon.Statistics; import com.shatteredpixel.shatteredpixeldungeon.actors.Actor; import com.shatteredpixel.shatteredpixeldungeon.actors.Boss; @@ -1642,7 +1643,7 @@ public class DwarfMaster extends Boss { Dungeon.level.drop(new KingsCrown(), pos).sprite.drop(); Dungeon.level.drop(new PotionOfHealing().quantity(Random.NormalIntRange(2,4)), pos).sprite.drop(); Dungeon.level.drop(new MeatPie().quantity(Random.NormalIntRange(1,2)), pos).sprite.drop(); - Badges.KILLDWARF(); + PaswordBadges.KILLDWARF(); Badges.validateBossSlain(); yell( Messages.get(this, "defeated") ); diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/mobs/bosses/FireMagicDied.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/mobs/bosses/FireMagicDied.java index b27d4f0b6..d32750d86 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/mobs/bosses/FireMagicDied.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/mobs/bosses/FireMagicDied.java @@ -7,9 +7,9 @@ import static com.shatteredpixel.shatteredpixeldungeon.levels.ShopBossLevel.FALS import static com.shatteredpixel.shatteredpixeldungeon.levels.ShopBossLevel.TRUEPosition; import com.shatteredpixel.shatteredpixeldungeon.Assets; -import com.shatteredpixel.shatteredpixeldungeon.Badges; import com.shatteredpixel.shatteredpixeldungeon.Conducts; import com.shatteredpixel.shatteredpixeldungeon.Dungeon; +import com.shatteredpixel.shatteredpixeldungeon.PaswordBadges; import com.shatteredpixel.shatteredpixeldungeon.Statistics; import com.shatteredpixel.shatteredpixeldungeon.actors.Actor; import com.shatteredpixel.shatteredpixeldungeon.actors.Char; @@ -763,7 +763,7 @@ public class FireMagicDied extends Mob implements Callback { GameScene.bossSlain(); - Badges.KILLFIREGIRL(); + PaswordBadges.KILLFIREGIRL(); yell( Messages.get(this, "defeated",Dungeon.hero.name()) ); } diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/mobs/bosses/SakaFishBoss.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/mobs/bosses/SakaFishBoss.java index 96834c197..e28581468 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/mobs/bosses/SakaFishBoss.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/mobs/bosses/SakaFishBoss.java @@ -3,8 +3,8 @@ package com.shatteredpixel.shatteredpixeldungeon.actors.mobs.bosses; import static com.shatteredpixel.shatteredpixeldungeon.Dungeon.hero; import com.shatteredpixel.shatteredpixeldungeon.Assets; -import com.shatteredpixel.shatteredpixeldungeon.Badges; import com.shatteredpixel.shatteredpixeldungeon.Dungeon; +import com.shatteredpixel.shatteredpixeldungeon.PaswordBadges; import com.shatteredpixel.shatteredpixeldungeon.actors.Actor; import com.shatteredpixel.shatteredpixeldungeon.actors.Boss; import com.shatteredpixel.shatteredpixeldungeon.actors.Char; @@ -279,7 +279,7 @@ public class SakaFishBoss extends Boss { Dungeon.level.drop( new SakaFishSketon(), pos ).sprite.drop(); Dungeon.level.drop( new WaterSoul(), pos ).sprite.drop(); - Badges.KILLSAKA(); + PaswordBadges.KILLSAKA(); yell( Messages.get(this, "defeated") ); diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/effects/PasswordBadgeBanner.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/effects/PasswordBadgeBanner.java new file mode 100644 index 000000000..b15314519 --- /dev/null +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/effects/PasswordBadgeBanner.java @@ -0,0 +1,198 @@ +package com.shatteredpixel.shatteredpixeldungeon.effects; + +import com.shatteredpixel.shatteredpixeldungeon.Assets; +import com.shatteredpixel.shatteredpixeldungeon.Badges; +import com.watabou.gltextures.SmartTexture; +import com.watabou.gltextures.TextureCache; +import com.watabou.noosa.Game; +import com.watabou.noosa.Image; +import com.watabou.noosa.TextureFilm; +import com.watabou.noosa.audio.Sample; +import com.watabou.utils.Point; +import com.watabou.utils.PointF; + +import java.util.ArrayList; +import java.util.HashMap; + +public class PasswordBadgeBanner extends Image { + + private enum State { + FADE_IN, STATIC, FADE_OUT + } + private PasswordBadgeBanner.State state; + + public static final float DEFAULT_SCALE = 3; + public static final int SIZE = 16; + + private static final float FADE_IN_TIME = 0.25f; + private static final float STATIC_TIME = 1f; + private static final float FADE_OUT_TIME = 1.75f; + + private int index; + private float time; + + private static TextureFilm atlas; + + public static ArrayList showing = new ArrayList<>(); + + private PasswordBadgeBanner( int index ) { + + super( Assets.Interfaces.PROBADGES ); + + if (atlas == null) { + atlas = new TextureFilm( texture, SIZE, SIZE ); + } + + setup(index); + } + + public void setup( int index ){ + this.index = index; + + frame( atlas.get( index ) ); + origin.set( width / 2, height / 2 ); + + alpha( 0 ); + scale.set( 2 * DEFAULT_SCALE ); + + state = PasswordBadgeBanner.State.FADE_IN; + time = FADE_IN_TIME; + + Sample.INSTANCE.play( Assets.Sounds.BADGE ); + } + + @Override + public void update() { + super.update(); + + time -= Game.elapsed; + if (time >= 0) { + + switch (state) { + case FADE_IN: + float p = time / FADE_IN_TIME; + scale.set( (1 + p) * DEFAULT_SCALE ); + alpha( 1 - p ); + break; + case STATIC: + break; + case FADE_OUT: + alpha( time / FADE_OUT_TIME ); + break; + } + + } else { + + switch (state) { + case FADE_IN: + time = STATIC_TIME; + state = PasswordBadgeBanner.State.STATIC; + scale.set( DEFAULT_SCALE ); + alpha( 1 ); + highlight( this, index ); + break; + case STATIC: + time = FADE_OUT_TIME; + state = PasswordBadgeBanner.State.FADE_OUT; + break; + case FADE_OUT: + killAndErase(); + break; + } + + } + } + + @Override + public void kill() { + showing.remove(this); + super.kill(); + } + + @Override + public void destroy() { + showing.remove(this); + super.destroy(); + } + + //map to cache highlight positions so we don't have to keep looking at texture pixels + private static HashMap highlightPositions = new HashMap<>(); + + //we also hardcode any special cases + static { + highlightPositions.put(Badges.Badge.MASTERY_COMBO.image, new Point(3, 7)); + } + + //adds a shine to an appropriate pixel on a badge + public static void highlight(Image image, int index ) { + + PointF p = new PointF(); + + if (highlightPositions.containsKey(index)){ + p.x = highlightPositions.get(index).x * image.scale.x; + p.y = highlightPositions.get(index).y * image.scale.y; + } else { + + SmartTexture tx = TextureCache.get(Assets.Interfaces.PROBADGES); + + int size = 16; + + int cols = tx.width / size; + int row = index / cols; + int col = index % cols; + + int x = 3; + int y = 4; + int bgColor = tx.getPixel(col * size + x, row * size + y); + int curColor = 0; + + for (x = 3; x <= 12; x++) { + curColor = tx.getPixel(col * size + x, row * size + y); + if (curColor != bgColor) break; + } + + if (curColor == bgColor) { + y++; + for (x = 3; x <= 12; x++) { + curColor = tx.getPixel(col * size + x, row * size + y); + if (curColor != bgColor) break; + } + } + + p.x = x * image.scale.x; + p.y = y * image.scale.y; + + highlightPositions.put(index, new Point(x, y)); + } + + p.offset( + -image.origin.x * (image.scale.x - 1), + -image.origin.y * (image.scale.y - 1) ); + p.offset( image.point() ); + + Speck star = new Speck(); + star.reset( 0, p.x, p.y, Speck.DISCOVER ); + star.camera = image.camera(); + image.parent.add( star ); + } + + public static PasswordBadgeBanner show( int image ) { + PasswordBadgeBanner banner = new PasswordBadgeBanner(image); + showing.add(banner); + return banner; + } + + public static boolean isShowingBadges(){ + return !showing.isEmpty(); + } + + public static Image image( int index ) { + Image image = new Image( Assets.Interfaces.PROBADGES ); + if (atlas == null) { + atlas = new TextureFilm( image.texture, 16, 16 ); + } + image.frame( atlas.get( index ) ); + return image; + } +} + diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/Amulet.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/Amulet.java index 9292708f8..a8c4bc8e1 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/Amulet.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/Amulet.java @@ -25,6 +25,7 @@ import com.shatteredpixel.shatteredpixeldungeon.Badges; import com.shatteredpixel.shatteredpixeldungeon.Challenges; import com.shatteredpixel.shatteredpixeldungeon.Conducts; import com.shatteredpixel.shatteredpixeldungeon.Dungeon; +import com.shatteredpixel.shatteredpixeldungeon.PaswordBadges; import com.shatteredpixel.shatteredpixeldungeon.ShatteredPixelDungeon; import com.shatteredpixel.shatteredpixeldungeon.Statistics; import com.shatteredpixel.shatteredpixeldungeon.actors.Actor; @@ -111,6 +112,7 @@ public class Amulet extends Item { public void afterCreate() { Badges.validateVictory(); Badges.validateChampion(Challenges.activeChallenges()); + PaswordBadges.ALLCS(Challenges.activeChallenges()); Badges.saveGlobal(); } }); diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/Generator.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/Generator.java index 2521536bb..4791e3441 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/Generator.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/Generator.java @@ -154,6 +154,7 @@ import com.shatteredpixel.shatteredpixeldungeon.items.weapon.melee.WarHammer; import com.shatteredpixel.shatteredpixeldungeon.items.weapon.melee.WashCrime; import com.shatteredpixel.shatteredpixeldungeon.items.weapon.melee.Whip; import com.shatteredpixel.shatteredpixeldungeon.items.weapon.melee.WornShortsword; +import com.shatteredpixel.shatteredpixeldungeon.items.weapon.melee.legend.DiedCrossBow; import com.shatteredpixel.shatteredpixeldungeon.items.weapon.missiles.Bolas; import com.shatteredpixel.shatteredpixeldungeon.items.weapon.missiles.FishingSpear; import com.shatteredpixel.shatteredpixeldungeon.items.weapon.missiles.ForceCube; @@ -211,7 +212,7 @@ public class Generator { return randomWeapon(Dungeon.depth / 5, useDefaults); } - public enum Category { + public enum Category { WEAPON ( 2, 2, MeleeWeapon.class), WEP_T1 ( 0, 0, MeleeWeapon.class), WEP_T2 ( 0, 0, MeleeWeapon.class), @@ -219,30 +220,30 @@ public class Generator { WEP_T4 ( 0, 0, MeleeWeapon.class), WEP_T5 ( 0, 0, MeleeWeapon.class), WEP_T6 ( 0, 0, MeleeWeapon.class), - + ARMOR ( 2, 1, Armor.class ), - + MISSILE ( 1, 2, MissileWeapon.class ), MIS_T1 ( 0, 0, MissileWeapon.class ), MIS_T2 ( 0, 0, MissileWeapon.class ), MIS_T3 ( 0, 0, MissileWeapon.class ), MIS_T4 ( 0, 0, MissileWeapon.class ), MIS_T5 ( 0, 0, MissileWeapon.class ), - + WAND ( 1, 1, Wand.class ), RING ( 1, 0, Ring.class ), ARTIFACT( 0, 1, Artifact.class), - + FOOD ( 0, 0, Food.class ), - + POTION ( 8, 8, Potion.class ), SEED ( 1, 1, Plant.Seed.class ), - + SCROLL ( 8, 8, Scroll.class ), STONE ( 1, 1, Runestone.class), - + GOLD ( 10, 10, Gold.class ); - + public Class[] classes; //some item types use a deck-based system, where the probs decrement as items are picked @@ -257,13 +258,13 @@ public class Generator { public float firstProb; public float secondProb; public Class superClass; - + private Category( float firstProb, float secondProb, Class superClass ) { this.firstProb = firstProb; this.secondProb = secondProb; this.superClass = superClass; } - + public static int order( Item item ) { for (int i=0; i < values().length; i++) { if (values()[i].superClass.isInstance( item )) { @@ -421,17 +422,21 @@ public class Generator { Glaive.class, Greataxe.class, Greatshield.class, - WashCrime.class + WashCrime.class, + + + //传奇武器 + DiedCrossBow.class, }; - WEP_T5.probs = new float[]{ 3, 3, 3, 3, 3, 3,3}; + WEP_T5.probs = new float[]{ 3, 3, 3, 3, 3, 3,3,1}; WEP_T6.classes = new Class[]{ IceFishSword.class, IceDewVialSword.class }; WEP_T6.probs = new float[]{ 1,0 }; - + //see Generator.randomArmor ARMOR.classes = new Class[]{ ClothArmor.class, @@ -441,38 +446,38 @@ public class Generator { PlateArmor.class, LamellarArmor.class}; ARMOR.probs = new float[]{ 0, 0, 0, 0, 0, 0 }; - + //see Generator.randomMissile MISSILE.classes = new Class[]{}; MISSILE.probs = new float[]{}; - + MIS_T1.classes = new Class[]{ ThrowingStone.class, ThrowingKnife.class }; MIS_T1.probs = new float[]{ 6, 5 }; - + MIS_T2.classes = new Class[]{ FishingSpear.class, ThrowingClub.class, Shuriken.class }; MIS_T2.probs = new float[]{ 6, 5, 4 }; - + MIS_T3.classes = new Class[]{ ThrowingSpear.class, Kunai.class, Bolas.class }; MIS_T3.probs = new float[]{ 6, 5, 4 }; - + MIS_T4.classes = new Class[]{ Javelin.class, Tomahawk.class, HeavyBoomerang.class }; MIS_T4.probs = new float[]{ 6, 5, 4 }; - + MIS_T5.classes = new Class[]{ Trident.class, ThrowingHammer.class, @@ -491,10 +496,10 @@ public class Generator { RiceDumplings.RiceDumplingsBottle.class, RiceDumplings.RiceDumplingsRed.class, RiceDumplings.RiceDumplingsOrange.class, - RiceDumplings.RiceDumplingsPink.class, + RiceDumplings.RiceDumplingsPink.class, }; FOOD.probs = new float[]{ 4, 1, 0, isDWJ,isDWJ,isDWJ,isDWJ,isDWJ }; - + RING.classes = new Class[]{ RingOfAccuracy.class, RingOfEvasion.class, @@ -508,7 +513,7 @@ public class Generator { RingOfTenacity.class, RingOfWealth.class}; RING.probs = new float[]{ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 }; - + ARTIFACT.classes = new Class[]{ CapeOfThorns.class, ChaliceOfBlood.class, @@ -558,7 +563,7 @@ public class Generator { public static void reset(Category cat){ if (cat.defaultProbs != null) cat.probs = cat.defaultProbs.clone(); } - + public static Item random() { Category cat = Random.chances( categoryProbs ); if (cat == null){ @@ -569,7 +574,7 @@ public class Generator { categoryProbs.put( cat, categoryProbs.get( cat ) - 1); return random( cat ); } - + public static Item random( Category cat ) { switch (cat) { case ARMOR: @@ -601,7 +606,7 @@ public class Generator { return ((Item) Reflection.newInstance(cat.classes[Random.chances(cat.defaultProbs)])).random(); } } - + public static Item random( Class cl ) { return Reflection.newInstance(cl).random(); } @@ -609,11 +614,11 @@ public class Generator { public static Armor randomArmor(){ return randomArmor((Dungeon.depth + 1) / 3); } - + public static Armor randomArmor(int floorSet) { floorSet = (int)GameMath.gate(0, floorSet, floorSetTierProbs.length-1); - + Armor a = (Armor)Reflection.newInstance(Category.ARMOR.classes[Random.chances(floorSetTierProbs[floorSet])]); a.random(); return a; @@ -631,17 +636,17 @@ public class Generator { public static MeleeWeapon randomWeapon(){ return randomWeapon(Dungeon.depth / 5); } - + public static MeleeWeapon randomWeapon(int floorSet) { floorSet = (int)GameMath.gate(0, floorSet, floorSetTierProbs.length-1); - + Category c = wepTiers[Random.chances(floorSetTierProbs[floorSet])]; MeleeWeapon w = (MeleeWeapon)Reflection.newInstance(c.classes[Random.chances(c.probs)]); w.random(); return w; } - + public static final Category[] misTiers = new Category[]{ Category.MIS_T1, Category.MIS_T2, @@ -649,15 +654,15 @@ public class Generator { Category.MIS_T4, Category.MIS_T5 }; - + public static MissileWeapon randomMissile(){ return randomMissile(Dungeon.depth / 5); } - + public static MissileWeapon randomMissile(int floorSet) { - + floorSet = (int)GameMath.gate(0, floorSet, floorSetTierProbs.length-1); - + Category c = misTiers[Random.chances(floorSetTierProbs[floorSet])]; MissileWeapon w = (MissileWeapon)Reflection.newInstance(c.classes[Random.chances(c.probs)]); w.random(); @@ -694,7 +699,7 @@ public class Generator { private static final String FIRST_DECK = "first_deck"; private static final String GENERAL_PROBS = "general_probs"; private static final String CATEGORY_PROBS = "_probs"; - + public static void storeInBundle(Bundle bundle) { bundle.put(FIRST_DECK, usingFirstDeck); @@ -741,6 +746,6 @@ public class Generator { } } } - + } } diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/Item.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/Item.java index ac7ac94f5..c0dac9182 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/Item.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/Item.java @@ -76,7 +76,7 @@ public class Item implements Bundlable { public int flasks; - protected int quantity = 1; + public int quantity = 1; public boolean dropsDownHeap = false; public int level = 0; diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/MainBooks.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/MainBooks.java index 3c0b00647..734f844e2 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/MainBooks.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/MainBooks.java @@ -4,7 +4,6 @@ import com.shatteredpixel.shatteredpixeldungeon.messages.Messages; public class MainBooks extends Item { //extends 相当于 copyfrom,但不同的是 它是一种继承自己 - @Override public String info() { return author; @@ -13,7 +12,7 @@ public class MainBooks extends Item { public int value() { return 20 * quantity; } - public String author = Messages.get(MainBooks.class, "mustread"); + public String author = Messages.get(MainBooks.class, "desc"); public String authorx = Messages.get(this, "author"); } diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/artifacts/Artifact.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/artifacts/Artifact.java index d2107958f..8ba3c04bb 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/artifacts/Artifact.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/artifacts/Artifact.java @@ -154,7 +154,7 @@ public class Artifact extends KindofMisc { //display the current cooldown if (cooldown != 0) - return Messages.format( "%d", cooldown ); + return Messages.format( "CD:%d", cooldown ); //display as percent if (chargeCap == 100) diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/books/Books.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/books/Books.java index f71391375..15187a11e 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/books/Books.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/books/Books.java @@ -5,20 +5,13 @@ import com.shatteredpixel.shatteredpixeldungeon.Statistics; import com.shatteredpixel.shatteredpixeldungeon.actors.hero.Hero; import com.shatteredpixel.shatteredpixeldungeon.items.MainBooks; import com.shatteredpixel.shatteredpixeldungeon.messages.Messages; -import com.shatteredpixel.shatteredpixeldungeon.scenes.GameScene; import com.shatteredpixel.shatteredpixeldungeon.sprites.ItemSprite; -import com.shatteredpixel.shatteredpixeldungeon.utils.GLog; -import com.shatteredpixel.shatteredpixeldungeon.windows.WndBook; import com.watabou.noosa.particles.Emitter; -import com.watabou.utils.Bundle; import java.util.ArrayList; public class Books extends MainBooks { - //每本书的计数只能计算一次,避免玩家重复阅读同一本书刷成就。 - public boolean readOnly = false; - { defaultAction = Read; stackable = true; @@ -64,29 +57,10 @@ public class Books extends MainBooks { @Override public void execute(final Hero hero, String action ) { super.execute(hero, action); - if (action.equals( Read ) && quantity>1) { - if(!readOnly){ + if (action.equals( Read )) { Statistics.readBooks++; Badges.valiReadBooks(); - GameScene.show(new WndBook(this)); - readOnly = true; - } else { - GLog.w(Messages.get(MainBooks.class, "readed")); - } - } else { - GLog.w( Messages.get(MainBooks.class, "no") ); } } - public void restoreFromBundle(Bundle bundle) { - super.restoreFromBundle(bundle); - this.readOnly = bundle.getBoolean("readOnly"); - } - - public void storeInBundle(Bundle bundle) { - super.storeInBundle(bundle); - bundle.put("readOnly", this.readOnly); - } - - } diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/weapon/melee/LifeTreeSword.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/weapon/melee/LifeTreeSword.java index 2a360fd58..d3279dc9a 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/weapon/melee/LifeTreeSword.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/weapon/melee/LifeTreeSword.java @@ -51,7 +51,7 @@ import com.watabou.utils.Random; import java.util.ArrayList; public class LifeTreeSword extends MeleeWeapon { - + private int getFood; { image = ItemSpriteSheet.LifeTreeSword; hitSoundPitch = 1f; @@ -133,7 +133,7 @@ public class LifeTreeSword extends MeleeWeapon { return super.proc(attacker, defender, damage); } - private int getFood; + public void restoreFromBundle(Bundle bundle) { super.restoreFromBundle(bundle); @@ -159,6 +159,9 @@ public class LifeTreeSword extends MeleeWeapon { spriteClass = CrivusFruitsRedSprites.class; alignment = Alignment.ALLY; + + HT = HP = 10+level(); + state = WANDERING = new Waiting(); properties.add(Property.IMMOVABLE); @@ -171,12 +174,12 @@ public class LifeTreeSword extends MeleeWeapon { @Override public int damageRoll() { - return Random.NormalIntRange( 5, 8 ); + return Random.NormalIntRange( 5+level(), 8+level() ); } @Override public int attackSkill( Char target ) { - return 6; + return 6+level(); } @Override diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/weapon/melee/legend/DiedCrossBow.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/weapon/melee/legend/DiedCrossBow.java new file mode 100644 index 000000000..6c20afd1a --- /dev/null +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/weapon/melee/legend/DiedCrossBow.java @@ -0,0 +1,263 @@ +package com.shatteredpixel.shatteredpixeldungeon.items.weapon.melee.legend; + +import com.shatteredpixel.shatteredpixeldungeon.Assets; +import com.shatteredpixel.shatteredpixeldungeon.Dungeon; +import com.shatteredpixel.shatteredpixeldungeon.actors.Actor; +import com.shatteredpixel.shatteredpixeldungeon.actors.Char; +import com.shatteredpixel.shatteredpixeldungeon.actors.hero.Hero; +import com.shatteredpixel.shatteredpixeldungeon.effects.CellEmitter; +import com.shatteredpixel.shatteredpixeldungeon.effects.Splash; +import com.shatteredpixel.shatteredpixeldungeon.effects.particles.BlastParticle; +import com.shatteredpixel.shatteredpixeldungeon.effects.particles.SmokeParticle; +import com.shatteredpixel.shatteredpixeldungeon.items.bombs.Bomb; +import com.shatteredpixel.shatteredpixeldungeon.items.weapon.SpiritBow; +import com.shatteredpixel.shatteredpixeldungeon.items.weapon.missiles.darts.Dart; +import com.shatteredpixel.shatteredpixeldungeon.items.weapon.missiles.darts.TippedDart; +import com.shatteredpixel.shatteredpixeldungeon.mechanics.Ballistica; +import com.shatteredpixel.shatteredpixeldungeon.messages.Messages; +import com.shatteredpixel.shatteredpixeldungeon.scenes.CellSelector; +import com.shatteredpixel.shatteredpixeldungeon.scenes.GameScene; +import com.shatteredpixel.shatteredpixeldungeon.sprites.ItemSprite; +import com.shatteredpixel.shatteredpixeldungeon.sprites.ItemSpriteSheet; +import com.shatteredpixel.shatteredpixeldungeon.ui.QuickSlotButton; +import com.shatteredpixel.shatteredpixeldungeon.ui.Window; +import com.shatteredpixel.shatteredpixeldungeon.utils.GLog; +import com.watabou.noosa.audio.Sample; +import com.watabou.noosa.particles.Emitter; +import com.watabou.utils.PathFinder; +import com.watabou.utils.Random; + +import java.util.ArrayList; + +public class DiedCrossBow extends LegendWeapon { + + { + image = ItemSpriteSheet.DIEDCROSSBOW; + tier = 5; + legend = 3; + baseMin = 7; + baseMax = 20; + min = Lmin(); + max = Lmax(); + usesTargeting = true; + } + + @Override + protected LegendWeapon.LegendWeaponBuff passiveBuff() { + return new DiedCrossBow.Recharge(); + } + + public class Recharge extends LegendWeapon.LegendWeaponBuff { + @Override + public boolean act() { + if (cooldown < 0 ) { + cooldown = 0; + } + if (cooldown > 0) + cooldown--; + updateQuickslot(); + spend(TICK); + return true; + } + } + + @Override + public String status() { + + //display the current cooldown + if (cooldown != 0) + return Messages.format( "CD:%d", cooldown ); + + + Dart missile = Dungeon.hero.belongings.getItem(Dart.class); + if(missile != null){ + return ""+missile.quantity()/5; + } else { + return null; + } + + } + + + @Override + public void execute(Hero hero, String action ) { + + super.execute( hero, action ); + Dart missile = Dungeon.hero.belongings.getItem(Dart.class); + if (action.equals( AC_KING )) { + + if (!isEquipped(hero)){ + GLog.i( Messages.get(this, "no_equip") ); + } else if(cooldown == 0) { + if (missile != null) + if (missile.quantity() > 5) { + curUser = hero; + curItem = this; + GameScene.selectCell(bomb); + } else { + GLog.w(Messages.get(this, "no_king")); + } + } else { + GLog.w(Messages.get(this, "no_cooldown")); + } + } + + } + + @Override + + public int targetingPos(Hero user, int dst) { + return knockArrow().targetingPos(user, dst); + } + + private CellSelector.Listener bomb = new CellSelector.Listener() { + @Override + public void onSelect( Integer target ) { + if (target != null) { + final Ballistica shot = new Ballistica( curUser.pos, target, target); + int cell = shot.collisionPos; + Dart missile = Dungeon.hero.belongings.getItem(Dart.class); + missile.quantity -= 5; + if (Actor.findChar(target) != null) { + QuickSlotButton.target(Actor.findChar(target)); + } else { + QuickSlotButton.target(Actor.findChar(cell)); + } + cooldown = 60-level()*2; + knockArrow().cast(curUser, target-2); + knockArrow().cast(curUser, target); + knockArrow().cast(curUser, target+2); + QuickSlotButton.target(Actor.findChar(target)); + + } + } + @Override + public String prompt() { + return Messages.get(SpiritBow.class, "prompt"); + } + }; + + public DiedCrossBow.BombArrow knockArrow(){ + return new BombArrow(); + } + + public static class BombArrow extends TippedDart { + @Override + public Emitter emitter() { + Emitter emitter = new Emitter(); + emitter.pos(12.5f, 3.5f); + emitter.fillTarget = false; + emitter.pour(SmokeParticle.SPEW, 0.05f); + return emitter; + } + + { + image = ItemSpriteSheet.DISPLACING_DART; + } + + @Override + public int proc(Char attacker, Char defender, int damage) { + DiedCrossBow dartGun = Dungeon.hero.belongings.getItem(DiedCrossBow.class); + damage = Random.NormalIntRange(dartGun.Lmin(), dartGun.Lmax()); + this.explodeBomb(defender.pos); + + return super.proc(attacker, defender, damage); + } + + @Override + public ItemSprite.Glowing glowing() { + return new ItemSprite.Glowing(0x880000, 6f); + } + + @Override + protected void onThrow( int cell ) { + Char enemy = Actor.findChar( cell ); + if (enemy == null || enemy == curUser) { + parent = null; + Splash.at( cell, Window.CBLACK, 12 ); + this.explodeBomb(cell); + } else { + if (!curUser.shoot(enemy, this)) { + Splash.at(cell, Window.CBLACK, 12); + } + } + + } + + public void explodeBomb(int cell){ + //We're blowing up, so no need for a fuse anymore. + + Sample.INSTANCE.play( Assets.Sounds.BLAST ); + + ArrayList affected = new ArrayList<>(); + + if (Dungeon.level.heroFOV[cell]) { + CellEmitter.center(cell).burst(BlastParticle.FACTORY, 30); + } + + boolean terrainAffected = false; + for (int n : PathFinder.NEIGHBOURS8) { + int c = cell + n; + if (c >= 0 && c < Dungeon.level.length()) { + if (Dungeon.level.heroFOV[c]) { + CellEmitter.get(c).burst(SmokeParticle.FACTORY, 4); + } + + if (Dungeon.level.flamable[c]) { + Dungeon.level.destroy(c); + GameScene.updateMap(c); + terrainAffected = true; + } + + Char ch = Actor.findChar(c); + if (ch != null) { + affected.add(ch); + } + } + + for (Char ch : affected){ + + //if they have already been killed by another bomb + if(!ch.isAlive()){ + continue; + } + + DiedCrossBow diedCrossBow = Dungeon.hero.belongings.getItem(DiedCrossBow.class); + int dmg = Random.NormalIntRange(diedCrossBow.Lmin(),diedCrossBow.Lmin()); + + //those not at the center of the blast take less damage + if (ch.pos != cell){ + dmg = Math.round(dmg*0.67f); + } + + dmg -= ch.drRoll(); + + if (dmg > 0) { + ch.damage(dmg, this); + } + + if (ch == Dungeon.hero && !ch.isAlive()) { + Dungeon.fail(Bomb.class); + } + } + + if (terrainAffected) { + Dungeon.observe(); + } + } + } + + } + + @Override + public int min(int lvl) { + return 4 + lvl * (tier + 1); //scaling unchanged + } + + + @Override + public int max(int lvl) { + return 25 + lvl * (tier + 5); //scaling unchanged + } + +} diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/weapon/melee/legend/LegendWeapon.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/weapon/melee/legend/LegendWeapon.java new file mode 100644 index 000000000..b4f784158 --- /dev/null +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/weapon/melee/legend/LegendWeapon.java @@ -0,0 +1,128 @@ +package com.shatteredpixel.shatteredpixeldungeon.items.weapon.melee.legend; + +import static com.shatteredpixel.shatteredpixeldungeon.Dungeon.hero; + +import com.shatteredpixel.shatteredpixeldungeon.actors.Char; +import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Buff; +import com.shatteredpixel.shatteredpixeldungeon.actors.hero.Hero; +import com.shatteredpixel.shatteredpixeldungeon.items.weapon.melee.MeleeWeapon; +import com.shatteredpixel.shatteredpixeldungeon.messages.Messages; +import com.watabou.utils.Bundle; + +import java.util.ArrayList; + +public abstract class LegendWeapon extends MeleeWeapon { + + { + defaultAction = AC_KING; + } + protected Buff passiveBuff; + protected Buff activeBuff; + + public void activate( Char ch ) { + passiveBuff = passiveBuff(); + passiveBuff.attachTo(ch); + } + + @Override + public boolean doUnequip( Hero hero, boolean collect, boolean single ) { + if (super.doUnequip( hero, collect, single )) { + + if (passiveBuff != null) { + passiveBuff.detach(); + passiveBuff = null; + } + + return true; + + } else { + + return false; + + } + } + + protected static final String AC_KING = "KING"; + protected int legend; + protected int min; + protected int max; + protected int baseMin; + protected int baseMax; + + + protected int cooldown = 0; + + public class LegendWeaponBuff extends Buff { + + public boolean isCursed() { + return cursed; + } + + public void charge(Hero target, float amount){ + this.charge(target, amount); + } + + } + + protected LegendWeapon.LegendWeaponBuff passiveBuff() { + return null; + } + + protected LegendWeapon.LegendWeaponBuff activeBuff() {return null; } + + public void charge(Hero target, float amount){ + //do nothing by default; + } + + public void restoreFromBundle(Bundle bundle) { + super.restoreFromBundle(bundle); + cooldown = bundle.getInt("cooldown"); + + } + + public void storeInBundle(Bundle bundle) { + super.storeInBundle(bundle); + bundle.put("cooldown", cooldown); + } + + @Override + public ArrayList actions(Hero hero) { + ArrayList actions = super.actions(hero); + actions.add(AC_KING); + return actions; + } + + + public int Lmin() { + if(level()==0) { + return baseMin; + } else { + return min * level(); + } + } + + public int Lmax() { + if(level()==0){ + return baseMax; + } else { + return max*level(); //scaling unchanged + } + + } + + @Override + public String statsInfo() { + if (isEquipped(hero)) { + if (isIdentified()) { + return Messages.get(LegendWeapon.class, "stats_desc", legend, Messages.get(this, "king_desc"), Lmin(), + Lmax()); + } else { + return Messages.get(LegendWeapon.class, "typical_stats_desc", 9); + } + } else { + return ""; + } + + } + +} diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/ZeroLevel.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/ZeroLevel.java index 87e035f73..78d6bd2d4 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/ZeroLevel.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/ZeroLevel.java @@ -25,6 +25,7 @@ import static com.shatteredpixel.shatteredpixeldungeon.items.Generator.randomArt import com.shatteredpixel.shatteredpixeldungeon.Assets; import com.shatteredpixel.shatteredpixeldungeon.Badges; +import com.shatteredpixel.shatteredpixeldungeon.PaswordBadges; import com.shatteredpixel.shatteredpixeldungeon.actors.mobs.Mob; import com.shatteredpixel.shatteredpixeldungeon.actors.mobs.npcs.NxhyNpc; import com.shatteredpixel.shatteredpixeldungeon.actors.mobs.npcs.Nyz; @@ -34,11 +35,14 @@ import com.shatteredpixel.shatteredpixeldungeon.actors.mobs.npcs.Slyl; import com.shatteredpixel.shatteredpixeldungeon.actors.mobs.npcs.obSir; import com.shatteredpixel.shatteredpixeldungeon.items.Ankh; import com.shatteredpixel.shatteredpixeldungeon.items.Generator; +import com.shatteredpixel.shatteredpixeldungeon.items.Gold; import com.shatteredpixel.shatteredpixeldungeon.items.Heap; import com.shatteredpixel.shatteredpixeldungeon.items.Item; import com.shatteredpixel.shatteredpixeldungeon.items.Stylus; import com.shatteredpixel.shatteredpixeldungeon.items.food.Pasty; +import java.util.List; + public class ZeroLevel extends Level { private static final int[] pre_map = {190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 161, 4, 4, 4, 0, 0, 4, 0, 0, 0, 2, 0, 161, 190, 0, 0, 0, 0, 0, 0, 0, 190, 161, 0, 2, 0, 0, 0, 0, 4, 0, 0, 0, 0, 161, 190, 190, 0, 4, 16, 4, 0, 0, 4, 0, 0, 0, 2, 0, 0, 190, 0, 0, 0, 0, 0, 0, 0, 190, 0, 2, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 190, 190, 0, 4, 0, 4, 0, 0, 4, 0, 2, 0, 2, 0, 2, 190, 0, 0, 4, 4, 0, 0, 0, 190, 2, 2, 2, 2, 2, 2, 2, 4, 0, 0, 0, 0, 0, 190, 190, 0, 4, 0, 4, 0, 0, 4, 0, 0, 2, 2, 2, 0, 190, 0, 4, 0, 1, 4, 0, 0, 190, 0, 2, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 190, 190, 0, 4, 0, 4, 0, 0, 4, 0, 0, 0, 2, 0, 0, 190, 0, 4, 2, 3, 4, 0, 0, 190, 0, 0, 2, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 190, 190, 0, 4, 0, 4, 0, 0, 4, 4, 4, 4, 4, 4, 4, 80, 4, 4, 4, 4, 4, 4, 4, 80, 4, 4, 4, 4, 4, 4, 4, 4, 4, 0, 0, 0, 0, 190, 190, 0, 4, 0, 4, 0, 0, 4, 0, 1, 4, 0, 0, 0, 190, 0, 4, 0, 1, 4, 0, 0, 190, 0, 0, 0, 4, 0, 0, 0, 1, 4, 4, 4, 4, 4, 190, 190, 0, 4, 4, 4, 0, 0, 4, 2, 3, 4, 0, 0, 0, 190, 0, 4, 2, 3, 4, 0, 0, 190, 0, 0, 0, 4, 0, 1, 1, 1, 4, 0, 0, 0, 0, 190, 190, 4, 4, 4, 2, 4, 4, 4, 4, 4, 4, 0, 0, 0, 190, 0, 0, 4, 4, 0, 0, 0, 190, 0, 0, 0, 4, 4, 4, 4, 4, 4, 0, 0, 0, 0, 190, 190, 0, 0, 0, 0, 2, 0, 4, 0, 0, 0, 0, 0, 0, 190, 0, 0, 0, 4, 0, 0, 0, 190, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 190, 190, 2, 2, 2, 2, 2, 2, 4, 0, 0, 0, 0, 0, 0, 190, 0, 0, 4, 0, 4, 0, 0, 190, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 190, 190, 0, 0, 0, 0, 2, 0, 4, 0, 0, 0, 0, 0, 0, 190, 0, 4, 0, 4, 0, 4, 0, 190, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 190, 190, 161, 0, 0, 2, 0, 0, 4, 0, 0, 0, 0, 0, 161, 190, 4, 0, 0, 0, 0, 0, 4, 190, 161, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 161, 190, 190, 190, 190, 190, 190, 190, 190, 80, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 80, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 80, 190, 190, 190, 190, 190, 190, 190, 0, 0, 4, 4, 4, 4, 4, 0, 0, 0, 0, 0, 4, 190, 123, 123, 123, 123, 123, 123, 123, 190, 4, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 190, 190, 0, 0, 4, 0, 1, 4, 4, 0, 0, 0, 0, 4, 0, 190, 123, 98, 4, 10, 4, 98, 123, 190, 0, 4, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 190, 190, 0, 0, 4, 2, 3, 4, 4, 0, 0, 0, 4, 0, 0, 190, 123, 4, 0, 85, 0, 4, 123, 190, 0, 0, 4, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 190, 190, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 0, 4, 0, 80, 123, 10, 85, 17, 85, 10, 123, 80, 0, 4, 0, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 190, 190, 0, 1, 4, 0, 0, 0, 4, 0, 0, 0, 4, 0, 0, 190, 123, 4, 0, 85, 0, 4, 123, 190, 0, 0, 4, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 190, 190, 2, 3, 4, 0, 0, 0, 4, 0, 0, 0, 0, 4, 0, 190, 123, 98, 4, 10, 4, 98, 123, 190, 0, 4, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 190, 190, 4, 4, 4, 0, 0, 0, 4, 0, 0, 0, 0, 0, 4, 190, 123, 123, 123, 123, 123, 123, 123, 190, 4, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 190, 190, 190, 190, 190, 190, 190, 190, 80, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 80, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 80, 190, 190, 190, 190, 190, 190, 190, 124, 124, 124, 124, 124, 124, 4, 124, 124, 124, 124, 124, 124, 190, 4, 0, 0, 0, 0, 0, 4, 190, 161, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 161, 190, 190, 124, 124, 124, 124, 124, 124, 4, 124, 124, 124, 124, 124, 124, 190, 0, 4, 0, 4, 0, 4, 0, 190, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 190, 190, 124, 124, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 190, 0, 0, 4, 0, 4, 0, 0, 190, 0, 0, 0, 0, 4, 4, 4, 4, 4, 4, 4, 0, 0, 190, 190, 124, 124, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 190, 0, 0, 0, 4, 0, 0, 0, 190, 0, 0, 0, 0, 4, 0, 1, 4, 0, 1, 4, 0, 0, 190, 190, 124, 124, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 190, 0, 0, 0, 4, 0, 0, 0, 190, 0, 0, 0, 0, 4, 2, 3, 4, 2, 3, 4, 0, 0, 190, 190, 124, 124, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 80, 4, 4, 4, 4, 4, 4, 4, 80, 4, 4, 4, 4, 4, 4, 4, 19, 4, 4, 4, 4, 4, 190, 190, 124, 124, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 190, 0, 0, 0, 4, 0, 0, 0, 190, 0, 0, 2, 0, 4, 0, 1, 4, 0, 1, 4, 0, 0, 190, 190, 124, 124, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 190, 4, 4, 4, 4, 4, 4, 4, 190, 0, 0, 2, 0, 4, 2, 3, 4, 2, 3, 4, 0, 0, 190, 190, 124, 124, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 190, 4, 0, 1, 4, 0, 1, 4, 190, 0, 0, 2, 0, 4, 4, 4, 4, 4, 4, 4, 0, 0, 190, 190, 124, 124, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 190, 4, 2, 3, 4, 2, 3, 4, 190, 0, 0, 2, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 190, 190, 124, 124, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 190, 4, 4, 4, 4, 4, 4, 4, 190, 2, 0, 2, 0, 2, 0, 0, 4, 0, 0, 0, 0, 0, 190, 190, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 190, 0, 0, 0, 4, 0, 0, 0, 190, 0, 2, 2, 2, 0, 0, 0, 4, 0, 0, 0, 0, 0, 190, 190, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 190, 0, 0, 0, 4, 0, 0, 0, 190, 161, 0, 2, 0, 0, 0, 0, 4, 0, 0, 0, 0, 161, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190}; @@ -121,15 +125,21 @@ public class ZeroLevel extends Level { drop( new Pasty(), this.width * 20 + 19 ); - if ( Badges.isUnlocked(Badges.Badge.GODD_MAKE)){ + PaswordBadges.loadGlobal(); + List passwordbadges = PaswordBadges.filtered( true ); + + if(passwordbadges.contains(PaswordBadges.Badge.GODD_MAKE)){ drop( ( Generator.randomUsingDefaults( Generator.Category.RING ) ), this.width * 17 + 18 ); } - if ( Badges.isUnlocked(Badges.Badge.BIG_X)){ + if(passwordbadges.contains(PaswordBadges.Badge.BIG_X)){ drop( ( Generator.randomUsingDefaults( Generator.Category.ARMOR ) ), this.width * 19 + 18 ); } if ( Badges.isUnlocked(Badges.Badge.KILL_DM720)||Badges.isUnlocked(Badges.Badge.KILL_MG) ){ drop(( Generator.randomUsingDefaults( Generator.Category.WEP_T2 )), this.width * 18 + 17 ); } + if(passwordbadges.contains(PaswordBadges.Badge.EXSG)){ + drop(new Gold().quantity(720), this.width * 18 + 18 ); + } if ( Badges.isUnlocked(Badges.Badge.RLPT)){ Item item = randomArtifact(); drop(item, this.width * 18 + 19 ); diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/scenes/GoScene.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/scenes/GoScene.java index a048201d1..b1ba858f4 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/scenes/GoScene.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/scenes/GoScene.java @@ -38,7 +38,7 @@ public class GoScene extends PixelScene { int w = Camera.main.width; int h = Camera.main.height; - gdx = new Image(Assets.Splashes.MLPD2Y) { + gdx = new Image(Assets.Splashes.GDX) { @Override public void update() { if (SPDSettings.splashScreen() > 0 && sec < 1f) { diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/scenes/PassWordBadgesScene.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/scenes/PassWordBadgesScene.java new file mode 100644 index 000000000..c44228e89 --- /dev/null +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/scenes/PassWordBadgesScene.java @@ -0,0 +1,147 @@ +package com.shatteredpixel.shatteredpixeldungeon.scenes; + +import com.shatteredpixel.shatteredpixeldungeon.Assets; +import com.shatteredpixel.shatteredpixeldungeon.Badges; +import com.shatteredpixel.shatteredpixeldungeon.PaswordBadges; +import com.shatteredpixel.shatteredpixeldungeon.ShatteredPixelDungeon; +import com.shatteredpixel.shatteredpixeldungeon.effects.BadgeBanner; +import com.shatteredpixel.shatteredpixeldungeon.effects.PasswordBadgeBanner; +import com.shatteredpixel.shatteredpixeldungeon.messages.Messages; +import com.shatteredpixel.shatteredpixeldungeon.ui.Archs; +import com.shatteredpixel.shatteredpixeldungeon.ui.Button; +import com.shatteredpixel.shatteredpixeldungeon.ui.ExitButton; +import com.shatteredpixel.shatteredpixeldungeon.ui.RenderedTextBlock; +import com.shatteredpixel.shatteredpixeldungeon.ui.Window; +import com.shatteredpixel.shatteredpixeldungeon.windows.WndProBadge; +import com.watabou.noosa.Camera; +import com.watabou.noosa.Game; +import com.watabou.noosa.Image; +import com.watabou.noosa.audio.Music; +import com.watabou.noosa.audio.Sample; +import com.watabou.utils.Random; + +import java.util.List; + +public class PassWordBadgesScene extends PixelScene { + + @Override + public void create() { + + super.create(); + + Music.INSTANCE.play( Assets.Music.THEME, true ); + + uiCamera.visible = false; + + int w = Camera.main.width; + int h = Camera.main.height; + + Archs archs = new Archs(); + archs.setSize( w, h ); + add( archs ); + + float left = 5; + float top = 20; + + RenderedTextBlock title = PixelScene.renderTextBlock( Messages.get(this, "title"), 9 ); + title.hardlight(Window.TITLE_COLOR); + title.setPos( + (w - title.width()) / 2f, + (top - title.height()) / 2f + ); + align(title); + add(title); + + PaswordBadges.loadGlobal(); + + List badges = PaswordBadges.filtered( true ); + + int blankBadges = 8; + blankBadges -= badges.size(); + if (badges.contains(Badges.Badge.ALL_ITEMS_IDENTIFIED)) blankBadges -= 6; + if (badges.contains(Badges.Badge.YASD)) blankBadges -= 5; + blankBadges = Math.max(0, blankBadges); + + //guarantees a max of 5 rows in landscape, and 8 in portrait, assuming a max of 40 buttons + int nCols = landscape() ? 7 : 4; + if (badges.size() + blankBadges > 32 && !landscape()) nCols++; + + int nRows = 1 + (blankBadges + badges.size())/nCols; + + float badgeWidth = (w - 2*left)/nCols; + float badgeHeight = (h - 2*top)/nRows; + + for (int i = 0; i < badges.size() + blankBadges; i++){ + int row = i / nCols; + int col = i % nCols; + PaswordBadges.Badge b = i < badges.size() ? badges.get( i ) : null; + BadgeButton button = new BadgeButton( b ); + button.setPos( + left + col * badgeWidth + (badgeWidth - button.width()) / 2, + top + row * badgeHeight + (badgeHeight - button.height()) / 2); + align(button); + add( button ); + } + + ExitButton btnExit = new ExitButton(); + btnExit.setPos( Camera.main.width - btnExit.width(), 0 ); + add( btnExit ); + + fadeIn(); + } + + @Override + public void destroy() { + + Badges.saveGlobal(); + + super.destroy(); + } + + @Override + protected void onBackPressed() { + ShatteredPixelDungeon.switchNoFade( TitleScene.class ); + } + + private static class BadgeButton extends Button { + + private PaswordBadges.Badge badge; + + private Image icon; + + public BadgeButton( PaswordBadges.Badge badge ) { + super(); + + this.badge = badge; + active = (badge != null); + + icon = active ? PasswordBadgeBanner.image(badge.image) : new Image( Assets.Interfaces.LOCKED ); + add(icon); + + setSize( icon.width(), icon.height() ); + } + + @Override + protected void layout() { + super.layout(); + + icon.x = x + (width - icon.width()) / 2; + icon.y = y + (height - icon.height()) / 2; + } + + @Override + public void update() { + super.update(); + + if (Random.Float() < Game.elapsed * 0.1) { + BadgeBanner.highlight( icon, badge.image ); + } + } + + @Override + protected void onClick() { + Sample.INSTANCE.play( Assets.Sounds.CLICK, 0.7f, 0.7f, 1.2f ); + Game.scene().add( new WndProBadge( badge ) ); + } + } +} \ No newline at end of file diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/scenes/PixelScene.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/scenes/PixelScene.java index 20286c4db..b72425258 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/scenes/PixelScene.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/scenes/PixelScene.java @@ -23,8 +23,10 @@ package com.shatteredpixel.shatteredpixeldungeon.scenes; import com.shatteredpixel.shatteredpixeldungeon.Assets; import com.shatteredpixel.shatteredpixeldungeon.Badges; +import com.shatteredpixel.shatteredpixeldungeon.PaswordBadges; import com.shatteredpixel.shatteredpixeldungeon.SPDSettings; import com.shatteredpixel.shatteredpixeldungeon.effects.BadgeBanner; +import com.shatteredpixel.shatteredpixeldungeon.effects.PasswordBadgeBanner; import com.shatteredpixel.shatteredpixeldungeon.messages.Languages; import com.shatteredpixel.shatteredpixeldungeon.messages.Messages; import com.shatteredpixel.shatteredpixeldungeon.ui.RenderedTextBlock; @@ -289,6 +291,31 @@ public class PixelScene extends Scene { add( new Fader( color, light ) ); } + public static void showProBadge( PaswordBadges.Badge badge ) { + Game.runOnRenderThread(new Callback() { + @Override + public void call() { + Scene s = Game.scene(); + if (s != null) { + PasswordBadgeBanner banner = PasswordBadgeBanner.show(badge.image); + s.add(banner); + float offset = Camera.main.centerOffset.y; + + int left = uiCamera.width/2 - PasswordBadgeBanner.SIZE/2; + left -= (PasswordBadgeBanner.SIZE * PasswordBadgeBanner.DEFAULT_SCALE * (PasswordBadgeBanner.showing.size()-1))/2; + for (int i = 0; i < PasswordBadgeBanner.showing.size(); i++){ + banner = PasswordBadgeBanner.showing.get(i); + banner.camera = uiCamera; + banner.x = align(banner.camera, left); + banner.y = align(uiCamera, (uiCamera.height - banner.height) / 2 - banner.height / 2 - 16 - offset); + left += PasswordBadgeBanner.SIZE * PasswordBadgeBanner.DEFAULT_SCALE; + } + + } + } + }); + } + public static void showBadge( Badges.Badge badge ) { Game.runOnRenderThread(new Callback() { @Override diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/scenes/TitleScene.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/scenes/TitleScene.java index 1c624acb0..784bd82b1 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/scenes/TitleScene.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/scenes/TitleScene.java @@ -202,6 +202,11 @@ public class TitleScene extends PixelScene { protected void onClick() { ShatteredPixelDungeon.switchNoFade(BadgesScene.class); } + @Override + protected boolean onLongClick() { + ShatteredPixelDungeon.switchNoFade(PassWordBadgesScene.class); + return super.onLongClick(); + } }; btnBadges.icon(new ItemSprite(ItemSpriteSheet.GREENBOOKS, null)); add(btnBadges); diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/scenes/WelcomeScene.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/scenes/WelcomeScene.java index 5df10fe0b..515274d6e 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/scenes/WelcomeScene.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/scenes/WelcomeScene.java @@ -70,8 +70,10 @@ public class WelcomeScene extends PixelScene { return; } - if (ShatteredPixelDungeon.versionCode == previousVersion && !SPDSettings.intro()) { + if (ShatteredPixelDungeon.versionCode == previousVersion && !SPDSettings.intro() && !SPDSettings.firebase()) { ShatteredPixelDungeon.switchNoFade(GameNewsScene.class); + } else { + ShatteredPixelDungeon.switchNoFade(TitleScene.class); return; } diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/sprites/ItemSpriteSheet.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/sprites/ItemSpriteSheet.java index 36dbd7047..ae379e0c1 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/sprites/ItemSpriteSheet.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/sprites/ItemSpriteSheet.java @@ -712,6 +712,33 @@ public class ItemSpriteSheet { assignItemRect(RiceDumplingsBottle, 14, 14); } + //传奇武器 + private static final int LENGYWEAPONS = xy(1, 39); //16 slots + + public static final int MOONDAILY= LENGYWEAPONS+1; + + public static final int DCSURANG= LENGYWEAPONS+2; + + public static final int THEDIED= LENGYWEAPONS+3; + + public static final int CURSEDAXE= LENGYWEAPONS+4; + + public static final int EAGLEPOWER= LENGYWEAPONS+5; + + public static final int GOLDLANGGUN= LENGYWEAPONS+6; + + public static final int CLEARPRO= LENGYWEAPONS+7; + + public static final int FORESTCROSSBOW= LENGYWEAPONS+8; + + public static final int DIEDCROSSBOW = LENGYWEAPONS+9; + + public static final int DIEDBOOK= LENGYWEAPONS+10; + + static { + assignItemRect(DIEDCROSSBOW, 16, 15); + } + private static final int BAGS = xy(1, 31); //16 slots public static final int VIAL = BAGS+0; public static final int POUCH = BAGS+1; diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/ui/changelist/mlpd/vM0_6_7_X_Changes.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/ui/changelist/mlpd/vM0_6_7_X_Changes.java index eb2710ee1..a5be52f13 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/ui/changelist/mlpd/vM0_6_7_X_Changes.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/ui/changelist/mlpd/vM0_6_7_X_Changes.java @@ -119,7 +119,7 @@ public class vM0_6_7_X_Changes { } public static void add_v0_6_56_Changes( ArrayList changeInfos ) { - ChangeInfo changes = new ChangeInfo("Coming Soon V0.6.5.0", true, ""); + ChangeInfo changes = new ChangeInfo("Coming Soon V0.6.5.0-Alpha3", true, ""); changes.hardlight(Window.CBLACK); changeInfos.add(changes); @@ -140,6 +140,40 @@ public class vM0_6_7_X_Changes { i.scale.set(PixelScene.align(0.74f)); changes.addButton(new ChangeButton(i, ("熔岩火龙"), ("丛林暴乱的真相"))); + + changes = new ChangeInfo("v0.6.5.0-Alpha1-2", true, ""); + changes.hardlight(Window.TITLE_COLOR); + changeInfos.add(changes); + + changes = new ChangeInfo("新内容", false, null); + changes.hardlight(Window.GREEN_COLOR); + changeInfos.add(changes); + + changes.addButton(new ChangeButton(new ItemSprite(ItemSpriteSheet.DIEDCROSSBOW), ("传奇武器"), + ("新类别传奇武器测试已经开始。在后续版本中需要通过货币解锁。"))); + + changes.addButton(new ChangeButton(Icons.get(Icons.BADGES), ("加密徽章"), + ("添加了加密徽章,长按徽章按钮进入。记录一些隐藏成就。\n\n_注意:_这些成就不会在获取之前不会显示出来"))); + + changes.addButton(new ChangeButton(Icons.get(Icons.PREFS), ("杂项改动"), + ("1.添加了暂停更新界面的功能\n\n" + + "2.少量bug修复"))); + + changes = new ChangeInfo("改动", false, null); + changes.hardlight(Window.CYELLOW); + changeInfos.add(changes); + + Image a = new SakaFishBossSprites(); + a.scale.set(PixelScene.align(0.72f)); + changes.addButton(new ChangeButton(a, "萨卡班甲鱼", + "数值方面进行了一定平衡。")); + + changes.addButton(new ChangeButton(new Image("sprites/spinner.png", 144, 0, 16, 16), + Messages.get(ChangesScene.class, "bugfixes"), Messages.get(vM0_6_7_X_Changes.class, "bug_06X83"))); + + changes.addButton(new ChangeButton(Icons.get(Icons.PREFS), ("杂项调整"), + ("1.书籍现在不可堆积,且成就有一些变化\n\n" + + "2.其它bug修复"))); } public static void add_v0_6_55_Changes( ArrayList changeInfos ) { diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/windows/WndProBadge.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/windows/WndProBadge.java new file mode 100644 index 000000000..8d0efb695 --- /dev/null +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/windows/WndProBadge.java @@ -0,0 +1,74 @@ +/* + * Pixel Dungeon + * Copyright (C) 2012-2015 Oleg Dolya + * + * Shattered Pixel Dungeon + * Copyright (C) 2014-2023 Evan Debenham + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see + */ + +package com.shatteredpixel.shatteredpixeldungeon.windows; + +import com.shatteredpixel.shatteredpixeldungeon.PaswordBadges; +import com.shatteredpixel.shatteredpixeldungeon.effects.PasswordBadgeBanner; +import com.shatteredpixel.shatteredpixeldungeon.scenes.PixelScene; +import com.shatteredpixel.shatteredpixeldungeon.ui.RenderedTextBlock; +import com.shatteredpixel.shatteredpixeldungeon.ui.Window; +import com.watabou.noosa.Image; + +public class WndProBadge extends Window { + + private static final int WIDTH = 120; + private static final int MARGIN = 4; + + public WndProBadge(PaswordBadges.Badge badge) { + + super(); + + Image icon = PasswordBadgeBanner.image( badge.image ); + icon.scale.set( 2 ); + + add( icon ); + + RenderedTextBlock title = PixelScene.renderTextBlock( badge.title(), 9 ); + title.maxWidth(WIDTH - MARGIN * 2); + title.align(RenderedTextBlock.CENTER_ALIGN); + title.hardlight(TITLE_COLOR); + + add(title); + + String desc = badge.desc(); + + RenderedTextBlock info = PixelScene.renderTextBlock( desc, 6 ); + info.maxWidth(WIDTH - MARGIN * 2); + info.align(RenderedTextBlock.CENTER_ALIGN); + add(info); + + float w = Math.max( icon.width(), Math.max(title.width(), info.width()) ) + MARGIN * 2; + + icon.x = (w - icon.width()) / 2f; + icon.y = MARGIN; + PixelScene.align(icon); + + title.setPos((w - title.width()) / 2, icon.y + icon.height() + MARGIN); + PixelScene.align(title); + + info.setPos((w - info.width()) / 2, title.bottom() + MARGIN); + PixelScene.align(info); + resize( (int)w, (int)(info.bottom() + MARGIN) ); + + PasswordBadgeBanner.highlight( icon, badge.image ); + } +} \ No newline at end of file diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/windows/WndSettings.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/windows/WndSettings.java index 27b440881..9cc76abf2 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/windows/WndSettings.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/windows/WndSettings.java @@ -910,27 +910,11 @@ public class WndSettings extends WndTabbed { add(chkWifi); } - chkFireBase = new CheckBox("firebase") { + chkFireBase = new CheckBox(Messages.get(this, "autoupdate")) { @Override protected void onClick() { super.onClick(); - if (checked()) { - checked(!checked()); - ShatteredPixelDungeon.scene().add(new WndOptions(Icons.get(Icons.DATA), - "firebase_active", - "firebase_desc", - "cancel") { - @Override - protected void onSelect(int index) { - if (index == 0) { - checked(!checked()); - SPDSettings.firebase(checked()); - } - } - }); - } else { - SPDSettings.firebase(checked()); - } + SPDSettings.firebase(checked()); } }; chkFireBase.checked( SPDSettings.firebase() ); @@ -949,14 +933,10 @@ public class WndSettings extends WndTabbed { chkNews.setRect(0, sep1.y + 1 + GAP, width/2-1, BTN_HEIGHT); //chkUpdates.setRect(chkNews.right() + GAP, chkNews.top(), width/2-1, BTN_HEIGHT); chkFireBase.setRect(chkNews.right() + GAP, chkNews.top(), width/2-1, BTN_HEIGHT); - chkFireBase.visible = false; - chkFireBase.active = false; pos = chkFireBase.bottom(); } else { chkNews.setRect(0, sep1.y + 1 + GAP, width, BTN_HEIGHT); chkFireBase.setRect(0, chkNews.bottom() + GAP, width, BTN_HEIGHT); - chkFireBase.visible = false; - chkFireBase.active = false; pos = chkNews.bottom(); } From d101c86c5f362c4ca23195c71c3d36e13da8f0be Mon Sep 17 00:00:00 2001 From: LingASDJ <2735951230@qq.com> Date: Fri, 22 Sep 2023 00:10:31 +0800 Subject: [PATCH 07/13] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E5=BE=BD=E7=AB=A0?= =?UTF-8?q?=E9=97=AE=E9=A2=98=E5=92=8C=E4=B8=80=E4=BA=9B=E5=85=B6=E4=BB=96?= =?UTF-8?q?=E9=94=99=E8=AF=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../shatteredpixeldungeon/Badges.java | 5 ++-- .../shatteredpixeldungeon/Challenges.java | 3 --- .../weapon/melee/legend/DiedCrossBow.java | 19 +++---------- .../items/weapon/missiles/darts/Dart.java | 3 +++ .../levels/LaveCavesBossLevel.java | 27 +++++++++++++++++++ .../levels/ZeroLevel.java | 12 +++++---- .../levels/rooms/special/CrystalPathRoom.java | 4 ++- 7 files changed, 46 insertions(+), 27 deletions(-) create mode 100644 core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/LaveCavesBossLevel.java diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/Badges.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/Badges.java index 1a257dd24..1b9e98010 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/Badges.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/Badges.java @@ -749,8 +749,9 @@ public class Badges { } public static void validateAMZ() { - if (global.contains( Badge.KILL_APPLE ) &&global.contains( Badge.KILL_DM720 ) && - global.contains( Badge.KILL_MG) && PaswordBadges.global.contains( PaswordBadges.Badge.FIREGIRL) && PaswordBadges.global.contains( PaswordBadges.Badge.DRAWF_HEAD) && PaswordBadges.global.contains( PaswordBadges.Badge.SAKA_DIED)) { + List passwordbadges = PaswordBadges.filtered( true ); + if (global.contains( Badge.KILL_APPLE ) && global.contains( Badge.KILL_DM720 ) && + global.contains( Badge.KILL_MG) && passwordbadges.contains(PaswordBadges.Badge.FIREGIRL) && passwordbadges.contains(PaswordBadges.Badge.DRAWF_HEAD) && passwordbadges.contains(PaswordBadges.Badge.SAKA_DIED)) { PaswordBadges.Badge badge = PaswordBadges.Badge.SPICEALBOSS; PaswordBadges.displayBadge( badge ); diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/Challenges.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/Challenges.java index 8775d081a..c2f574fdd 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/Challenges.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/Challenges.java @@ -28,7 +28,6 @@ import com.shatteredpixel.shatteredpixeldungeon.items.armor.Armor; import com.shatteredpixel.shatteredpixeldungeon.items.armor.ClassArmor; import com.shatteredpixel.shatteredpixeldungeon.items.armor.ClothArmor; import com.shatteredpixel.shatteredpixeldungeon.items.armor.custom.CustomArmor; -import com.shatteredpixel.shatteredpixeldungeon.items.artifacts.HornOfPlenty; import com.shatteredpixel.shatteredpixeldungeon.items.food.SmallRation; import com.shatteredpixel.shatteredpixeldungeon.messages.Messages; import com.shatteredpixel.shatteredpixeldungeon.scenes.InterlevelScene; @@ -86,8 +85,6 @@ public class Challenges { if (Dungeon.isChallenged(NO_FOOD)) { if (item instanceof SmallRation) { return true; - } else if (item instanceof HornOfPlenty) { - return true; } } diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/weapon/melee/legend/DiedCrossBow.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/weapon/melee/legend/DiedCrossBow.java index 6c20afd1a..135f0fa4b 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/weapon/melee/legend/DiedCrossBow.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/weapon/melee/legend/DiedCrossBow.java @@ -65,13 +65,8 @@ public class DiedCrossBow extends LegendWeapon { public String status() { //display the current cooldown - if (cooldown != 0) - return Messages.format( "CD:%d", cooldown ); - - - Dart missile = Dungeon.hero.belongings.getItem(Dart.class); - if(missile != null){ - return ""+missile.quantity()/5; + if (cooldown != 0){ + return Messages.format("CD:%d", cooldown); } else { return null; } @@ -83,20 +78,12 @@ public class DiedCrossBow extends LegendWeapon { public void execute(Hero hero, String action ) { super.execute( hero, action ); - Dart missile = Dungeon.hero.belongings.getItem(Dart.class); if (action.equals( AC_KING )) { if (!isEquipped(hero)){ GLog.i( Messages.get(this, "no_equip") ); } else if(cooldown == 0) { - if (missile != null) - if (missile.quantity() > 5) { - curUser = hero; - curItem = this; - GameScene.selectCell(bomb); - } else { - GLog.w(Messages.get(this, "no_king")); - } + GameScene.selectCell(bomb); } else { GLog.w(Messages.get(this, "no_cooldown")); } diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/weapon/missiles/darts/Dart.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/weapon/missiles/darts/Dart.java index 6aecfd739..864e6c2e6 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/weapon/missiles/darts/Dart.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/weapon/missiles/darts/Dart.java @@ -30,6 +30,7 @@ import com.shatteredpixel.shatteredpixeldungeon.items.Item; import com.shatteredpixel.shatteredpixeldungeon.items.bags.Bag; import com.shatteredpixel.shatteredpixeldungeon.items.bags.VelvetPouch; import com.shatteredpixel.shatteredpixeldungeon.items.weapon.melee.Crossbow; +import com.shatteredpixel.shatteredpixeldungeon.items.weapon.melee.legend.DiedCrossBow; import com.shatteredpixel.shatteredpixeldungeon.items.weapon.missiles.MissileWeapon; import com.shatteredpixel.shatteredpixeldungeon.messages.Messages; import com.shatteredpixel.shatteredpixeldungeon.plants.Plant; @@ -96,6 +97,8 @@ public class Dart extends MissileWeapon { } private static Crossbow bow; + + private static DiedCrossBow diedCrossBow; private void updateCrossbow(){ if (Dungeon.hero.belongings.weapon() instanceof Crossbow){ diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/LaveCavesBossLevel.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/LaveCavesBossLevel.java new file mode 100644 index 000000000..c760ec50f --- /dev/null +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/LaveCavesBossLevel.java @@ -0,0 +1,27 @@ +package com.shatteredpixel.shatteredpixeldungeon.levels; + +public class LaveCavesBossLevel extends Level{ + /** + * @return + */ + @Override + protected boolean build() { + return false; + } + + /** + * + */ + @Override + protected void createMobs() { + + } + + /** + * + */ + @Override + protected void createItems() { + + } +} diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/ZeroLevel.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/ZeroLevel.java index 78d6bd2d4..10e76c8a3 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/ZeroLevel.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/ZeroLevel.java @@ -25,6 +25,8 @@ import static com.shatteredpixel.shatteredpixeldungeon.items.Generator.randomArt import com.shatteredpixel.shatteredpixeldungeon.Assets; import com.shatteredpixel.shatteredpixeldungeon.Badges; +import com.shatteredpixel.shatteredpixeldungeon.Challenges; +import com.shatteredpixel.shatteredpixeldungeon.Dungeon; import com.shatteredpixel.shatteredpixeldungeon.PaswordBadges; import com.shatteredpixel.shatteredpixeldungeon.actors.mobs.Mob; import com.shatteredpixel.shatteredpixeldungeon.actors.mobs.npcs.NxhyNpc; @@ -35,7 +37,6 @@ import com.shatteredpixel.shatteredpixeldungeon.actors.mobs.npcs.Slyl; import com.shatteredpixel.shatteredpixeldungeon.actors.mobs.npcs.obSir; import com.shatteredpixel.shatteredpixeldungeon.items.Ankh; import com.shatteredpixel.shatteredpixeldungeon.items.Generator; -import com.shatteredpixel.shatteredpixeldungeon.items.Gold; import com.shatteredpixel.shatteredpixeldungeon.items.Heap; import com.shatteredpixel.shatteredpixeldungeon.items.Item; import com.shatteredpixel.shatteredpixeldungeon.items.Stylus; @@ -132,14 +133,15 @@ public class ZeroLevel extends Level { drop( ( Generator.randomUsingDefaults( Generator.Category.RING ) ), this.width * 17 + 18 ); } if(passwordbadges.contains(PaswordBadges.Badge.BIG_X)){ - drop( ( Generator.randomUsingDefaults( Generator.Category.ARMOR ) ), this.width * 19 + 18 ); + if(Dungeon.isChallenged(Challenges.NO_ARMOR)){ + drop( ( Generator.randomUsingDefaults( Generator.Category.WAND ) ), this.width * 19 + 18 ); + } else { + drop( ( Generator.randomUsingDefaults( Generator.Category.ARMOR ) ), this.width * 19 + 18 ); + } } if ( Badges.isUnlocked(Badges.Badge.KILL_DM720)||Badges.isUnlocked(Badges.Badge.KILL_MG) ){ drop(( Generator.randomUsingDefaults( Generator.Category.WEP_T2 )), this.width * 18 + 17 ); } - if(passwordbadges.contains(PaswordBadges.Badge.EXSG)){ - drop(new Gold().quantity(720), this.width * 18 + 18 ); - } if ( Badges.isUnlocked(Badges.Badge.RLPT)){ Item item = randomArtifact(); drop(item, this.width * 18 + 19 ); diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/rooms/special/CrystalPathRoom.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/rooms/special/CrystalPathRoom.java index aef0a21bf..2f3197816 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/rooms/special/CrystalPathRoom.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/rooms/special/CrystalPathRoom.java @@ -21,6 +21,7 @@ package com.shatteredpixel.shatteredpixeldungeon.levels.rooms.special; +import com.shatteredpixel.shatteredpixeldungeon.Challenges; import com.shatteredpixel.shatteredpixeldungeon.Dungeon; import com.shatteredpixel.shatteredpixeldungeon.items.Generator; import com.shatteredpixel.shatteredpixeldungeon.items.Gold; @@ -150,7 +151,8 @@ public class CrystalPathRoom extends SpecialRoom { item = new LamellarArmor(); } else { item = Generator.random(Random.oneOf( - Generator.Category.ARMOR, + Dungeon.isChallenged(Challenges.NO_ARMOR) ? Generator.Category.WAND : + Generator.Category.ARMOR, Generator.Category.STONE, Generator.Category.WAND, Generator.Category.ARTIFACT) From c18ac269d0fc9f21ce3e799276d8cdfac279ca2e Mon Sep 17 00:00:00 2001 From: LingASDJ <2735951230@qq.com> Date: Fri, 22 Sep 2023 12:30:31 +0800 Subject: [PATCH 08/13] update 0.6.5.0-Alpha3 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit -1.开发者模式重大更新 -2.修复一些bug,详见游戏更新记录 -3.熔岩地块资源预载 --- build.gradle | 4 +- .../custom_tiles/lavecave_above.png | Bin 0 -> 20471 bytes .../custom_tiles/lavecave_behind.png | Bin 0 -> 52685 bytes .../environment/custom_tiles/town_above.png | Bin 0 -> 27018 bytes .../environment/custom_tiles/town_behind.png | Bin 0 -> 110925 bytes .../assets/messages/actors/actors.properties | 2 +- .../assets/messages/items/items.properties | 3 +- .../main/assets/messages/misc/misc.properties | 4 +- .../src/main/assets/messages/ui/ui.properties | 2 + .../main/assets/sprites/boss/fireDragon.png | Bin 2931 -> 4002 bytes .../shatteredpixeldungeon/Assets.java | 5 + .../shatteredpixeldungeon/Badges.java | 12 -- .../shatteredpixeldungeon/Dungeon.java | 6 + .../shatteredpixeldungeon/PaswordBadges.java | 16 +- .../actors/buffs/ChampionEnemy.java | 48 +++-- .../actors/hero/HeroClass.java | 34 +-- .../actors/mobs/Mob.java | 12 ++ .../actors/mobs/bosses/CrystalDiedTower.java | 5 + .../actors/mobs/bosses/DiamondKnight.java | 2 + .../actors/mobs/bosses/FireDragon.java | 13 ++ .../actors/mobs/bosses/SakaFishBoss.java | 6 +- .../custom/dict/DictSpriteSheet.java | 27 ++- .../custom/testmode/MobPlacer.java | 61 +++--- .../items/books/bookslist/TestBooks.java | 9 + .../items/wands/WandOfAnmy.java | 69 +++++++ .../journal/Catalog.java | 2 + .../levels/LaveCavesBossLevel.java | 195 +++++++++++++++++- .../scenes/GameScene.java | 4 +- .../sprites/FireDragonSprite.java | 28 +++ .../shatteredpixeldungeon/ui/MenuPane.java | 2 +- .../ui/changelist/mlpd/vM0_6_7_X_Changes.java | 34 ++- 31 files changed, 482 insertions(+), 123 deletions(-) create mode 100644 core/src/main/assets/environment/custom_tiles/lavecave_above.png create mode 100644 core/src/main/assets/environment/custom_tiles/lavecave_behind.png create mode 100644 core/src/main/assets/environment/custom_tiles/town_above.png create mode 100644 core/src/main/assets/environment/custom_tiles/town_behind.png create mode 100644 core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/mobs/bosses/FireDragon.java create mode 100644 core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/sprites/FireDragonSprite.java diff --git a/build.gradle b/build.gradle index 44b320f0c..a09bb8c13 100644 --- a/build.gradle +++ b/build.gradle @@ -18,8 +18,8 @@ allprojects { appName = 'Magic Ling Pixel Dungeon' appPackageName = 'com.ansdomagiclingpixeldungeon.ling' - appVersionCode =907300 - appVersionName = '0.6.5.0-Alpha2' + appVersionCode =907400 + appVersionName = '0.6.5.0-Alpha3' appJavaCompatibility = JavaVersion.VERSION_11 diff --git a/core/src/main/assets/environment/custom_tiles/lavecave_above.png b/core/src/main/assets/environment/custom_tiles/lavecave_above.png new file mode 100644 index 0000000000000000000000000000000000000000..5bc8374857c9bb1ca215f43ac735e5f9413fbc2f GIT binary patch literal 20471 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 literal 0 HcmV?d00001 diff --git a/core/src/main/assets/environment/custom_tiles/lavecave_behind.png b/core/src/main/assets/environment/custom_tiles/lavecave_behind.png new file mode 100644 index 0000000000000000000000000000000000000000..e40a58de6f0ddaad5785dd799ce36a482e1cd98e GIT binary patch literal 52685 zcmbTd1yqz@_clC3NJ@xw2`ET+Nh(s3BHbY+-OYdsC@I~clr$33%pfJ@(1a5pn@9$!=`M{YRCCz)V%y`(B zQ~Awl)3M%3#X8|R8t|fSbak#2z3NMixM#HLbvRCt;);q|I*^u}^^(%{vj9^FgRJ5M z5?m~dr*cf<*`QF_+rN0kxq`4TfS>JT-(&vsTTEuUe|||rvIGLY9x6K=f{XL_+i&kY z7X#gXn?&fr5Af}?Li50+L?M5FdH2Kr-$&Jq;gJl|)AB&0@ucL+*z~1O5h~K%1p7n@ zFJdtH9%6&^i>wFGW~F74t^+ZW$Vt=*};opuCy*H7NCq*w(<2`*@f`bswzs~ z9)y)Dk$`j4jSs!L4ABB~F4au;W+t$qA<&a9bnzJpku0W#@XbKay`B!0#iMaC+Yppi zh_&H&W4y4%tYr8%t$G`cTnje7=3s(tD}K%UlRcJ>diM?aIaEU6AO|b{^PY+<^#VU< zRLaqrSmuoa96EG-*3;N(_BqV$6eQ2eStx^HXTY!#b2td$uau#)3zrq_=wiP{GNBeX zP=X7H&vt?pIS@=fa#Je)-h)!N^&#CdA_Iz zUDe;LJ#(6adAX%mME;mJL#1@+ogM@{z**7Aauq_w?qfSxC9_8CdtUZ-j9mH5QA!57D=?ED*E(`_ESL8c|No3=8%pRcRql)NS-gqYQV#0j`vkrU>imdUHe+50pwsUr{?dvjV_eb7sEq|

Z55=YA& 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 literal 0 HcmV?d00001 diff --git a/core/src/main/assets/environment/custom_tiles/town_above.png b/core/src/main/assets/environment/custom_tiles/town_above.png new file mode 100644 index 0000000000000000000000000000000000000000..f96b3997d6cba26be185da44f021c0908bd9b82c GIT binary patch literal 27018 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 IM6N<$f?FfzjQ{`u literal 2931 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 dU4~(a{13a6;-?+rssI20002ovPDHLkV1gVz diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/Assets.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/Assets.java index 30a92297a..e9dd05571 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/Assets.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/Assets.java @@ -55,12 +55,17 @@ public class Assets { public static class Environment { public static final String TERRAIN_FEATURES = "environment/terrain_features.png"; + public static final String LAVACAVE_OP = "environment/custom_tiles/lavecave_behind.png"; + + public static final String LAVACAVE_PO = "environment/custom_tiles/lavecave_above.png"; + public static final String VISUAL_GRID = "environment/visual_grid.png"; public static final String WALL_BLOCKING= "environment/wall_blocking.png"; public static final String TILES_SEWERS = "environment/tiles_sewers.png"; public static final String TILES_PRISON = "environment/tiles_prison.png"; public static final String TILES_COLDCHEST = "environment/tiles_coldchest.png"; + public static final String TILES_FIRE = "environment/tiles_fire.png"; public static final String TILES_CAVES = "environment/tiles_caves.png"; public static final String TILES_CITY = "environment/tiles_city.png"; public static final String TILES_ANCIENT = "environment/tiles_ancient.png"; diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/Badges.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/Badges.java index 1b9e98010..54ef5525f 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/Badges.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/Badges.java @@ -748,15 +748,7 @@ public class Badges { } } - public static void validateAMZ() { - List passwordbadges = PaswordBadges.filtered( true ); - if (global.contains( Badge.KILL_APPLE ) && global.contains( Badge.KILL_DM720 ) && - global.contains( Badge.KILL_MG) && passwordbadges.contains(PaswordBadges.Badge.FIREGIRL) && passwordbadges.contains(PaswordBadges.Badge.DRAWF_HEAD) && passwordbadges.contains(PaswordBadges.Badge.SAKA_DIED)) { - PaswordBadges.Badge badge = PaswordBadges.Badge.SPICEALBOSS; - PaswordBadges.displayBadge( badge ); - } - } private static void validateYASD() { if (global.contains( Badge.DEATH_FROM_FIRE ) && @@ -1021,7 +1013,6 @@ public class Badges { public static void KILLSAPPLE() { displayBadge( Badge.KILL_APPLE); - validateAMZ(); } @@ -1034,7 +1025,6 @@ public class Badges { public static void KILLSDM720() { displayBadge( Badge.KILL_DM720 ); - validateAMZ(); } public static void BOSSTHREE() { @@ -1048,12 +1038,10 @@ public class Badges { public static void KILLMG() { displayBadge( Badge.KILL_MG ); - validateAMZ(); } public static void KILL_SMK() { displayBadge( Badge.KILL_SM ); - validateAMZ(); } public static void GOODRLPT() { diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/Dungeon.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/Dungeon.java index ac4af6755..d75639632 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/Dungeon.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/Dungeon.java @@ -660,6 +660,7 @@ public class Dungeon { private static final String CHAPTERS = "chapters"; private static final String QUESTS = "quests"; private static final String BADGES = "badges"; + private static final String ZBADGES = "z-badges"; private static final String BRANCH = "branch"; private static final String MOBS_TO_STATELING = "mobs_to_stateling"; private static final String INIT_VER = "init_ver"; @@ -735,6 +736,11 @@ public class Dungeon { Bundle badges = new Bundle(); Badges.saveLocal( badges ); bundle.put( BADGES, badges ); + + Bundle z_badges = new Bundle(); + PaswordBadges.saveLocal( z_badges ); + bundle.put( ZBADGES, z_badges ); + BloodBat.saveLevel(bundle); FileUtils.bundleToFile( GamesInProgress.gameFile(save), bundle); diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/PaswordBadges.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/PaswordBadges.java index b11069180..f91961757 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/PaswordBadges.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/PaswordBadges.java @@ -1,6 +1,5 @@ package com.shatteredpixel.shatteredpixeldungeon; -import static com.shatteredpixel.shatteredpixeldungeon.Badges.validateAMZ; import static com.shatteredpixel.shatteredpixeldungeon.Challenges.PRO; import com.shatteredpixel.shatteredpixeldungeon.messages.Messages; @@ -22,17 +21,14 @@ public class PaswordBadges { public static void KILLDWARF() { displayBadge( PaswordBadges.Badge.DRAWF_HEAD ); - validateAMZ(); } public static void KILLFIREGIRL() { displayBadge( PaswordBadges.Badge.FIREGIRL ); - validateAMZ(); } public static void KILLSAKA() { displayBadge( PaswordBadges.Badge.SAKA_DIED); - validateAMZ(); } public static void REHOMESKY() { @@ -115,7 +111,7 @@ public class PaswordBadges { loadGlobal(); } - public static final String BADGES_FILE = "badges.dat"; + public static final String ZBADGES_FILE = "z-badges.dat"; private static final String BADGES = "badges"; private static final HashSet removedBadges = new HashSet<>(); @@ -173,7 +169,7 @@ public class PaswordBadges { public static void loadGlobal() { if (global == null) { try { - Bundle bundle = FileUtils.bundleFromFile( BADGES_FILE ); + Bundle bundle = FileUtils.bundleFromFile( ZBADGES_FILE ); global = restore( bundle ); } catch (IOException e) { @@ -189,7 +185,7 @@ public class PaswordBadges { store( bundle, global ); try { - FileUtils.bundleToFile(BADGES_FILE, bundle); + FileUtils.bundleToFile(ZBADGES_FILE, bundle); saveNeeded = false; } catch (IOException e) { ShatteredPixelDungeon.reportException(e); @@ -210,7 +206,7 @@ public class PaswordBadges { if (global.contains( badge )) { if (!badge.meta) { - GLog.h( Messages.get(Badges.class, "endorsed", badge.desc()) ); + GLog.h( Messages.get(Badges.class, "endorsed", badge.title()) ); } } else { @@ -219,9 +215,9 @@ public class PaswordBadges { saveNeeded = true; if (badge.meta) { - GLog.h( Messages.get(Badges.class, "new_super", badge.desc()) ); + GLog.h( Messages.get(Badges.class, "new_super", badge.title()) ); } else { - GLog.h( Messages.get(Badges.class, "new", badge.desc()) ); + GLog.h( Messages.get(Badges.class, "new", badge.title()) ); } PixelScene.showProBadge( badge ); } diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/buffs/ChampionEnemy.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/buffs/ChampionEnemy.java index e4ecc2e79..4a68ed72a 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/buffs/ChampionEnemy.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/buffs/ChampionEnemy.java @@ -114,26 +114,30 @@ public abstract class ChampionEnemy extends Buff { Class buffCls; + int randomNumber = Random.Int(100); - switch (Random.NormalIntRange(0,6)){ - case 0: default: - buffCls = ChampionEnemy.Small.class; - break; - case 1: - buffCls = ChampionEnemy.Bomber.class; - break; - case 2: - buffCls = ChampionEnemy.Middle.class; - break; - case 3: - buffCls = ChampionEnemy.Big.class; - break; - case 4: - buffCls = ChampionEnemy.Sider.class; - break; - case 5: - buffCls = ChampionEnemy.LongSider.class; - break; + if (randomNumber < 5) { + buffCls = ChampionEnemy.LongSider.class; + } else if (randomNumber < 10) { + buffCls = ChampionEnemy.Bomber.class; + } else { + switch (randomNumber % 6) { + case 0: default: + buffCls = ChampionEnemy.Small.class; + break; + case 1: + buffCls = ChampionEnemy.Middle.class; + break; + case 2: + buffCls = ChampionEnemy.Big.class; + break; + case 3: + buffCls = ChampionEnemy.Sider.class; + break; + case 4: + buffCls = ChampionEnemy.LongSider.class; + break; + } } if (Dungeon.mobsToStateLing <= 0 && Dungeon.isChallenged(Challenges.SBSG)) { @@ -320,14 +324,14 @@ public abstract class ChampionEnemy extends Buff { } public static void rollForChampion(Mob m){ - if (Dungeon.mobsToChampion <= 0) Dungeon.mobsToChampion = 8; + if (Dungeon.mobsToChampion <= 0) Dungeon.mobsToChampion = 7; Dungeon.mobsToChampion--; //we roll for a champion enemy even if we aren't spawning one to ensure that //mobsToChampion does not affect levelgen RNG (number of calls to Random.Int() is constant) Class buffCls; - switch (Random.Int(9)){ + switch (Random.Int(8)){ case 0: default: buffCls = Blazing.class; break; case 1: buffCls = Projecting.class; break; case 2: buffCls = AntiMagic.class; break; @@ -336,7 +340,7 @@ public abstract class ChampionEnemy extends Buff { case 5: buffCls = Growing.class; break; case 6: buffCls = Halo.class; break; case 7: buffCls = DelayMob.class; break; - case 8: buffCls = King.class; break; + //case 8: buffCls = King.class; break; } if (Dungeon.mobsToChampion <= 0 && Dungeon.isChallenged(Challenges.CHAMPION_ENEMIES)) { diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/hero/HeroClass.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/hero/HeroClass.java index 37af73d67..2df69e2fa 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/hero/HeroClass.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/hero/HeroClass.java @@ -54,12 +54,7 @@ import com.shatteredpixel.shatteredpixeldungeon.items.TengusMask; import com.shatteredpixel.shatteredpixeldungeon.items.Waterskin; import com.shatteredpixel.shatteredpixeldungeon.items.armor.ClothArmor; import com.shatteredpixel.shatteredpixeldungeon.items.armor.LamellarArmor; -import com.shatteredpixel.shatteredpixeldungeon.items.armor.LeatherArmor; -import com.shatteredpixel.shatteredpixeldungeon.items.armor.MailArmor; -import com.shatteredpixel.shatteredpixeldungeon.items.armor.PlateArmor; -import com.shatteredpixel.shatteredpixeldungeon.items.armor.ScaleArmor; import com.shatteredpixel.shatteredpixeldungeon.items.armor.custom.AncityArmor; -import com.shatteredpixel.shatteredpixeldungeon.items.artifacts.ChaliceOfBlood; import com.shatteredpixel.shatteredpixeldungeon.items.artifacts.CloakOfShadows; import com.shatteredpixel.shatteredpixeldungeon.items.artifacts.TalismanOfForesight; import com.shatteredpixel.shatteredpixeldungeon.items.artifacts.WraithAmulet; @@ -67,10 +62,8 @@ import com.shatteredpixel.shatteredpixeldungeon.items.bags.BookBag; import com.shatteredpixel.shatteredpixeldungeon.items.bags.HerbBag; import com.shatteredpixel.shatteredpixeldungeon.items.bags.KingBag; import com.shatteredpixel.shatteredpixeldungeon.items.bags.VelvetPouch; -import com.shatteredpixel.shatteredpixeldungeon.items.books.bookslist.BrokenBooks; import com.shatteredpixel.shatteredpixeldungeon.items.books.bookslist.DimandBook; import com.shatteredpixel.shatteredpixeldungeon.items.books.bookslist.TestBooks; -import com.shatteredpixel.shatteredpixeldungeon.items.books.bookslist.YellowSunBooks; import com.shatteredpixel.shatteredpixeldungeon.items.food.Food; import com.shatteredpixel.shatteredpixeldungeon.items.food.MeatPie; import com.shatteredpixel.shatteredpixeldungeon.items.potions.PotionOfExperience; @@ -78,7 +71,6 @@ import com.shatteredpixel.shatteredpixeldungeon.items.potions.PotionOfHealing; import com.shatteredpixel.shatteredpixeldungeon.items.potions.PotionOfInvisibility; import com.shatteredpixel.shatteredpixeldungeon.items.potions.PotionOfLightningShiledX; import com.shatteredpixel.shatteredpixeldungeon.items.potions.PotionOfLiquidFlame; -import com.shatteredpixel.shatteredpixeldungeon.items.potions.PotionOfLiquidFlameX; import com.shatteredpixel.shatteredpixeldungeon.items.potions.PotionOfMindVision; import com.shatteredpixel.shatteredpixeldungeon.items.potions.elixirs.WaterSoul; import com.shatteredpixel.shatteredpixeldungeon.items.potions.exotic.PotionOfLightStromCloud; @@ -93,24 +85,19 @@ import com.shatteredpixel.shatteredpixeldungeon.items.scrolls.ScrollOfUpgrade; import com.shatteredpixel.shatteredpixeldungeon.items.scrolls.exotic.ScrollOfMysticalEnergy; import com.shatteredpixel.shatteredpixeldungeon.items.spells.AquaBlast; import com.shatteredpixel.shatteredpixeldungeon.items.spells.MagicalInfusion; -import com.shatteredpixel.shatteredpixeldungeon.items.wands.WandOfCorruption; import com.shatteredpixel.shatteredpixeldungeon.items.wands.WandOfFrost; import com.shatteredpixel.shatteredpixeldungeon.items.wands.WandOfLightning; import com.shatteredpixel.shatteredpixeldungeon.items.wands.WandOfMagicMissile; import com.shatteredpixel.shatteredpixeldungeon.items.wands.WandOfRegrowth; -import com.shatteredpixel.shatteredpixeldungeon.items.wands.WandOfScale; import com.shatteredpixel.shatteredpixeldungeon.items.weapon.SpiritBow; import com.shatteredpixel.shatteredpixeldungeon.items.weapon.melee.BloodthirstyThorn; import com.shatteredpixel.shatteredpixeldungeon.items.weapon.melee.Dagger; import com.shatteredpixel.shatteredpixeldungeon.items.weapon.melee.Gloves; import com.shatteredpixel.shatteredpixeldungeon.items.weapon.melee.IceFishSword; -import com.shatteredpixel.shatteredpixeldungeon.items.weapon.melee.LifeTreeSword; import com.shatteredpixel.shatteredpixeldungeon.items.weapon.melee.LockSword; import com.shatteredpixel.shatteredpixeldungeon.items.weapon.melee.MagesStaff; import com.shatteredpixel.shatteredpixeldungeon.items.weapon.melee.MagicTorch; import com.shatteredpixel.shatteredpixeldungeon.items.weapon.melee.RedBloodMoon; -import com.shatteredpixel.shatteredpixeldungeon.items.weapon.melee.Sai; -import com.shatteredpixel.shatteredpixeldungeon.items.weapon.melee.SkyShield; import com.shatteredpixel.shatteredpixeldungeon.items.weapon.melee.WashCrime; import com.shatteredpixel.shatteredpixeldungeon.items.weapon.melee.WornShortsword; import com.shatteredpixel.shatteredpixeldungeon.items.weapon.melee.legend.DiedCrossBow; @@ -167,6 +154,7 @@ public enum HeroClass { if (Dungeon.isChallenged(Challenges.PRO)){ + new LevelTeleporter().quantity(1).identify().collect(); new LockSword().quantity(1).identify().collect(); new IceFishSword().quantity(1).identify().collect(); new PotionOfInvisibility().quantity(45).identify().collect(); @@ -206,30 +194,14 @@ public enum HeroClass { new ScrollOfMysticalEnergy().quantity(1).identify().collect(); new AquaBlast().quantity(1).identify().collect(); new TestBooks().quantity(1).identify().collect(); - new WandOfCorruption().quantity(1).identify().collect(); - new ChaliceOfBlood().quantity(1).identify().collect(); - new LifeTreeSword().quantity(1).identify().collect(); - new Sai().quantity(1).identify().collect(); - new MagicTorch().quantity(1).identify().collect(); - new SkyShield().quantity(1).identify().collect(); - new WandOfScale().quantity(1).identify().collect(); + new KingsCrown().quantity(1).identify().collect(); new PotionOfLightningShiledX().quantity(1).identify().collect(); - new LevelTeleporter().quantity(1).identify().collect(); - new MobPlacer().quantity(1).identify().collect(); + new RedBloodMoon().quantity(1).identify().collect(); new KingBag().quantity(1).identify().collect(); - new PotionOfLiquidFlameX().quantity(100).identify().collect(); - new YellowSunBooks().quantity(1).identify().collect(); - new BrokenBooks().quantity(12).identify().collect(); new HaloDart().quantity(100).identify().collect(); new ScrollOfFlameCursed().quantity(44).identify().collect(); - - new MailArmor().quantity(1).identify().collect(); - new LeatherArmor().quantity(1).identify().collect(); - new ScaleArmor().quantity(1).identify().collect(); - new PlateArmor().quantity(1).identify().collect(); - Dungeon.gold = 600000000; hero.STR = 27; hero.lvl = 30; diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/mobs/Mob.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/mobs/Mob.java index f2738bec0..4b4c37173 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/mobs/Mob.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/mobs/Mob.java @@ -21,6 +21,7 @@ package com.shatteredpixel.shatteredpixeldungeon.actors.mobs; +import static com.shatteredpixel.shatteredpixeldungeon.Badges.global; import static com.shatteredpixel.shatteredpixeldungeon.Challenges.DHXD; import static com.shatteredpixel.shatteredpixeldungeon.Difficulty.DifficultyConduct.EASY; import static com.shatteredpixel.shatteredpixeldungeon.Difficulty.DifficultyConduct.HARD; @@ -34,6 +35,7 @@ import com.shatteredpixel.shatteredpixeldungeon.Challenges; import com.shatteredpixel.shatteredpixeldungeon.Conducts; import com.shatteredpixel.shatteredpixeldungeon.Difficulty; import com.shatteredpixel.shatteredpixeldungeon.Dungeon; +import com.shatteredpixel.shatteredpixeldungeon.PaswordBadges; import com.shatteredpixel.shatteredpixeldungeon.Statistics; import com.shatteredpixel.shatteredpixeldungeon.actors.Actor; import com.shatteredpixel.shatteredpixeldungeon.actors.Char; @@ -89,6 +91,7 @@ import java.util.ArrayList; import java.util.Collections; import java.util.Comparator; import java.util.HashSet; +import java.util.List; public abstract class Mob extends Char { @@ -864,6 +867,15 @@ public abstract class Mob extends Char { // Analytics.trackBossBeaten(this); // } + PaswordBadges.loadGlobal(); + List passwordbadges = PaswordBadges.filtered( true ); + if (global.contains( Badges.Badge.KILL_APPLE ) && global.contains( Badges.Badge.KILL_DM720 ) && + global.contains( Badges.Badge.KILL_MG) && passwordbadges.contains(PaswordBadges.Badge.FIREGIRL) && passwordbadges.contains(PaswordBadges.Badge.DRAWF_HEAD) && passwordbadges.contains(PaswordBadges.Badge.SAKA_DIED)) { + + PaswordBadges.Badge badge = PaswordBadges.Badge.SPICEALBOSS; + PaswordBadges.displayBadge( badge ); + } + if (cause == Chasm.class){ //50% chance to round up, 50% to round down if (EXP % 2 == 1) EXP += Random.Int(2); diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/mobs/bosses/CrystalDiedTower.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/mobs/bosses/CrystalDiedTower.java index e563a6e8c..4062ed080 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/mobs/bosses/CrystalDiedTower.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/mobs/bosses/CrystalDiedTower.java @@ -30,6 +30,11 @@ public class CrystalDiedTower extends Mob { state = HUNTING; } + @Override + public boolean interact(Char c) { + return true; + } + @Override public void damage( int dmg, Object src ) { } diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/mobs/bosses/DiamondKnight.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/mobs/bosses/DiamondKnight.java index 1e8c16cf6..bf883964e 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/mobs/bosses/DiamondKnight.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/mobs/bosses/DiamondKnight.java @@ -278,6 +278,8 @@ public class DiamondKnight extends Boss { Badges.KILL_SMK(); + + if(Statistics.dimandchestmazeCollected>=3){ PaswordBadges.validateOMP(); Statistics.bossScores[1] += 1000; diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/mobs/bosses/FireDragon.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/mobs/bosses/FireDragon.java new file mode 100644 index 000000000..07ede6bb4 --- /dev/null +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/mobs/bosses/FireDragon.java @@ -0,0 +1,13 @@ +package com.shatteredpixel.shatteredpixeldungeon.actors.mobs.bosses; + +import com.shatteredpixel.shatteredpixeldungeon.actors.Boss; +import com.shatteredpixel.shatteredpixeldungeon.sprites.FireDragonSprite; + +public class FireDragon extends Boss { + { + initProperty(); + initBaseStatus(10, 20, 15, 15, 300, 8, 12); + initStatus(60); + spriteClass = FireDragonSprite.class; + } +} diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/mobs/bosses/SakaFishBoss.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/mobs/bosses/SakaFishBoss.java index e28581468..159c91f6a 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/mobs/bosses/SakaFishBoss.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/mobs/bosses/SakaFishBoss.java @@ -148,9 +148,9 @@ public class SakaFishBoss extends Boss { public int damageRoll() { AncientMysteryCityBossLevel.State level = ((AncientMysteryCityBossLevel)Dungeon.level).pro(); if(level==AncientMysteryCityBossLevel.State.FALL_BOSS) - return Random.NormalIntRange(40, 75); + return Random.NormalIntRange(30, 55); else - return Random.NormalIntRange(30, 40); + return Random.NormalIntRange(20, 30); } @Override @@ -169,7 +169,7 @@ public class SakaFishBoss extends Boss { @Override public int drRoll() { AncientMysteryCityBossLevel.State level = ((AncientMysteryCityBossLevel)Dungeon.level).pro(); - return level == AncientMysteryCityBossLevel.State.FALL_BOSS ? 10 : 40; + return level == AncientMysteryCityBossLevel.State.FALL_BOSS ? 10 : 35; } diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/custom/dict/DictSpriteSheet.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/custom/dict/DictSpriteSheet.java index 4c433ce3d..0872cafe0 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/custom/dict/DictSpriteSheet.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/custom/dict/DictSpriteSheet.java @@ -2,6 +2,8 @@ package com.shatteredpixel.shatteredpixeldungeon.custom.dict; import com.shatteredpixel.shatteredpixeldungeon.Assets; import com.shatteredpixel.shatteredpixeldungeon.sprites.BruteBotSprite; +import com.shatteredpixel.shatteredpixeldungeon.sprites.ClearElementalSprites; +import com.shatteredpixel.shatteredpixeldungeon.sprites.ColdGuardSprite; import com.shatteredpixel.shatteredpixeldungeon.sprites.ColdRatSprite; import com.shatteredpixel.shatteredpixeldungeon.sprites.FireAcidicSprite; import com.shatteredpixel.shatteredpixeldungeon.sprites.FlameBoiSprite; @@ -16,13 +18,13 @@ import com.shatteredpixel.shatteredpixeldungeon.sprites.OGPDLLSTT; import com.shatteredpixel.shatteredpixeldungeon.sprites.OGPDNQHZTT; import com.shatteredpixel.shatteredpixeldungeon.sprites.OGPDZSLSTT; import com.shatteredpixel.shatteredpixeldungeon.sprites.PoltergeistSprite; -import com.shatteredpixel.shatteredpixeldungeon.sprites.RedNecromancerSprite; import com.shatteredpixel.shatteredpixeldungeon.sprites.RedSwarmSprite; import com.shatteredpixel.shatteredpixeldungeon.sprites.SRPDHBLRTT; import com.shatteredpixel.shatteredpixeldungeon.sprites.SRPDICLRTT; +import com.shatteredpixel.shatteredpixeldungeon.sprites.STenguSprite; +import com.shatteredpixel.shatteredpixeldungeon.sprites.SalamanderSprites; import com.shatteredpixel.shatteredpixeldungeon.sprites.ShieldHuntsmanSprite; import com.shatteredpixel.shatteredpixeldungeon.sprites.SpectralNecromancerSprite; -import com.shatteredpixel.shatteredpixeldungeon.sprites.TenguSprite; import com.watabou.noosa.Image; public class DictSpriteSheet { @@ -81,8 +83,8 @@ public class DictSpriteSheet { return new FlameBoiSprite(); case GNOLL: return new Image(Assets.Sprites.GNOLL, 0, 0, 12, 15); - case XTG: - return new TenguSprite(); + case STX: + return new SalamanderSprites(); case XHDD: return new MurdererSprite.RedMuderer(); case IAX: @@ -91,10 +93,16 @@ public class DictSpriteSheet { return new FireAcidicSprite(); case IAS: return new IceGolemSprite(); + case BRTX: + return new BruteBotSprite(); + case GOO: + return new STenguSprite(); + case GKS: + return new ColdGuardSprite(); case CAX: return new SRPDICLRTT(); - case REDBS: - return new RedNecromancerSprite(); + case CLEARS: + return new ClearElementalSprites(); case SLXJ: return new SpectralNecromancerSprite(); case BMHR: @@ -286,8 +294,8 @@ public class DictSpriteSheet { public static final int BLACK = 218 + 10000; public static final int MOLO = 219 + 10000; public static final int FLAME = 220 + 10000; - public static final int XTG = 221 + 10000; - public static final int REDBS = 222 + 10000; + public static final int STX = 221 + 10000; + public static final int CLEARS = 222 + 10000; public static final int SLXJ = 223 + 10000; public static final int BMHR = 224 + 10000; public static final int XHDD = 225 + 10000; @@ -296,6 +304,9 @@ public class DictSpriteSheet { public static final int CAX = 228 + 10000; public static final int IAS = 229 + 10000; + public static final int BRTX = 230 + 10000; + public static final int GOO = 231 + 10000; + public static final int GKS = 232 + 10000; public static final int THIEF = 300 + 10000; public static final int BANDIT = 301 + 10000; public static final int SKELETON = 302 + 10000; diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/custom/testmode/MobPlacer.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/custom/testmode/MobPlacer.java index b4d7b44fd..6adc8f894 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/custom/testmode/MobPlacer.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/custom/testmode/MobPlacer.java @@ -16,6 +16,8 @@ import com.shatteredpixel.shatteredpixeldungeon.actors.mobs.BlackHost; import com.shatteredpixel.shatteredpixeldungeon.actors.mobs.Brute; import com.shatteredpixel.shatteredpixeldungeon.actors.mobs.BruteBot; import com.shatteredpixel.shatteredpixeldungeon.actors.mobs.CausticSlime; +import com.shatteredpixel.shatteredpixeldungeon.actors.mobs.ClearElemental; +import com.shatteredpixel.shatteredpixeldungeon.actors.mobs.ColdGurad; import com.shatteredpixel.shatteredpixeldungeon.actors.mobs.ColdMagicRat; import com.shatteredpixel.shatteredpixeldungeon.actors.mobs.Crab; import com.shatteredpixel.shatteredpixeldungeon.actors.mobs.DM100; @@ -52,6 +54,7 @@ import com.shatteredpixel.shatteredpixeldungeon.actors.mobs.RotHeart; import com.shatteredpixel.shatteredpixeldungeon.actors.mobs.RotLasher; import com.shatteredpixel.shatteredpixeldungeon.actors.mobs.SRPDHBLR; import com.shatteredpixel.shatteredpixeldungeon.actors.mobs.SRPDICLR; +import com.shatteredpixel.shatteredpixeldungeon.actors.mobs.Salamander; import com.shatteredpixel.shatteredpixeldungeon.actors.mobs.Scorpio; import com.shatteredpixel.shatteredpixeldungeon.actors.mobs.Senior; import com.shatteredpixel.shatteredpixeldungeon.actors.mobs.Shaman; @@ -67,10 +70,11 @@ import com.shatteredpixel.shatteredpixeldungeon.actors.mobs.Swarm; import com.shatteredpixel.shatteredpixeldungeon.actors.mobs.Thief; import com.shatteredpixel.shatteredpixeldungeon.actors.mobs.Warlock; import com.shatteredpixel.shatteredpixeldungeon.actors.mobs.Wraith; -import com.shatteredpixel.shatteredpixeldungeon.actors.mobs.XTG100; +import com.shatteredpixel.shatteredpixeldungeon.actors.mobs.XTG200; import com.shatteredpixel.shatteredpixeldungeon.custom.dict.DictSpriteSheet; import com.shatteredpixel.shatteredpixeldungeon.custom.messages.M; import com.shatteredpixel.shatteredpixeldungeon.items.scrolls.ScrollOfTeleportation; +import com.shatteredpixel.shatteredpixeldungeon.items.wands.WandOfAnmy; import com.shatteredpixel.shatteredpixeldungeon.levels.Terrain; import com.shatteredpixel.shatteredpixeldungeon.scenes.CellSelector; import com.shatteredpixel.shatteredpixeldungeon.scenes.GameScene; @@ -112,8 +116,8 @@ public class MobPlacer extends TestItem{ eliteBuffs.add(ChampionEnemy.Growing.class); eliteBuffs.add(ChampionEnemy.Projecting.class); eliteBuffs.add(ChampionEnemy.Halo.class); - eliteBuffs.add(ChampionEnemy.King.class); eliteBuffs.add(ChampionEnemy.DelayMob.class); + eliteBuffs.add(WandOfAnmy.AllyToRestartOK.class); eliteBuffs.add(ChampionEnemy.Small.class); eliteBuffs.add(ChampionEnemy.Bomber.class); @@ -121,6 +125,7 @@ public class MobPlacer extends TestItem{ eliteBuffs.add(ChampionEnemy.Big.class); eliteBuffs.add(ChampionEnemy.Sider.class); eliteBuffs.add(ChampionEnemy.LongSider.class); + } @Override @@ -186,8 +191,8 @@ public class MobPlacer extends TestItem{ case 4: return DataPack.ELE_CHAOS.ordinal() - DataPack.DM201.ordinal() - 1; case 5: return DataPack.ACIDIC.ordinal() - DataPack.ELE_CHAOS.ordinal() - 1; case 6: return DataPack.PIRANHA.ordinal() - DataPack.ACIDIC.ordinal() - 1; - case 7: return DataPack.ZSLS.ordinal() - DataPack.NQHZ.ordinal() - 1; - case 8: default: return DataPack.SLXJ.ordinal() - DataPack.IAS.ordinal() - 1; + case 7: return DataPack.NQHZ.ordinal() - DataPack.PIRANHA.ordinal() - 1; + case 8: default: return DataPack.IAS.ordinal() - DataPack.NQHZ.ordinal() - 1; } } private int dataThreshold(int tier){ @@ -205,9 +210,9 @@ public class MobPlacer extends TestItem{ case 6: return DataPack.ACIDIC.ordinal()+1; case 7: - return DataPack.ZSLS.ordinal()+1; + return DataPack.PIRANHA.ordinal()+1; case 8: - return DataPack.SLXJ.ordinal()+1; + return DataPack.NQHZ.ordinal()+1; } } @@ -247,12 +252,12 @@ public class MobPlacer extends TestItem{ resize(WIDTH, HEIGHT); - RedButton lhs = new RedButton("<<<", 8){ + RedButton lhs = new RedButton("上一页", 6){ @Override public void onClick(){ mobTier--; - if(mobTier < 1 || mobTier>6){ - mobTier = 6; + if(mobTier < 1 || mobTier>8){ + mobTier = 8; } mobIndex = Math.min(mobIndex, maxMobIndex(mobTier)); refreshImage(); @@ -262,11 +267,11 @@ public class MobPlacer extends TestItem{ lhs.setRect(GAP, GAP, 24, 18); add(lhs); - RedButton rhs = new RedButton(">>>", 8){ + RedButton rhs = new RedButton("下一页", 6){ @Override public void onClick(){ mobTier++; - if(mobTier < 1 || mobTier > 6){ + if(mobTier < 1 || mobTier > 8){ mobTier = 1; } mobIndex = Math.min(mobIndex, maxMobIndex(mobTier)); @@ -299,23 +304,25 @@ public class MobPlacer extends TestItem{ */ float pos = 92; - for (int i = 0; i < 15; ++i) { - CheckBox cb = new CheckBox(M.L(MobPlacer.class, "elite_name" + Integer.toString(i))); + int column = 0; + for (int i = 0; i < 15 && column < 3; ++i) { + CheckBox cb = new CheckBox(M.L(MobPlacer.class, "elite_name" + i)); cb.active = true; - cb.checked((elite & (1 << i)) > 0); + cb.checked((elite_op & (1<0); add(cb); eliteOptions.add(cb); - int row = i / 3; // 计算当前复选框所在的行数 - int column = i % 3; // 计算当前复选框所在的列数 + if (column == 0) { + cb.setRect((WIDTH/3f - GAP)/3f * column, pos, (WIDTH/3f - GAP), 16); + } else if (column == 1) { + cb.setRect((WIDTH/3f - GAP)/3f * column+35, pos, (WIDTH/3f - GAP), 16); + } else { + cb.setRect((WIDTH/3f - GAP)/3f * column+70, pos, (WIDTH/3f - GAP), 16); + column = -1; // 重置column的值,使其在下一次循环时为0(即第一列) + pos += 16 + GAP; // 换行 + } - float columnWidth = WIDTH / 3f - GAP * 4f / 3f; - float rowHeight = 16 + GAP; - - float columnOffset = (WIDTH - columnWidth * 3f - GAP * 2f) / 2f; - float rowOffset = pos + row * rowHeight; // 根据行数计算当前行的垂直偏移量 - - cb.setRect(columnOffset + column * (columnWidth + GAP), rowOffset, columnWidth, 16); + column++; } @@ -480,15 +487,17 @@ public class MobPlacer extends TestItem{ Flame(FlameB01.class, DictSpriteSheet.FLAME), NQHZ(OGPDNQHZ.class, DictSpriteSheet.OGPDNQHZ), - //REDBS(RedNecromancer.class, DictSpriteSheet.REDBS), + CLEARS(ClearElemental.class, DictSpriteSheet.CLEARS), SLXJ(SpectralNecromancer.class, DictSpriteSheet.SLXJ), BMHR(ShieldHuntsman.class, DictSpriteSheet.BMHR), - XTG(XTG100.class, DictSpriteSheet.XTG), + STX(Salamander.class, DictSpriteSheet.STX), XHDD(RedMurderer.class, DictSpriteSheet.XHDD), IAX(Ice_Scorpio.class, DictSpriteSheet.IAX), FAX(Fire_Scorpio.class, DictSpriteSheet.FAX), CAX(SRPDICLR.class, DictSpriteSheet.CAX), - BRT(BruteBot.class, DictSpriteSheet.BRT), + GOO(XTG200.class,DictSpriteSheet.GOO), + IKS(ColdGurad.class,DictSpriteSheet.GKS), + BRTX(BruteBot.class, DictSpriteSheet.BRTX), IAS(IceGolem.class, DictSpriteSheet.IAS); diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/books/bookslist/TestBooks.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/books/bookslist/TestBooks.java index 6d794a975..c209669c4 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/books/bookslist/TestBooks.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/books/bookslist/TestBooks.java @@ -3,9 +3,12 @@ package com.shatteredpixel.shatteredpixeldungeon.items.books.bookslist; import com.shatteredpixel.shatteredpixeldungeon.Dungeon; import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.AnkhInvulnerability; import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Buff; +import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.InvisibilityRing; +import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.MindVision; import com.shatteredpixel.shatteredpixeldungeon.actors.hero.Hero; import com.shatteredpixel.shatteredpixeldungeon.items.Item; import com.shatteredpixel.shatteredpixeldungeon.sprites.ItemSpriteSheet; +import com.shatteredpixel.shatteredpixeldungeon.utils.GLog; import java.util.ArrayList; @@ -32,9 +35,15 @@ public class TestBooks extends Item { super.execute(hero, action); if (action.equals( Read )) { if ( Dungeon.hero.buff(AnkhInvulnerability.class) == null ) { + GLog.p("上帝模式已开启!"); Buff.prolong(hero, AnkhInvulnerability.class, AnkhInvulnerability.DURATION*1000000f); + Buff.affect(hero, InvisibilityRing.class, InvisibilityRing.DURATION*1000000f); + Buff.affect( hero, MindVision.class, MindVision.DURATION*1000000f ); } else { + GLog.n("上帝模式已关闭!"); Buff.detach( hero, AnkhInvulnerability.class ); + Buff.detach( hero, InvisibilityRing.class ); + Buff.detach( hero, MindVision.class ); } } } diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/wands/WandOfAnmy.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/wands/WandOfAnmy.java index 5504883e8..49640d456 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/wands/WandOfAnmy.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/wands/WandOfAnmy.java @@ -1,13 +1,18 @@ package com.shatteredpixel.shatteredpixeldungeon.items.wands; import com.shatteredpixel.shatteredpixeldungeon.Assets; +import com.shatteredpixel.shatteredpixeldungeon.Badges; import com.shatteredpixel.shatteredpixeldungeon.Dungeon; +import com.shatteredpixel.shatteredpixeldungeon.Statistics; import com.shatteredpixel.shatteredpixeldungeon.actors.Actor; import com.shatteredpixel.shatteredpixeldungeon.actors.Char; import com.shatteredpixel.shatteredpixeldungeon.actors.blobs.Fire; import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.AllyBuff; import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Buff; +import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.ChampionEnemy; +import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.PinCushion; import com.shatteredpixel.shatteredpixeldungeon.actors.hero.Hero; +import com.shatteredpixel.shatteredpixeldungeon.actors.mobs.Mob; import com.shatteredpixel.shatteredpixeldungeon.effects.MagicMissile; import com.shatteredpixel.shatteredpixeldungeon.items.Heap; import com.shatteredpixel.shatteredpixeldungeon.items.weapon.melee.MagesStaff; @@ -49,6 +54,70 @@ public class WandOfAnmy extends DamageWand { return 0; } + public static class AllyToRestartOK extends ChampionEnemy { + + @Override + public boolean attachTo(Char target) { + if (super.attachTo(target)){ + target.alignment = Char.Alignment.ALLY; + if (target.buff(PinCushion.class) != null){ + target.buff(PinCushion.class).detach(); + } + return true; + } else { + return false; + } + } + + //for when applying an ally buff should also cause that enemy to give exp/loot as if they had died + //consider that chars with the ally alignment do not drop items or award exp on death + public static void affectAndLoot(Mob enemy, Hero hero, Class buffCls){ + boolean droppingLoot = enemy.alignment != Char.Alignment.ALLY; + Buff.affect(enemy, buffCls); + + if (enemy.buff(buffCls) != null){ + if (droppingLoot) enemy.rollToDropLoot(); + Statistics.enemiesSlain++; + Badges.validateMonstersSlain(); + Statistics.qualifiedForNoKilling = false; + if (enemy.EXP > 0 && hero.lvl <= enemy.maxLvl) { + hero.sprite.showStatus(CharSprite.POSITIVE, Messages.get(enemy, "exp", enemy.EXP)); + hero.earnExp(enemy.EXP, enemy.getClass()); + } else { + hero.earnExp(0, enemy.getClass()); + } + } + } + @Override + public String toString() { + return Messages.get(AllyToRestart.class, "name"); + } + + @Override + public String desc() { + return Messages.get(AllyToRestart.class, "desc"); + } + + @Override + public void fx(boolean on) { + if (on) { + target.sprite.add(CharSprite.State.SHIELDED); + //Statistics.TryUsedAnmy = true; + } + else + target.sprite.remove(CharSprite.State.SHIELDED); + } + + @Override + public void tintIcon(Image icon) { + icon.hardlight(0x66bbcc); + } + + public int icon() { + return BuffIndicator.HEX; + } + } + public static class AllyToRestart extends AllyBuff { @Override diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/journal/Catalog.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/journal/Catalog.java index d48655272..989073346 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/journal/Catalog.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/journal/Catalog.java @@ -147,6 +147,7 @@ import com.shatteredpixel.shatteredpixeldungeon.items.weapon.melee.WarHammer; import com.shatteredpixel.shatteredpixeldungeon.items.weapon.melee.WashCrime; import com.shatteredpixel.shatteredpixeldungeon.items.weapon.melee.Whip; import com.shatteredpixel.shatteredpixeldungeon.items.weapon.melee.WornShortsword; +import com.shatteredpixel.shatteredpixeldungeon.items.weapon.melee.legend.DiedCrossBow; import com.watabou.utils.Bundle; import java.util.ArrayList; @@ -210,6 +211,7 @@ public enum Catalog { WEAPONS.seen.put( Greataxe.class, false); WEAPONS.seen.put( Greatshield.class, false); WEAPONS.seen.put( Gauntlet.class, false); + WEAPONS.seen.put( DiedCrossBow.class, false); WEAPONS.seen.put( LockSword.class, false); WEAPONS.seen.put( SkyShield.class, false); diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/LaveCavesBossLevel.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/LaveCavesBossLevel.java index c760ec50f..94b28338f 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/LaveCavesBossLevel.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/LaveCavesBossLevel.java @@ -1,12 +1,205 @@ package com.shatteredpixel.shatteredpixeldungeon.levels; +import com.shatteredpixel.shatteredpixeldungeon.Assets; +import com.shatteredpixel.shatteredpixeldungeon.tiles.CustomTilemap; +import com.watabou.noosa.Tilemap; +/*** + * TODO LIST + * 熔岩地块-【5层-EX子层】-火龙巢穴 + * 先决条件:在新版本不击败任何纯晶元素,在第五层解救纯晶意识集合体,与之对话,进入火龙的巢穴。 + * + * Boss档案: + * 名称:熔岩火龙 血量:300 常规攻击:9-14 + * 防御力:8 魔法防御:0 移速:正常 攻速:正常 + * 特性:每次攻击最多造成15伤害,至少需要20次攻击。 + * 性质:飞行单位 异常抗性:免疫腐化,燃烧,鬼磷,霜火 + * + * 区块描述: + * 丛林曾经没有如此的死寂,直到火龙的到来改变了这一切。它污染了曾经的森林核心“奥克拉赫”之花, + * 导致这里的守护者纯晶元素失去能量,而森林核心也成为了现在的“毒瘤”。如今我们受纯晶智能集合体的委托, + * 前往森林最底部的熔岩地块,寻找一切的罪魁祸首,熔岩火龙! + * + * Boss技能描述: + * 普攻:每3回合发射一次熔岩冲击波,造成一次烈焰区域范围。 + * + * 定向进化-毒雾缠绕: + * 若场上存在缠绕元素,火龙可在后续定向进化获得免疫毒气的能力,并且场上地图毒雾弥漫。 + * + * 定向进化-烈焰吐息: + * 若场上存在纯晶元素,火龙可在后续定向进化中获得烈焰强化冲击波,强化普通攻击 + * 定向进化-暗影行踪: + * 若场上存在暗影元素,火龙可在后续定向进化中获得暗影袭击, + * 在攻击前发起警告,并立刻隐身数回合。隐身时玩家无法攻击火龙,火龙对玩家的伤害减半。 + * + * 定向进化-集结号令: + * 若场上存在赤红元素,火龙可在后续定向进化中获得集结号令。 + * 此时火龙召唤两个分身。并且移速提升。分身仅获得本体的25%伤害。 + * + * 定向进化-狂野攻击: + * 若场上存在紫晶元素,火龙可在后续定向进化中获得狂野攻击。此时火龙每隔10回合立刻尝试锁定玩家, + * 该技能有30%失败,一旦成功,玩家会失去3回合,并且受到普攻3次伤害+3级流血伤害 + * + * 阶段说明: + * + * 第一阶段:(300-200) + * 火龙进行常规性攻击,在此期间会每隔7回合随机召唤各种元素。 + * 元素没有任何攻击能力,但会周期性攻击玩家赋予Debuff, + * 当场上高于4个元素时,火龙会随机污染一个元素获得对应的定向进化。 + * + * 第二阶段:(<200-100) + * 火龙立刻失去全部定向进化,进入短暂无敌时间。 + * 火龙的攻击在无敌时间频率更加频繁,且无敌时间结束后直接随机定向进化两个词条。赋予玩家极度燃烧的Debuff,在燃烧阈值满后,立刻造成25%的玩家最大血量伤害。 + * + * 第三阶段(<100) + * 火龙立刻获得1000护盾,但失去攻击能力。火龙试图逃离丛林,利用纯晶集合体给的物品击中火龙四次,火龙将被彻底击败,并使用火龙之心净化丛林,整场战斗结束。 + * + * + * 成就徽章: + * 屠龙勇士—击败丛林的真正罪魁祸首“熔岩火龙” + * 丛林英雄—击败熔岩火龙并净化丛林 + * + * 加密徽章: + * 熔岩审判-在岩浆地块下给予火龙最后一击! + * + * 后续剧情: + * 1.纯晶元素将在后续丛林新档中变为中立,不会主动攻击玩家 + * 2.在下半段更新中,会有额外剧情 + * 3.在今后的旅程中, + * 毒苹果将有概率变成奥克拉赫之花考验冒险者的意志。 + * */ public class LaveCavesBossLevel extends Level{ + private static final short W = Terrain.WALL; + + private static final short R = Terrain.WATER; + + private static final short Y = Terrain.EMPTY; + + private static final short X = Terrain.ENTRANCE; + + private static final short G = Terrain.HIGH_GRASS; + + private static final short D = Terrain.SECRET_DOOR; + private static final short M = Terrain.WELL; + private static final short L= Terrain.PEDESTAL; + private static final int[] codedMap = { + W,W,W,W,W,W,W,W,W,W,W,W,W,W,W,W,W,W,W,W,W,W,W,W,W,W,W,W,W,W,W,W, + W,W,W,W,W,W,W,W,W,W,W,W,W,W,W,W,W,W,W,W,W,W,W,Y,Y,W,W,W,W,W,W,W, + W,W,W,W,W,W,W,W,R,R,R,R,R,R,R,R,R,R,R,R,R,R,R,Y,Y,W,W,W,W,W,W,W, + W,W,W,W,W,W,R,R,R,R,R,R,R,R,R,R,R,R,R,R,Y,R,R,R,R,W,W,W,W,W,W,W, + W,W,W,W,R,R,R,R,R,R,R,R,R,R,Y,Y,R,R,Y,R,R,R,R,R,Y,W,W,W,W,W,W,W, + W,W,W,R,R,R,R,R,R,R,R,R,R,Y,G,Y,Y,Y,Y,R,R,R,R,Y,R,W,W,W,W,W,W,W, + W,W,W,R,R,R,R,R,R,R,R,R,Y,Y,Y,Y,Y,Y,Y,Y,R,R,R,R,R,W,W,W,W,W,W,W, + W,W,R,R,R,R,R,R,R,R,R,R,Y,Y,Y,Y,Y,R,R,Y,Y,R,R,R,Y,R,W,W,W,W,W,W, + W,W,R,R,R,R,R,Y,Y,Y,Y,Y,Y,Y,Y,Y,Y,R,R,R,Y,Y,Y,Y,Y,Y,R,R,W,W,W,W, + W,W,R,Y,Y,Y,Y,Y,Y,Y,Y,Y,Y,Y,Y,Y,Y,R,R,R,Y,Y,Y,Y,Y,R,R,R,Y,Y,W,W, + W,R,Y,Y,Y,Y,R,R,Y,Y,Y,Y,Y,Y,L,Y,Y,Y,R,R,Y,Y,Y,Y,Y,R,R,R,Y,Y,W,W, + W,R,Y,R,R,R,R,R,R,Y,Y,Y,Y,Y,Y,Y,Y,Y,Y,Y,Y,Y,Y,Y,Y,Y,Y,R,R,R,W,W, + W,Y,Y,R,R,R,R,R,R,R,Y,Y,Y,Y,Y,Y,Y,Y,Y,Y,Y,R,R,Y,R,R,Y,Y,R,R,W,W, + W,Y,Y,R,R,R,R,R,R,R,Y,Y,Y,Y,Y,Y,Y,Y,Y,Y,R,R,R,R,R,R,Y,Y,R,R,W,W, + W,Y,R,R,R,R,Y,Y,R,R,R,R,Y,Y,Y,Y,Y,Y,Y,Y,R,R,R,R,R,R,R,Y,Y,R,W,W, + W,Y,R,R,R,R,R,Y,R,R,R,R,Y,Y,Y,Y,Y,Y,R,R,Y,Y,Y,R,R,R,R,Y,Y,R,W,W, + W,Y,R,R,R,R,R,Y,Y,R,R,R,Y,Y,Y,Y,Y,R,R,R,R,Y,R,R,R,R,R,Y,Y,R,W,W, + W,Y,R,R,R,R,R,R,Y,Y,R,R,Y,Y,Y,R,R,R,R,R,R,R,R,R,R,R,Y,Y,Y,R,W,W, + W,Y,Y,R,R,R,R,R,R,R,R,Y,Y,R,R,R,R,R,R,R,R,R,R,R,R,R,Y,Y,Y,Y,W,W, + W,R,Y,R,R,R,R,Y,R,R,R,R,R,R,R,R,R,R,Y,R,R,R,R,R,R,Y,Y,Y,R,W,W,W, + W,R,Y,Y,R,R,Y,Y,Y,R,R,R,R,R,R,Y,Y,Y,Y,R,R,R,R,R,Y,Y,Y,R,R,W,W,W, + W,R,R,Y,Y,Y,Y,Y,Y,R,R,Y,R,R,Y,R,R,R,R,Y,R,R,R,Y,Y,Y,R,R,R,W,W,W, + W,R,R,Y,Y,Y,Y,Y,Y,Y,Y,Y,Y,Y,Y,R,R,R,R,R,R,Y,Y,Y,R,R,R,W,W,W,W,W, + W,R,R,Y,Y,Y,Y,Y,Y,Y,Y,Y,Y,Y,Y,Y,R,R,R,R,R,Y,Y,R,R,R,R,W,W,W,W,W, + W,W,R,R,Y,Y,Y,Y,Y,Y,Y,Y,Y,Y,Y,Y,Y,R,R,R,R,Y,Y,Y,Y,Y,Y,W,W,W,W,W, + W,W,W,R,R,Y,Y,Y,Y,Y,Y,Y,Y,Y,Y,Y,Y,Y,Y,Y,Y,Y,Y,W,W,W,W,W,W,W,W,W, + W,W,W,R,R,R,Y,Y,R,R,Y,Y,Y,X,Y,Y,Y,Y,W,W,W,W,D,W,W,W,W,W,W,W,W,W, + W,W,W,W,R,R,Y,Y,R,R,R,R,Y,Y,Y,Y,Y,Y,W,W,W,W,Y,Y,G,G,Y,R,R,G,W,W, + W,W,W,W,W,R,R,Y,R,R,R,R,R,Y,Y,Y,Y,W,W,W,W,W,Y,G,Y,G,Y,Y,Y,Y,W,W, + W,W,W,W,W,W,R,R,Y,R,R,R,R,R,Y,Y,Y,W,W,W,W,W,Y,Y,R,R,R,Y,M,Y,W,W, + W,W,W,W,W,W,W,W,W,R,Y,R,R,R,Y,Y,Y,W,W,W,W,W,Y,Y,Y,Y,Y,Y,Y,Y,W,W, + W,W,W,W,W,W,W,W,W,W,W,W,W,W,W,W,W,W,W,W,W,W,W,W,W,W,W,W,W,W,W,W, + + }; + + /** * @return */ @Override protected boolean build() { - return false; + + setSize(32, 32); + + map = codedMap.clone(); + + CustomTilemap vis = new townBehind(); + vis.pos(0, 0); + customTiles.add(vis); + //((GameScene) RPD.scene()).addCustomTile(vis); + + + + buildFlagMaps(); + cleanWalls(); + + + entrance = 32*15 + 23; + + return true; + } + + public static class townBehind extends CustomTilemap { + + { + texture = Assets.Environment.LAVACAVE_OP; + + tileW = 32; + tileH = 32; + } + + final int TEX_WIDTH = 32*16; + + @Override + public Tilemap create() { + + Tilemap v = super.create(); + + int[] data = mapSimpleImage(0, 0, TEX_WIDTH); + + v.map(data, tileW); + return v; + } + + } + + public static class townAbove extends CustomTilemap { + + { + texture = Assets.Environment.LAVACAVE_PO; + + tileW = 32; + tileH = 32; + } + + final int TEX_WIDTH = 32*16; + + @Override + public Tilemap create() { + + Tilemap v = super.create(); + + int[] data = mapSimpleImage(0, 0, TEX_WIDTH); + + v.map(data, tileW); + return v; + } + + } + + @Override + public String tilesTex() { + return Assets.Environment.TILES_FIRE; + } + + @Override + public String waterTex() { + return Assets.Environment.WATER_HALLS; } /** diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/scenes/GameScene.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/scenes/GameScene.java index 3e12ed3bd..8013b60f9 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/scenes/GameScene.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/scenes/GameScene.java @@ -33,6 +33,7 @@ import com.shatteredpixel.shatteredpixeldungeon.Chrome; import com.shatteredpixel.shatteredpixeldungeon.Conducts; import com.shatteredpixel.shatteredpixeldungeon.Dungeon; import com.shatteredpixel.shatteredpixeldungeon.GamesInProgress; +import com.shatteredpixel.shatteredpixeldungeon.PaswordBadges; import com.shatteredpixel.shatteredpixeldungeon.Rankings; import com.shatteredpixel.shatteredpixeldungeon.SPDSettings; import com.shatteredpixel.shatteredpixeldungeon.ShatteredPixelDungeon; @@ -766,7 +767,7 @@ public class GameScene extends PixelScene { scene = null; Badges.saveGlobal(); Journal.saveGlobal(); - + PaswordBadges.saveGlobal(); super.destroy(); } @@ -797,6 +798,7 @@ public class GameScene extends PixelScene { try { Dungeon.saveAll(); Badges.saveGlobal(); + PaswordBadges.saveGlobal(); Journal.saveGlobal(); } catch (IOException e) { ShatteredPixelDungeon.reportException(e); diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/sprites/FireDragonSprite.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/sprites/FireDragonSprite.java new file mode 100644 index 000000000..2d6db95bc --- /dev/null +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/sprites/FireDragonSprite.java @@ -0,0 +1,28 @@ +package com.shatteredpixel.shatteredpixeldungeon.sprites; + +import com.shatteredpixel.shatteredpixeldungeon.Assets; +import com.watabou.noosa.TextureFilm; + +public class FireDragonSprite extends MobSprite { + public FireDragonSprite() { + super(); + + texture( Assets.Sprites.FRDG ); + + TextureFilm frames = new TextureFilm( texture, 24, 24 ); + + idle = new Animation( 8, true ); + idle.frames( frames, 4,5,9,10,11 ); + + run = new Animation( 8, true ); + run.frames( frames, 1, 2, 1, 2 ); + + attack = new Animation( 15, false ); + attack.frames( frames, 3, 4, 3, 4 ); + + die = new Animation( 7, false ); + die.frames( frames, 10,11,12); + + play( idle ); + } +} diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/ui/MenuPane.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/ui/MenuPane.java index b3d9d0653..a237e43ab 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/ui/MenuPane.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/ui/MenuPane.java @@ -84,7 +84,7 @@ public class MenuPane extends Component { add(depthIcon); if(Dungeon.depth < 0){ - depthText = new BitmapText( "S", PixelScene.pixelFont); + depthText = new BitmapText( "?", PixelScene.pixelFont); } else { depthText = new BitmapText(Integer.toString(Dungeon.depth), PixelScene.pixelFont); } diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/ui/changelist/mlpd/vM0_6_7_X_Changes.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/ui/changelist/mlpd/vM0_6_7_X_Changes.java index a5be52f13..425955975 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/ui/changelist/mlpd/vM0_6_7_X_Changes.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/ui/changelist/mlpd/vM0_6_7_X_Changes.java @@ -20,6 +20,7 @@ import com.shatteredpixel.shatteredpixeldungeon.sprites.DM720Sprite; import com.shatteredpixel.shatteredpixeldungeon.sprites.DiedMonkLoaderSprite; import com.shatteredpixel.shatteredpixeldungeon.sprites.DimandKingSprite; import com.shatteredpixel.shatteredpixeldungeon.sprites.FireCrystalSprites; +import com.shatteredpixel.shatteredpixeldungeon.sprites.FireDragonSprite; import com.shatteredpixel.shatteredpixeldungeon.sprites.FlameBoiSprite; import com.shatteredpixel.shatteredpixeldungeon.sprites.GhostSprite; import com.shatteredpixel.shatteredpixeldungeon.sprites.IceFireScorpioSprite; @@ -119,7 +120,7 @@ public class vM0_6_7_X_Changes { } public static void add_v0_6_56_Changes( ArrayList changeInfos ) { - ChangeInfo changes = new ChangeInfo("Coming Soon V0.6.5.0-Alpha3", true, ""); + ChangeInfo changes = new ChangeInfo("Coming Soon V0.6.5.0-Alpha7", true, ""); changes.hardlight(Window.CBLACK); changeInfos.add(changes); @@ -141,6 +142,37 @@ public class vM0_6_7_X_Changes { changes.addButton(new ChangeButton(i, ("熔岩火龙"), ("丛林暴乱的真相"))); + changes = new ChangeInfo("v0.6.5.0-Alpha3", true, ""); + changes.hardlight(Window.TITLE_COLOR); + changeInfos.add(changes); + + changes = new ChangeInfo("新内容", false, null); + changes.hardlight(Window.GREEN_COLOR); + changeInfos.add(changes); + + changes.addButton(new ChangeButton(Icons.get(Icons.CHALLENGE_ON), ("开发者模式更新"), + ("添加了更多开发者选项,优化了一些问题,怪物放置器支持电子斗蛐蛐"))); + + Image dragonSprite = new FireDragonSprite(); + dragonSprite.scale.set(PixelScene.align(0.72f)); + changes.addButton(new ChangeButton(dragonSprite, ("熔岩火龙资源预载"), + ("丛林额外Boss-熔岩火龙资源预载,预计将在Alpha7加入。"))); + + changes = new ChangeInfo("改动", false, null); + changes.hardlight(Window.CYELLOW); + changeInfos.add(changes); + + changes.addButton(new ChangeButton(new ItemSprite(ItemSpriteSheet.DIEDCROSSBOW), ("重型弩炮"), + ("现在不需要飞镖作为弹药,但有装填时间。"))); + + Image xa = new SakaFishBossSprites(); + xa.scale.set(PixelScene.align(0.72f)); + changes.addButton(new ChangeButton(xa, "萨卡班甲鱼", + "初始防御调为35,常规伤害降低。")); + + changes.addButton(new ChangeButton(new Image("sprites/spinner.png", 144, 0, 16, 16), + Messages.get(ChangesScene.class, "bugfixes"), Messages.get(vM0_6_7_X_Changes.class, "bug_06X84"))); + changes = new ChangeInfo("v0.6.5.0-Alpha1-2", true, ""); changes.hardlight(Window.TITLE_COLOR); changeInfos.add(changes); From dec3b2bd771f5434f26e2d8ba90770f4e08132bb Mon Sep 17 00:00:00 2001 From: LingASDJ <2735951230@qq.com> Date: Sat, 23 Sep 2023 03:00:53 +0800 Subject: [PATCH 09/13] Fixed Less Question --- core/src/main/assets/messages/misc/misc.properties | 4 ++-- core/src/main/assets/messages/windows/windows.properties | 3 +++ .../shatteredpixeldungeon/actors/buffs/ChampionEnemy.java | 5 +---- .../items/weapon/melee/legend/DiedCrossBow.java | 4 +--- .../shatteredpixel/shatteredpixeldungeon/windows/WndDLC.java | 5 ----- 5 files changed, 7 insertions(+), 14 deletions(-) diff --git a/core/src/main/assets/messages/misc/misc.properties b/core/src/main/assets/messages/misc/misc.properties index 71bc74225..e5813f2e3 100644 --- a/core/src/main/assets/messages/misc/misc.properties +++ b/core/src/main/assets/messages/misc/misc.properties @@ -279,8 +279,8 @@ paswordbadges$badge.reset_day.desc=携带神秘生物的遗物离开地牢,完 paswordbadges$badge.take_item.title=宝藏探索者 paswordbadges$badge.take_item.desc=获得宝藏迷宫的三个隐藏宝藏,切记,对决不是拟态王的本意。 -paswordbadges$badge.allcs.title=履险蹈危 -paswordbadges$badge.allcs.desc=开启13项以上挑战通关,你就是传说中的救世主吗? +paswordbadges$badge.allcsx.title=履险蹈危 +paswordbadges$badge.allcsx.desc=开启13项以上挑战通关,看来你已准备好踏上新的征途…… paswordbadges$badge.big_x.title=突变风波 paswordbadges$badge.big_x.desc=基因突变开启通关!你见证了地牢的突变体,同时也看见了玩火必自焚的道理……\n\n_奖励:0层随机护甲(四大基座上)_ diff --git a/core/src/main/assets/messages/windows/windows.properties b/core/src/main/assets/messages/windows/windows.properties index b0ef6d083..87bd3fbff 100644 --- a/core/src/main/assets/messages/windows/windows.properties +++ b/core/src/main/assets/messages/windows/windows.properties @@ -506,6 +506,9 @@ conducts.bossrush_desc=被你击败过多次的首领们熟识了英雄的技能 conducts.moneyletgo=黄金时代 conducts.moneyletgo_desc=地牢终于赶上了淘金热的时代,在这个金钱的时代,地牢中几乎所有东西都被明码标价。商人们因此赚的盆满钵满,所以他们打算商店打5折。\n然而,金钱的背后是利益的驱使,她已知晓地牢的现状,现在怪物都会可能额外掉落金币,随着地牢的深入,该项能力越来越弱。\n\n-_深度调查模式仅可选择一种模式游玩。且无法计入多挑徽章中。_ +conducts.seadlc=沧溟与湛蓝遗迹(DLC) +conducts.seadlc_desc= 自冒险家们调查地牢以来,我们经历了诸多事件。\n但世界之广袤,地牢只是其中一个很小的区域。除开地牢自身的重重谜团,世界上仍然有很多未解之事等待我们去揭晓。我们接到了来自霜落帝国的委托,我们将前往远处的大海深处调查有关于湛蓝遗迹的事情。\n相传这里是某位魔女的沉睡之地。废弃的遗址已没入深海,原有的活物已被深海居民吞噬殆尽。这里暗涛汹涌,危机四伏。 + windows.wnddlcx.title=难度选择-Beta difficulty.null=默认难度(一般) difficulty.easy=简单 diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/buffs/ChampionEnemy.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/buffs/ChampionEnemy.java index 4a68ed72a..d4d3a59f3 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/buffs/ChampionEnemy.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/buffs/ChampionEnemy.java @@ -121,7 +121,7 @@ public abstract class ChampionEnemy extends Buff { } else if (randomNumber < 10) { buffCls = ChampionEnemy.Bomber.class; } else { - switch (randomNumber % 6) { + switch (randomNumber % 5) { case 0: default: buffCls = ChampionEnemy.Small.class; break; @@ -134,9 +134,6 @@ public abstract class ChampionEnemy extends Buff { case 3: buffCls = ChampionEnemy.Sider.class; break; - case 4: - buffCls = ChampionEnemy.LongSider.class; - break; } } diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/weapon/melee/legend/DiedCrossBow.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/weapon/melee/legend/DiedCrossBow.java index 135f0fa4b..0a9d869b2 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/weapon/melee/legend/DiedCrossBow.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/weapon/melee/legend/DiedCrossBow.java @@ -11,7 +11,6 @@ import com.shatteredpixel.shatteredpixeldungeon.effects.particles.BlastParticle; import com.shatteredpixel.shatteredpixeldungeon.effects.particles.SmokeParticle; import com.shatteredpixel.shatteredpixeldungeon.items.bombs.Bomb; import com.shatteredpixel.shatteredpixeldungeon.items.weapon.SpiritBow; -import com.shatteredpixel.shatteredpixeldungeon.items.weapon.missiles.darts.Dart; import com.shatteredpixel.shatteredpixeldungeon.items.weapon.missiles.darts.TippedDart; import com.shatteredpixel.shatteredpixeldungeon.mechanics.Ballistica; import com.shatteredpixel.shatteredpixeldungeon.messages.Messages; @@ -103,8 +102,7 @@ public class DiedCrossBow extends LegendWeapon { if (target != null) { final Ballistica shot = new Ballistica( curUser.pos, target, target); int cell = shot.collisionPos; - Dart missile = Dungeon.hero.belongings.getItem(Dart.class); - missile.quantity -= 5; + if (Actor.findChar(target) != null) { QuickSlotButton.target(Actor.findChar(target)); } else { diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/windows/WndDLC.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/windows/WndDLC.java index f73676dc2..3a64da429 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/windows/WndDLC.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/windows/WndDLC.java @@ -30,11 +30,6 @@ public class WndDLC extends Window { private boolean editable; private ArrayList infos = new ArrayList<>(); private ArrayList boxes = new ArrayList<>(); - private ScrollPane pane; - - public WndDLC( Conducts.Conduct conduct, boolean editable){ - new WndDLC(new Conducts.ConductStorage(conduct), editable); - } public WndDLC(Conducts.ConductStorage conducts, boolean editable ) { From a14cfe9d278efbcb0ed50441e316c1ea87ba01bf Mon Sep 17 00:00:00 2001 From: LingASDJ <2735951230@qq.com> Date: Sat, 23 Sep 2023 19:42:22 +0800 Subject: [PATCH 10/13] update 0.6.5.0-Alpha4 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit -1.电子斗蛐蛐v0.2更新 -2.改善一些界面 修复一些问题 -3.更多查阅游戏更新记录 --- build.gradle | 4 +- .../custom_tiles/lavecave_behind.png | Bin 52685 -> 52768 bytes core/src/main/assets/interfaces/badges.png | Bin 21560 -> 22058 bytes .../assets/messages/actors/actors.properties | 36 +- .../messages/actors/actors_ja.properties | 2 +- .../assets/messages/items/items.properties | 7 +- .../main/assets/messages/misc/misc.properties | 6 +- .../src/main/assets/messages/ui/ui.properties | 6 +- .../messages/windows/windows_ja.properties | 2 +- .../shatteredpixeldungeon/Badges.java | 10 +- .../actors/mobs/Salamander.java | 7 + .../actors/mobs/spical/GooMob.java | 247 ++++++++++++++ .../actors/mobs/spical/SlimeKingMob.java | 319 ++++++++++++++++++ .../custom/dict/DictSpriteSheet.java | 24 +- .../custom/testmode/MobPlacer.java | 78 +++-- .../items/bags/MagicalHolster.java | 3 +- .../items/wands/WandOfAnmy.java | 29 +- .../weapon/melee/legend/DiedCrossBow.java | 20 +- .../weapon/melee/legend/LegendWeapon.java | 3 +- .../levels/LaveCavesBossLevel.java | 15 +- .../shatteredpixeldungeon/levels/Terrain.java | 3 + .../scenes/NewsScene.java | 15 +- .../sprites/CharSprite.java | 17 +- .../sprites/SkullShamanSprite.java | 8 +- .../ui/OptionSlider.java | 6 +- .../shatteredpixeldungeon/ui/StatusPane.java | 6 + .../shatteredpixeldungeon/ui/Window.java | 2 +- .../ui/changelist/S_Changes.java | 8 +- .../ui/changelist/mlpd/vM0_6_7_X_Changes.java | 35 +- .../windows/WndHardNotification.java | 5 +- .../windows/WndTitledMessage.java | 113 ++++++- .../windows/WndTradeItem.java | 2 + 32 files changed, 909 insertions(+), 129 deletions(-) create mode 100644 core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/mobs/spical/GooMob.java create mode 100644 core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/mobs/spical/SlimeKingMob.java diff --git a/build.gradle b/build.gradle index a09bb8c13..356d3f4c8 100644 --- a/build.gradle +++ b/build.gradle @@ -18,8 +18,8 @@ allprojects { appName = 'Magic Ling Pixel Dungeon' appPackageName = 'com.ansdomagiclingpixeldungeon.ling' - appVersionCode =907400 - appVersionName = '0.6.5.0-Alpha3' + appVersionCode =907500 + appVersionName = '0.6.5.0-Alpha4' appJavaCompatibility = JavaVersion.VERSION_11 diff --git a/core/src/main/assets/environment/custom_tiles/lavecave_behind.png b/core/src/main/assets/environment/custom_tiles/lavecave_behind.png index e40a58de6f0ddaad5785dd799ce36a482e1cd98e..426d7caa52855226669e8194a4420b3925740953 100644 GIT binary patch literal 52768 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

Z55=YA& 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 diff --git a/core/src/main/assets/interfaces/badges.png b/core/src/main/assets/interfaces/badges.png index 62fc07ea5ffe8490649e2c634ee1ea98efb86bc6..a37796266c023c505d29c81a7cf3ccc019b02fbb 100644 GIT binary patch literal 22058 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%0ATaFVju~1y0Ap`Y!{)VDAA2yYK7VOyQ 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 M07*qoM6N<$f|-g@8~^|S literal 21560 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 0) { + pumpedUp = 0; + return Random.NormalIntRange( min*3, max*3 ); + } else { + return Random.NormalIntRange( min, max ); + } + } + + @Override + public int attackSkill( Char target ) { + int attack = 10; + if (HP*2 <= HT) attack = 15; + if (pumpedUp > 0) attack *= 2; + return attack; + } + + @Override + public int defenseSkill(Char enemy) { + return (int)(super.defenseSkill(enemy) * ((HP*2 <= HT)? 1.5 : 1)); + } + + @Override + public int drRoll() { + return Random.NormalIntRange(0, 2); + } + + @Override + public boolean act() { + + if (Dungeon.level.water[pos] && HP < HT) { + HP += healInc; + + LockedFloor lock = Dungeon.hero.buff(LockedFloor.class); + if (lock != null) lock.removeTime(healInc*2); + + if (Dungeon.level.heroFOV[pos] ){ + sprite.emitter().burst( Speck.factory( Speck.HEALING ), healInc ); + } + if (Dungeon.isChallenged(Challenges.STRONGER_BOSSES) && healInc < 3) { + healInc++; + } + if (HP*2 > HT) { + BossHealthBar.bleed(false); + ((GooSprite)sprite).spray(false); + HP = Math.min(HP, HT); + } + } else { + healInc = 1; + } + + return super.act(); + } + + @Override + protected boolean canAttack( Char enemy ) { + if (pumpedUp > 0){ + //we check both from and to in this case as projectile logic isn't always symmetrical. + //this helps trim out BS edge-cases + return Dungeon.level.distance(enemy.pos, pos) <= 2 + && new Ballistica( pos, enemy.pos, Ballistica.PROJECTILE).collisionPos == enemy.pos + && new Ballistica( enemy.pos, pos, Ballistica.PROJECTILE).collisionPos == pos; + } else { + return super.canAttack(enemy); + } + } + + @Override + public int attackProc( Char enemy, int damage ) { + damage = super.attackProc( enemy, damage ); + if (Random.Int( 3 ) == 0) { + Buff.affect( enemy, Ooze.class ).set( Ooze.DURATION ); + enemy.sprite.burst( 0x000000, 5 ); + } + + if (pumpedUp > 0) { + Camera.main.shake( 3, 0.2f ); + } + + return damage; + } + + @Override + public void updateSpriteState() { + super.updateSpriteState(); + + if (pumpedUp > 0){ + ((GooSprite)sprite).pumpUp( pumpedUp ); + } + } + + @Override + protected boolean doAttack( Char enemy ) { + if (pumpedUp == 1) { + pumpedUp++; + ((GooSprite)sprite).pumpUp( pumpedUp ); + + spend( attackDelay() ); + + return true; + } else if (pumpedUp >= 2 || Random.Int( (HP*2 <= HT) ? 2 : 5 ) > 0) { + + boolean visible = Dungeon.level.heroFOV[pos]; + + if (visible) { + if (pumpedUp >= 2) { + ((GooSprite) sprite).pumpAttack(); + } else { + sprite.attack(enemy.pos); + } + } else { + if (pumpedUp >= 2){ + ((GooSprite)sprite).triggerEmitters(); + } + attack( enemy ); + spend( attackDelay() ); + } + + return !visible; + + } else { + + pumpedUp++; + if (Dungeon.isChallenged(Challenges.STRONGER_BOSSES)){ + pumpedUp++; + } + + ((GooSprite)sprite).pumpUp( pumpedUp ); + + if (Dungeon.level.heroFOV[pos]) { + sprite.showStatus( CharSprite.NEGATIVE, Messages.get(Goo.class, "!!!") ); + GLog.n( Messages.get(Goo.class, "pumpup") ); + } + + spend( attackDelay() ); + + return true; + } + } + + @Override + public boolean attack( Char enemy, float dmgMulti, float dmgBonus, float accMulti ) { + boolean result = super.attack( enemy, dmgMulti, dmgBonus, accMulti ); + pumpedUp = 0; + return result; + } + + @Override + protected boolean getCloser( int target ) { + if (pumpedUp != 0) { + pumpedUp = 0; + sprite.idle(); + } + return super.getCloser( target ); + } + + @Override + public void damage(int dmg, Object src) { + boolean bleeding = (HP*2 <= HT); + super.damage(dmg, src); + if ((HP*2 <= HT) && !bleeding){ + sprite.showStatus(CharSprite.NEGATIVE, Messages.get(Goo.class, "enraged")); + ((GooSprite)sprite).spray(true); + yell(Messages.get(Goo.class, "gluuurp")); + } + LockedFloor lock = Dungeon.hero.buff(LockedFloor.class); + if (lock != null) lock.addTime(dmg*2); + } + + @Override + public void die( Object cause ) { + super.die( cause ); + } + + private final String PUMPEDUP = "pumpedup"; + private final String HEALINC = "healinc"; + + @Override + public void storeInBundle( Bundle bundle ) { + + super.storeInBundle( bundle ); + + bundle.put( PUMPEDUP , pumpedUp ); + bundle.put( HEALINC, healInc ); + } + + @Override + public void restoreFromBundle( Bundle bundle ) { + + super.restoreFromBundle( bundle ); + + pumpedUp = bundle.getInt( PUMPEDUP ); + if (state != SLEEPING) BossHealthBar.assignBoss(this); + if ((HP*2 <= HT)) BossHealthBar.bleed(true); + + //if check is for pre-0.9.3 saves + healInc = bundle.getInt(HEALINC); + + } + +} diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/mobs/spical/SlimeKingMob.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/mobs/spical/SlimeKingMob.java new file mode 100644 index 000000000..a4fc474e7 --- /dev/null +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/mobs/spical/SlimeKingMob.java @@ -0,0 +1,319 @@ +package com.shatteredpixel.shatteredpixeldungeon.actors.mobs.spical; + +import com.shatteredpixel.shatteredpixeldungeon.Assets; +import com.shatteredpixel.shatteredpixeldungeon.Conducts; +import com.shatteredpixel.shatteredpixeldungeon.Dungeon; +import com.shatteredpixel.shatteredpixeldungeon.actors.Actor; +import com.shatteredpixel.shatteredpixeldungeon.actors.Char; +import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Blindness; +import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Buff; +import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Cripple; +import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Degrade; +import com.shatteredpixel.shatteredpixeldungeon.actors.mobs.CausticSlime; +import com.shatteredpixel.shatteredpixeldungeon.actors.mobs.ColdMagicRat; +import com.shatteredpixel.shatteredpixeldungeon.actors.mobs.Crab; +import com.shatteredpixel.shatteredpixeldungeon.actors.mobs.Mob; +import com.shatteredpixel.shatteredpixeldungeon.actors.mobs.Rat; +import com.shatteredpixel.shatteredpixeldungeon.actors.mobs.Slime; +import com.shatteredpixel.shatteredpixeldungeon.actors.mobs.SlimeKing; +import com.shatteredpixel.shatteredpixeldungeon.actors.mobs.Swarm; +import com.shatteredpixel.shatteredpixeldungeon.effects.Chains; +import com.shatteredpixel.shatteredpixeldungeon.effects.Pushing; +import com.shatteredpixel.shatteredpixeldungeon.items.Item; +import com.shatteredpixel.shatteredpixeldungeon.levels.traps.SummoningTrap; +import com.shatteredpixel.shatteredpixeldungeon.mechanics.Ballistica; +import com.shatteredpixel.shatteredpixeldungeon.messages.Messages; +import com.shatteredpixel.shatteredpixeldungeon.scenes.GameScene; +import com.shatteredpixel.shatteredpixeldungeon.sprites.CharSprite; +import com.shatteredpixel.shatteredpixeldungeon.sprites.SlimeKingSprite; +import com.shatteredpixel.shatteredpixeldungeon.utils.GLog; +import com.watabou.noosa.audio.Sample; +import com.watabou.utils.Bundle; +import com.watabou.utils.Callback; +import com.watabou.utils.Random; + +import java.util.ArrayList; + +public class SlimeKingMob extends Mob { + + private final String[] attackCurse = {"雕虫小技", "班门弄斧", + "GAMEOVER"}; + private int combo = 0; + private static final float TIME_TO_ZAP = 0.5f; + + private boolean PartCold = false; + + + + + @Override + public int defenseProc(Char enemy, int damage ) { + + if (HP >= damage + 2) { + ArrayList candidates = new ArrayList<>(); + + int[] neighbours = {pos + 1, pos - 1, pos + Dungeon.level.width(), pos - Dungeon.level.width()}; + for (int n : neighbours) { + if (!Dungeon.level.solid[n] && Actor.findChar( n ) == null + && (!properties().contains(Property.LARGE) || Dungeon.level.openSpace[n])) { + candidates.add( n ); + } + } + + if (candidates.size() > 0 && HP < 60 && Random.Float() < 0.45f) { + CausticSlime mini = new CausticSlime(); + mini.pos = this.pos; + mini.state = mini.HUNTING; + mini.HP /= 4; + mini.maxLvl = -5; + Dungeon.level.occupyCell(mini); + GameScene.add( mini , 0f ); + Actor.addDelayed( new Pushing( mini, pos, mini.pos ), -1 ); + } + } + + return super.defenseProc(enemy, damage); + } + + + private static final String partcold = "partcold"; + private static final String chainsused = "chainsused"; + + @Override + public void storeInBundle(Bundle bundle) { + super.storeInBundle(bundle); + bundle.put(partcold, PartCold); + bundle.put(chainsused, chainsUsed); + } + + @Override + public void restoreFromBundle(Bundle bundle) { + super.restoreFromBundle(bundle); + PartCold = bundle.getBoolean(partcold); + chainsUsed = bundle.getBoolean(chainsused); + } + + { + if (Dungeon.isDLC(Conducts.Conduct.BOSSRUSH)) { + HP =190; + HT= 190; + + } else { + HP =140; + HT= 140; + } + + EXP = 20; + defenseSkill = 12; + spriteClass = SlimeKingSprite.class; + lootChance = 1; + HUNTING = new Hunting(); + properties.add(Property.BOSS); + baseSpeed = 0.4f; + } + + @Override + public boolean act() { + + if(HP < 70 && !PartCold){ + baseSpeed = 1f; + SummoningTrap var4 = new SummoningTrap(); + var4.pos = super.pos; + var4.activate(); + PartCold = true; + chainsUsed = true; + GLog.n(Messages.get(SlimeKing.class,"fuck")); + } else if (HP < 70) { + baseSpeed = 1f; + } + + return super.act(); + } + + private void zap() { + spend( TIME_TO_ZAP ); + + if (hit( this, enemy, true )) { + //TODO would be nice for this to work on ghost/statues too + if (Random.Int( 2 ) == 0) { + Buff.prolong( enemy, Blindness.class, Degrade.DURATION ); + Sample.INSTANCE.play( Assets.Sounds.DEBUFF ); + } + + int dmg = Random.NormalIntRange( 2, 4 ); + enemy.damage( dmg, new ColdMagicRat.DarkBolt() ); + + if (enemy == Dungeon.hero && !enemy.isAlive()) { + Dungeon.fail( getClass() ); + GLog.n( Messages.get(SlimeKing.class, "frost_kill") ); + } + } else { + enemy.sprite.showStatus( CharSprite.NEUTRAL, enemy.defenseVerb() ); + } + } + + protected boolean doAttack( Char enemy ) { + + if (Dungeon.level.adjacent( pos, enemy.pos )) { + + return super.doAttack( enemy ); + + } else { + + if (sprite != null && (sprite.visible || enemy.sprite.visible)) { + sprite.zap( enemy.pos ); + return false; + } else { + zap(); + return true; + } + } + } + + public void onZapComplete() { + zap(); + next(); + } + + @Override + public int damageRoll() { + if(HP < 70 && Random.Float() > 0.10f) { + return Random.NormalIntRange(8, 12); + } else { + return Random.NormalIntRange(4, 6); + } + } + + @Override + public int attackSkill( Char target ) { + return 12; + } + + @Override + public int attackProc(Char enemy, int damage) { + if (Random.Int(0, 10) > 7) { + this.sprite.showStatus(0x009999, this.attackCurse[Random.Int(this.attackCurse.length)]); + } + int damage2 = super.attackProc(enemy, this.combo + damage); + this.combo++; +// int effect = Random.Int(3); +//// if (enemy.buff(Poison.class) == null && Random.Float() <= 0.25f) { +//// Buff.affect( enemy, Poison.class).set((effect-2) ); +//// } + if (this.combo > 3) { + this.combo = 1; + } + return damage2; + } + + @Override + public int drRoll() { + if(HP < 70 && !PartCold) { + return 0; + } else { + return 5; + } + } + + private boolean chainsUsed = false; + private boolean chain(int target){ + if (chainsUsed || enemy.properties().contains(Property.IMMOVABLE)) + return false; + + Ballistica chain = new Ballistica(pos, target, Ballistica.PROJECTILE); + + if (chain.collisionPos != enemy.pos + || chain.path.size() < 2 + || Dungeon.level.pit[chain.path.get(1)]) + return false; + else { + int newPos; + newPos = -1; + for (int i : chain.subPath(1, chain.dist)){ + if (!Dungeon.level.solid[i] && Actor.findChar(i) == null){ + newPos = i; + break; + } + } + + if (newPos == 0){ + return false; + } else { + final int newPosFinal = newPos; + this.target = newPos; + + if (sprite.visible) { + yell(Messages.get(SlimeKing.class, "scorpion")); + new Item().throwSound(); + Sample.INSTANCE.play(Assets.Sounds.CHAINS); + sprite.parent.add(new Chains(sprite.center(), enemy.sprite.destinationCenter(), new Callback() { + public void call() { + Actor.addDelayed(new Pushing(enemy, enemy.pos, newPosFinal, new Callback() { + public void call() { + pullEnemy(enemy, newPosFinal); + } + }), -1); + next(); + } + })); + } else { + pullEnemy(enemy, newPos); + } + } + } + chainsUsed = true; + return true; + } + + private void pullEnemy( Char enemy, int pullPos ){ + enemy.pos = pullPos; + enemy.sprite.place(pullPos); + Dungeon.level.occupyCell(enemy); + Cripple.prolong(enemy, Cripple.class, 4f); + if (enemy == Dungeon.hero) { + Dungeon.hero.interrupt(); + Dungeon.observe(); + GameScene.updateFog(); + } + } + + + public void move( int step ) { + super.move( step ); + } + + @Override + public void die( Object cause ) { + super.die( cause ); + for (Mob mob : Dungeon.level.mobs.toArray(new Mob[0])){ + if ( mob instanceof Swarm || + mob instanceof Crab || + mob instanceof Rat || + mob instanceof Slime) { + mob.die( cause ); + } + } + } + + private class Hunting extends Mob.Hunting{ + @Override + public boolean act( boolean enemyInFOV, boolean justAlerted ) { + enemySeen = enemyInFOV; + + if (!chainsUsed + && enemyInFOV + && !isCharmedBy( enemy ) + && !canAttack( enemy ) + && Dungeon.level.distance( pos, enemy.pos ) < 5 + + + && chain(enemy.pos)){ + return !(sprite.visible || enemy.sprite.visible); + } else { + return super.act( enemyInFOV, justAlerted ); + } + + } + } +} + diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/custom/dict/DictSpriteSheet.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/custom/dict/DictSpriteSheet.java index 0872cafe0..66f3e0ad4 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/custom/dict/DictSpriteSheet.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/custom/dict/DictSpriteSheet.java @@ -1,12 +1,14 @@ package com.shatteredpixel.shatteredpixeldungeon.custom.dict; import com.shatteredpixel.shatteredpixeldungeon.Assets; +import com.shatteredpixel.shatteredpixeldungeon.sprites.BombGnollTricksterSprites; import com.shatteredpixel.shatteredpixeldungeon.sprites.BruteBotSprite; import com.shatteredpixel.shatteredpixeldungeon.sprites.ClearElementalSprites; import com.shatteredpixel.shatteredpixeldungeon.sprites.ColdGuardSprite; import com.shatteredpixel.shatteredpixeldungeon.sprites.ColdRatSprite; import com.shatteredpixel.shatteredpixeldungeon.sprites.FireAcidicSprite; -import com.shatteredpixel.shatteredpixeldungeon.sprites.FlameBoiSprite; +import com.shatteredpixel.shatteredpixeldungeon.sprites.FlameC01Sprite; +import com.shatteredpixel.shatteredpixeldungeon.sprites.GooSprite; import com.shatteredpixel.shatteredpixeldungeon.sprites.IceFireScorpioSprite; import com.shatteredpixel.shatteredpixeldungeon.sprites.IceGolemSprite; import com.shatteredpixel.shatteredpixeldungeon.sprites.ItemSprite; @@ -24,6 +26,8 @@ import com.shatteredpixel.shatteredpixeldungeon.sprites.SRPDICLRTT; import com.shatteredpixel.shatteredpixeldungeon.sprites.STenguSprite; import com.shatteredpixel.shatteredpixeldungeon.sprites.SalamanderSprites; import com.shatteredpixel.shatteredpixeldungeon.sprites.ShieldHuntsmanSprite; +import com.shatteredpixel.shatteredpixeldungeon.sprites.SkullShamanSprite; +import com.shatteredpixel.shatteredpixeldungeon.sprites.SlimeKingSprite; import com.shatteredpixel.shatteredpixeldungeon.sprites.SpectralNecromancerSprite; import com.watabou.noosa.Image; @@ -80,7 +84,15 @@ public class DictSpriteSheet { case MOLO: return new MolotovHuntsmanSprite(); case FLAME: - return new FlameBoiSprite(); + return new SlimeKingSprite(); + case FLAMEC01: + return new FlameC01Sprite(); + case GnollK: + return new BombGnollTricksterSprites(); + case GnollF: + return new SkullShamanSprite(); + case Goo: + return new GooSprite(); case GNOLL: return new Image(Assets.Sprites.GNOLL, 0, 0, 12, 15); case STX: @@ -304,6 +316,14 @@ public class DictSpriteSheet { public static final int CAX = 228 + 10000; public static final int IAS = 229 + 10000; + public static final int FLAMEC01 = 330 + 10000; + + public static final int GnollK = 331 + 10000; + + public static final int GnollF = 332 + 10000; + + public static final int Goo = 333 + 10000; + public static final int BRTX = 230 + 10000; public static final int GOO = 231 + 10000; public static final int GKS = 232 + 10000; diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/custom/testmode/MobPlacer.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/custom/testmode/MobPlacer.java index 6adc8f894..55101ad49 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/custom/testmode/MobPlacer.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/custom/testmode/MobPlacer.java @@ -28,9 +28,10 @@ import com.shatteredpixel.shatteredpixeldungeon.actors.mobs.Elemental; import com.shatteredpixel.shatteredpixeldungeon.actors.mobs.Eye; import com.shatteredpixel.shatteredpixeldungeon.actors.mobs.FetidRat; import com.shatteredpixel.shatteredpixeldungeon.actors.mobs.Fire_Scorpio; -import com.shatteredpixel.shatteredpixeldungeon.actors.mobs.FlameB01; +import com.shatteredpixel.shatteredpixeldungeon.actors.mobs.FlameC01; import com.shatteredpixel.shatteredpixeldungeon.actors.mobs.Ghoul; import com.shatteredpixel.shatteredpixeldungeon.actors.mobs.Gnoll; +import com.shatteredpixel.shatteredpixeldungeon.actors.mobs.GnollShiled; import com.shatteredpixel.shatteredpixeldungeon.actors.mobs.GnollTrickster; import com.shatteredpixel.shatteredpixeldungeon.actors.mobs.Golem; import com.shatteredpixel.shatteredpixeldungeon.actors.mobs.GreatCrab; @@ -60,6 +61,7 @@ import com.shatteredpixel.shatteredpixeldungeon.actors.mobs.Senior; import com.shatteredpixel.shatteredpixeldungeon.actors.mobs.Shaman; import com.shatteredpixel.shatteredpixeldungeon.actors.mobs.ShieldHuntsman; import com.shatteredpixel.shatteredpixeldungeon.actors.mobs.Skeleton; +import com.shatteredpixel.shatteredpixeldungeon.actors.mobs.SkullShaman; import com.shatteredpixel.shatteredpixeldungeon.actors.mobs.Slime; import com.shatteredpixel.shatteredpixeldungeon.actors.mobs.Snake; import com.shatteredpixel.shatteredpixeldungeon.actors.mobs.SpectralNecromancer; @@ -71,6 +73,8 @@ import com.shatteredpixel.shatteredpixeldungeon.actors.mobs.Thief; import com.shatteredpixel.shatteredpixeldungeon.actors.mobs.Warlock; import com.shatteredpixel.shatteredpixeldungeon.actors.mobs.Wraith; import com.shatteredpixel.shatteredpixeldungeon.actors.mobs.XTG200; +import com.shatteredpixel.shatteredpixeldungeon.actors.mobs.spical.GooMob; +import com.shatteredpixel.shatteredpixeldungeon.actors.mobs.spical.SlimeKingMob; import com.shatteredpixel.shatteredpixeldungeon.custom.dict.DictSpriteSheet; import com.shatteredpixel.shatteredpixeldungeon.custom.messages.M; import com.shatteredpixel.shatteredpixeldungeon.items.scrolls.ScrollOfTeleportation; @@ -82,6 +86,7 @@ import com.shatteredpixel.shatteredpixeldungeon.scenes.PixelScene; import com.shatteredpixel.shatteredpixeldungeon.sprites.ItemSpriteSheet; import com.shatteredpixel.shatteredpixeldungeon.ui.CheckBox; import com.shatteredpixel.shatteredpixeldungeon.ui.IconButton; +import com.shatteredpixel.shatteredpixeldungeon.ui.OptionSlider; import com.shatteredpixel.shatteredpixeldungeon.ui.RedButton; import com.shatteredpixel.shatteredpixeldungeon.ui.RenderedTextBlock; import com.shatteredpixel.shatteredpixeldungeon.ui.Window; @@ -105,6 +110,9 @@ public class MobPlacer extends TestItem{ private int mobTier = 1; private int mobIndex = 0; private int elite = 0; + + private int HT = 1; + private int ST = 1; private int elite_op = 0; private final ArrayList> eliteBuffs = new ArrayList<>(); @@ -117,7 +125,7 @@ public class MobPlacer extends TestItem{ eliteBuffs.add(ChampionEnemy.Projecting.class); eliteBuffs.add(ChampionEnemy.Halo.class); eliteBuffs.add(ChampionEnemy.DelayMob.class); - eliteBuffs.add(WandOfAnmy.AllyToRestartOK.class); + eliteBuffs.add(ChampionEnemy.King.class); eliteBuffs.add(ChampionEnemy.Small.class); eliteBuffs.add(ChampionEnemy.Bomber.class); @@ -126,6 +134,7 @@ public class MobPlacer extends TestItem{ eliteBuffs.add(ChampionEnemy.Sider.class); eliteBuffs.add(ChampionEnemy.LongSider.class); + eliteBuffs.add(WandOfAnmy.AllyToRestartOK.class); } @Override @@ -148,9 +157,15 @@ public class MobPlacer extends TestItem{ try { Mob m = Reflection.newInstance(allData.get(dataThreshold(mobTier) + mobIndex).mobClass); m.pos = cell; + m.state = m.HUNTING; GameScene.add(m); + + if(HT>1){ + m.HT = m.HP = (m.HT*HT); + } + if(elite_op>0){ - for(int i=0;i<15;++i){ + for(int i=0;i<16;++i){ if((elite_op & (1<0){ Buff.affect(m, eliteBuffs.get(i)); } @@ -222,6 +237,8 @@ public class MobPlacer extends TestItem{ b.put("mobTier", mobTier); b.put("mobIndex", mobIndex); b.put("eliteTags", elite); + b.put("htTags", HT); + b.put("stTags", ST); b.put("elite_ops", elite_op); } @@ -231,6 +248,8 @@ public class MobPlacer extends TestItem{ mobTier = b.getInt("mobTier"); mobIndex = b.getInt("mobIndex"); elite = b.getInt("eliteTags"); + HT = b.getInt("htTags"); + ST = b.getInt("stTags"); elite_op = b.getInt("elite_ops"); } @@ -238,14 +257,14 @@ public class MobPlacer extends TestItem{ private class WndSetMob extends Window{ private static final int WIDTH = 150; - private static final int HEIGHT = 150; + private static final int HEIGHT = 180; private static final int BTN_SIZE = 18; private static final int GAP = 2; private RenderedTextBlock selectedPage; private ArrayList mobButtons = new ArrayList<>(); private RenderedTextBlock selectedMob; - private ArrayList eliteOptions = new ArrayList<>(15); + private ArrayList eliteOptions = new ArrayList<>(16); public WndSetMob(){ super(); @@ -290,22 +309,10 @@ public class MobPlacer extends TestItem{ selectedMob.hardlight(0xFFFF44); PixelScene.align(selectedMob); add(selectedMob); -/* - OptionSlider op = new OptionSlider - (M.L(MobPlacer.class, "elite"), "0", String.valueOf(MAX_ELITE), 0, MAX_ELITE) { - @Override - protected void onChange() { - elite = getSelectedValue(); - } - }; - op.setRect(GAP, 92, WIDTH - 2*GAP, 24); - op.setSelectedValue(elite); - add(op); - */ - float pos = 92; + float pos = 96; int column = 0; - for (int i = 0; i < 15 && column < 3; ++i) { + for (int i = 0; i < 16 && column < 3; ++i) { CheckBox cb = new CheckBox(M.L(MobPlacer.class, "elite_name" + i)); cb.active = true; cb.checked((elite_op & (1<0); @@ -322,10 +329,31 @@ public class MobPlacer extends TestItem{ pos += 16 + GAP; // 换行 } + if(i==15){ + cb.setRect(WIDTH/2f+GAP, 78, (WIDTH/2f - GAP), 16); + } + + OptionSlider op = new OptionSlider + ("_修改血量_","1x","6x",1,6) { + @Override + public int getTitleTextSize(){ + return 6; + } + @Override + protected void onChange() { + HT = getSelectedValue(); + } + }; + op.setRect((WIDTH/3f)/6f-8, 78, (WIDTH/2f - GAP), 16); + op.setSelectedValue(HT); + add(op); + column++; } + + createMobImage(); updateSelectedMob(); @@ -334,7 +362,7 @@ public class MobPlacer extends TestItem{ private void updateEliteSettings(){ int el = 0; - for(int i=0;i<15;++i){ + for(int i=0;i<16;++i){ el += eliteOptions.get(i).checked() ? (1< buffCls){ - boolean droppingLoot = enemy.alignment != Char.Alignment.ALLY; - Buff.affect(enemy, buffCls); - if (enemy.buff(buffCls) != null){ - if (droppingLoot) enemy.rollToDropLoot(); - Statistics.enemiesSlain++; - Badges.validateMonstersSlain(); - Statistics.qualifiedForNoKilling = false; - if (enemy.EXP > 0 && hero.lvl <= enemy.maxLvl) { - hero.sprite.showStatus(CharSprite.POSITIVE, Messages.get(enemy, "exp", enemy.EXP)); - hero.earnExp(enemy.EXP, enemy.getClass()); - } else { - hero.earnExp(0, enemy.getClass()); - } - } - } @Override public String toString() { return Messages.get(AllyToRestart.class, "name"); @@ -101,11 +80,11 @@ public class WandOfAnmy extends DamageWand { @Override public void fx(boolean on) { if (on) { - target.sprite.add(CharSprite.State.SHIELDED); + target.sprite.add(CharSprite.State.HEARTS); //Statistics.TryUsedAnmy = true; } else - target.sprite.remove(CharSprite.State.SHIELDED); + target.sprite.remove(CharSprite.State.HEARTS); } @Override @@ -133,11 +112,11 @@ public class WandOfAnmy extends DamageWand { @Override public void fx(boolean on) { if (on) { - target.sprite.add(CharSprite.State.SHIELDED); + target.sprite.add(CharSprite.State.HEARTS); //Statistics.TryUsedAnmy = true; } else - target.sprite.remove(CharSprite.State.SHIELDED); + target.sprite.remove(CharSprite.State.HEARTS); } @Override diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/weapon/melee/legend/DiedCrossBow.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/weapon/melee/legend/DiedCrossBow.java index 0a9d869b2..6219c5eb0 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/weapon/melee/legend/DiedCrossBow.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/weapon/melee/legend/DiedCrossBow.java @@ -1,6 +1,9 @@ package com.shatteredpixel.shatteredpixeldungeon.items.weapon.melee.legend; +import static com.shatteredpixel.shatteredpixeldungeon.Dungeon.hero; + import com.shatteredpixel.shatteredpixeldungeon.Assets; +import com.shatteredpixel.shatteredpixeldungeon.Badges; import com.shatteredpixel.shatteredpixeldungeon.Dungeon; import com.shatteredpixel.shatteredpixeldungeon.actors.Actor; import com.shatteredpixel.shatteredpixeldungeon.actors.Char; @@ -9,7 +12,6 @@ import com.shatteredpixel.shatteredpixeldungeon.effects.CellEmitter; import com.shatteredpixel.shatteredpixeldungeon.effects.Splash; import com.shatteredpixel.shatteredpixeldungeon.effects.particles.BlastParticle; import com.shatteredpixel.shatteredpixeldungeon.effects.particles.SmokeParticle; -import com.shatteredpixel.shatteredpixeldungeon.items.bombs.Bomb; import com.shatteredpixel.shatteredpixeldungeon.items.weapon.SpiritBow; import com.shatteredpixel.shatteredpixeldungeon.items.weapon.missiles.darts.TippedDart; import com.shatteredpixel.shatteredpixeldungeon.mechanics.Ballistica; @@ -38,7 +40,7 @@ public class DiedCrossBow extends LegendWeapon { baseMax = 20; min = Lmin(); max = Lmax(); - usesTargeting = true; + usesTargeting = cooldown == 0; } @Override @@ -46,6 +48,10 @@ public class DiedCrossBow extends LegendWeapon { return new DiedCrossBow.Recharge(); } + /** + * + */ + public class Recharge extends LegendWeapon.LegendWeaponBuff { @Override public boolean act() { @@ -142,7 +148,7 @@ public class DiedCrossBow extends LegendWeapon { @Override public int proc(Char attacker, Char defender, int damage) { - DiedCrossBow dartGun = Dungeon.hero.belongings.getItem(DiedCrossBow.class); + DiedCrossBow dartGun = hero.belongings.getItem(DiedCrossBow.class); damage = Random.NormalIntRange(dartGun.Lmin(), dartGun.Lmax()); this.explodeBomb(defender.pos); @@ -207,7 +213,7 @@ public class DiedCrossBow extends LegendWeapon { continue; } - DiedCrossBow diedCrossBow = Dungeon.hero.belongings.getItem(DiedCrossBow.class); + DiedCrossBow diedCrossBow = hero.belongings.getItem(DiedCrossBow.class); int dmg = Random.NormalIntRange(diedCrossBow.Lmin(),diedCrossBow.Lmin()); //those not at the center of the blast take less damage @@ -221,8 +227,10 @@ public class DiedCrossBow extends LegendWeapon { ch.damage(dmg, this); } - if (ch == Dungeon.hero && !ch.isAlive()) { - Dungeon.fail(Bomb.class); + if (ch == hero && !ch.isAlive()) { + Badges.BOMB(); + Dungeon.fail( getClass() ); + GLog.n( Messages.get(DiedCrossBow.class, "ondeath") ); } } diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/weapon/melee/legend/LegendWeapon.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/weapon/melee/legend/LegendWeapon.java index b4f784158..e0d6c988c 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/weapon/melee/legend/LegendWeapon.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/weapon/melee/legend/LegendWeapon.java @@ -117,7 +117,8 @@ public abstract class LegendWeapon extends MeleeWeapon { return Messages.get(LegendWeapon.class, "stats_desc", legend, Messages.get(this, "king_desc"), Lmin(), Lmax()); } else { - return Messages.get(LegendWeapon.class, "typical_stats_desc", 9); + return Messages.get(LegendWeapon.class, "typical_stats_desc",legend, 9,Lmin(), + Lmax()); } } else { return ""; diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/LaveCavesBossLevel.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/LaveCavesBossLevel.java index 94b28338f..328733815 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/LaveCavesBossLevel.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/LaveCavesBossLevel.java @@ -3,6 +3,7 @@ package com.shatteredpixel.shatteredpixeldungeon.levels; import com.shatteredpixel.shatteredpixeldungeon.Assets; import com.shatteredpixel.shatteredpixeldungeon.tiles.CustomTilemap; import com.watabou.noosa.Tilemap; + /*** * TODO LIST * 熔岩地块-【5层-EX子层】-火龙巢穴 @@ -74,6 +75,8 @@ public class LaveCavesBossLevel extends Level{ private static final short Y = Terrain.EMPTY; + private static final short V = Terrain.EMPTY_SP; + private static final short X = Terrain.ENTRANCE; private static final short G = Terrain.HIGH_GRASS; @@ -83,16 +86,16 @@ public class LaveCavesBossLevel extends Level{ private static final short L= Terrain.PEDESTAL; private static final int[] codedMap = { W,W,W,W,W,W,W,W,W,W,W,W,W,W,W,W,W,W,W,W,W,W,W,W,W,W,W,W,W,W,W,W, - W,W,W,W,W,W,W,W,W,W,W,W,W,W,W,W,W,W,W,W,W,W,W,Y,Y,W,W,W,W,W,W,W, - W,W,W,W,W,W,W,W,R,R,R,R,R,R,R,R,R,R,R,R,R,R,R,Y,Y,W,W,W,W,W,W,W, + W,W,W,W,W,W,W,W,W,W,W,W,W,W,W,W,W,W,W,W,W,W,W,W,Y,W,W,W,W,W,W,W, + W,W,W,W,W,W,W,W,R,R,R,R,R,R,R,R,R,R,R,R,R,R,R,W,W,W,W,W,W,W,W,W, W,W,W,W,W,W,R,R,R,R,R,R,R,R,R,R,R,R,R,R,Y,R,R,R,R,W,W,W,W,W,W,W, W,W,W,W,R,R,R,R,R,R,R,R,R,R,Y,Y,R,R,Y,R,R,R,R,R,Y,W,W,W,W,W,W,W, W,W,W,R,R,R,R,R,R,R,R,R,R,Y,G,Y,Y,Y,Y,R,R,R,R,Y,R,W,W,W,W,W,W,W, W,W,W,R,R,R,R,R,R,R,R,R,Y,Y,Y,Y,Y,Y,Y,Y,R,R,R,R,R,W,W,W,W,W,W,W, W,W,R,R,R,R,R,R,R,R,R,R,Y,Y,Y,Y,Y,R,R,Y,Y,R,R,R,Y,R,W,W,W,W,W,W, W,W,R,R,R,R,R,Y,Y,Y,Y,Y,Y,Y,Y,Y,Y,R,R,R,Y,Y,Y,Y,Y,Y,R,R,W,W,W,W, - W,W,R,Y,Y,Y,Y,Y,Y,Y,Y,Y,Y,Y,Y,Y,Y,R,R,R,Y,Y,Y,Y,Y,R,R,R,Y,Y,W,W, - W,R,Y,Y,Y,Y,R,R,Y,Y,Y,Y,Y,Y,L,Y,Y,Y,R,R,Y,Y,Y,Y,Y,R,R,R,Y,Y,W,W, + W,W,R,Y,Y,Y,Y,Y,Y,Y,Y,Y,Y,Y,Y,Y,Y,R,R,R,Y,Y,Y,Y,Y,R,R,R,W,W,W,W, + W,R,Y,Y,Y,Y,R,R,Y,Y,Y,Y,Y,Y,L,Y,Y,Y,R,R,Y,Y,Y,Y,Y,R,R,R,W,W,W,W, W,R,Y,R,R,R,R,R,R,Y,Y,Y,Y,Y,Y,Y,Y,Y,Y,Y,Y,Y,Y,Y,Y,Y,Y,R,R,R,W,W, W,Y,Y,R,R,R,R,R,R,R,Y,Y,Y,Y,Y,Y,Y,Y,Y,Y,Y,R,R,Y,R,R,Y,Y,R,R,W,W, W,Y,Y,R,R,R,R,R,R,R,Y,Y,Y,Y,Y,Y,Y,Y,Y,Y,R,R,R,R,R,R,Y,Y,R,R,W,W, @@ -132,7 +135,9 @@ public class LaveCavesBossLevel extends Level{ vis.pos(0, 0); customTiles.add(vis); //((GameScene) RPD.scene()).addCustomTile(vis); - + CustomTilemap via = new townAbove(); + via.pos(0, 0); + customTiles.add(via); buildFlagMaps(); diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/Terrain.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/Terrain.java index 69b8aa429..10eca99ba 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/Terrain.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/Terrain.java @@ -58,6 +58,8 @@ public class Terrain { public static final int ALCHEMY = 28; public static final int WATER = 29; + + public static final int LAVA = 30; public static final int PASSABLE = 0x01; public static final int LOS_BLOCKING = 0x02; @@ -75,6 +77,7 @@ public class Terrain { flags[GRASS] = PASSABLE | FLAMABLE; flags[EMPTY_WELL] = PASSABLE; flags[WATER] = PASSABLE | LIQUID; + flags[LAVA] = AVOID | PIT | LIQUID; flags[WALL] = LOS_BLOCKING | SOLID; flags[DOOR] = PASSABLE | LOS_BLOCKING | FLAMABLE | SOLID; flags[OPEN_DOOR] = PASSABLE | FLAMABLE; diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/scenes/NewsScene.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/scenes/NewsScene.java index 8da6e9d11..f8bb0f30f 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/scenes/NewsScene.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/scenes/NewsScene.java @@ -183,13 +183,13 @@ public class NewsScene extends PixelScene { protected void createChildren() { bg = Chrome.get(Chrome.Type.GREY_BUTTON_TR); add(bg); - + String message = ""; if (Messages.lang() != Languages.CHINESE){ message += Messages.get(this, "english_warn"); } - + if (!News.articlesAvailable()){ if (SPDSettings.news()) { if (SPDSettings.WiFi() && !Game.platform.connectedToUnmeteredNetwork()) { @@ -225,7 +225,7 @@ public class NewsScene extends PixelScene { } if (message.startsWith("\n\n")) message = message.replaceFirst("\n\n", ""); - + text = PixelScene.renderTextBlock(message, 6); text.hardlight(CharSprite.WARNING); add(text); @@ -270,7 +270,7 @@ public class NewsScene extends PixelScene { icon(News.parseArticleIcon(article)); long lastRead = SPDSettings.newsLastRead(); if (lastRead > 0 && article.date.getTime() > lastRead) { - textColor(Window.TITLE_COLOR); + textColor(Window.SHPX_COLOR); } Calendar cal = Calendar.getInstance(); @@ -325,12 +325,11 @@ public class NewsScene extends PixelScene { ShatteredPixelDungeon.platform.openURI(link); } }; - link.setRect(0, height + 2, width, BTN_HEIGHT); - add(link); - resize(width, (int) link.bottom()); + link.setHeight(BTN_HEIGHT); + addToBottom(link); } } -} +} \ No newline at end of file diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/sprites/CharSprite.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/sprites/CharSprite.java index 6e62efb43..f7e377165 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/sprites/CharSprite.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/sprites/CharSprite.java @@ -92,7 +92,7 @@ public class CharSprite extends MovieClip implements Tweener.Listener, MovieClip public enum State { BURNING, LEVITATING, INVISIBLE, PARALYSED, FROZEN, ILLUMINATED, CHILLED, DARKENED, MARKED, HEALING, SHIELDED, - ROSESHIELDED,HALOMETHANEBURNING,FROSTBURNING,BUTTER,SPINVISIBLE,SMOKER + ROSESHIELDED,HALOMETHANEBURNING,FROSTBURNING,BUTTER,SPINVISIBLE,SMOKER,HEARTS } private int stunStates = 0; @@ -133,7 +133,7 @@ public class CharSprite extends MovieClip implements Tweener.Listener, MovieClip protected Emitter marked; protected Emitter levitation; protected Emitter healing; - + protected Emitter hearts; protected IceBlock iceBlock; protected DarkBlock darkBlock; protected TorchHalo light; @@ -469,6 +469,10 @@ public class CharSprite extends MovieClip implements Tweener.Listener, MovieClip case ROSESHIELDED: GameScene.effect( roseshield = new RoseHalo( this )); break; + case HEARTS: + hearts = emitter(); + hearts.pour(Speck.factory(Speck.HEART), 0.5f); + break; } } @@ -567,6 +571,11 @@ public class CharSprite extends MovieClip implements Tweener.Listener, MovieClip roseshield.putOut(); } break; + case HEARTS: + if (hearts != null){ + hearts.on = false; + hearts = null; + } } } @@ -600,7 +609,9 @@ public class CharSprite extends MovieClip implements Tweener.Listener, MovieClip if (flashTime > 0 && (flashTime -= Game.elapsed) <= 0) { resetColor(); } - + if (hearts != null){ + hearts.visible = visible; + } if (burning != null) { burning.visible = visible; } diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/sprites/SkullShamanSprite.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/sprites/SkullShamanSprite.java index c28b8b9f5..ecb20d77b 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/sprites/SkullShamanSprite.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/sprites/SkullShamanSprite.java @@ -9,14 +9,14 @@ public class SkullShamanSprite extends MobSprite { this.texture("SRPD/SkullShaman.png"); TextureFilm var1 = new TextureFilm(this.texture, 12, 15); this.idle = new Animation(2, true); - this.idle.frames(var1, new Object[]{0, 0, 0, 1, 0, 0, 1, 1}); + this.idle.frames(var1, 0, 0, 0, 1, 0, 0, 1, 1); this.run = new Animation(12, true); - this.run.frames(var1, new Object[]{4, 5, 6, 7}); + this.run.frames(var1, 4, 5, 6, 7); this.attack = new Animation(12, false); - this.attack.frames(var1, new Object[]{2, 3, 0}); + this.attack.frames(var1, 2, 3, 0); this.zap = this.attack.clone(); this.die = new Animation(12, false); - this.die.frames(var1, new Object[]{8, 9, 10}); + this.die.frames(var1, 8, 9, 10); this.play(this.idle); } diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/ui/OptionSlider.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/ui/OptionSlider.java index b28fafa37..e55a2d5bc 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/ui/OptionSlider.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/ui/OptionSlider.java @@ -49,7 +49,9 @@ public abstract class OptionSlider extends Component { private ColorBlock sliderBG; private ColorBlock[] sliderTicks; private float tickDist; - + public int getTitleTextSize(){ + return 9; + } public OptionSlider(String title, String minTxt, String maxTxt, int minVal, int maxVal){ super(); @@ -93,7 +95,7 @@ public abstract class OptionSlider extends Component { add( BG = Chrome.get(Chrome.Type.RED_BUTTON)); BG.alpha(0.5f); - add(title = PixelScene.renderTextBlock(9)); + add(title = PixelScene.renderTextBlock(getTitleTextSize())); add(this.minTxt = PixelScene.renderTextBlock(6)); add(this.maxTxt = PixelScene.renderTextBlock(6)); diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/ui/StatusPane.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/ui/StatusPane.java index 2a0e2e426..604d1fd06 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/ui/StatusPane.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/ui/StatusPane.java @@ -116,6 +116,12 @@ public class StatusPane extends Component { this.large = large; + if (SPDSettings.ClassUI()) { + asset = Assets.Interfaces.STATUS; + } else { + asset = Assets.Interfaces.STATUS_DARK; + } + if (large) bg = new NinePatch( asset, 0, 64, 41, 39, 33, 0, 4, 0 ); else bg = new NinePatch( asset, 0, 0, 128, 36, 85, 0, 45, 0 ); add( bg ); diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/ui/Window.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/ui/Window.java index cea558968..bdf9cd0b0 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/ui/Window.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/ui/Window.java @@ -74,7 +74,7 @@ public class Window extends Group implements Signal.Listener { public static final int BLUE_COLOR = 0x0000FF; public static final int CBLACK = 0x808080; - + public final void setHeight(int height) { resize(width, height); } public Window() { this( 0, 0, Chrome.get( Chrome.Type.WINDOW ) ); } diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/ui/changelist/S_Changes.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/ui/changelist/S_Changes.java index 47af09af5..e62ce5190 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/ui/changelist/S_Changes.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/ui/changelist/S_Changes.java @@ -346,7 +346,7 @@ public class S_Changes { changes.addButton( new ChangeButton(new Image(new RatSprite()), "老鼠加强", "老鼠的_攻击和生存能力_都得到了提升")); - changes.addButton( new ChangeButton(new Image(new SnakeSprite()), "下水道巨蛇加强", + changes.addButton( new ChangeButton(new Image(new SnakeSprite()), "密林巨蛇加强", "巨蛇的_攻击和生存能力_都得到了提升")); } @@ -492,7 +492,7 @@ public class S_Changes { changeInfo14.hardlight(16736000); arrayList.add(changeInfo14); changeInfo14.addButton(new ChangeButton(new Image("sprites/spinner.png", 144, 0, 16, 16), "BUG修复", "1.修复_酸蚀法杖_崩溃闪退问题\n\n2.修复_钥匙剑_变量问题[修复者:_Ren_]\n\n3.修复楼层_重置闪退_问题,理论上得到解决")); - changeInfo14.addButton(new ChangeButton(new Image("sprites/snake.png", 0, 0, 14, 16), "新怪物", "_下水道巨蛇_\n\n_下水道3层开始刷新_")); + changeInfo14.addButton(new ChangeButton(new Image("sprites/snake.png", 0, 0, 14, 16), "新怪物", "_密林巨蛇_\n\n_密林3层开始刷新_")); changeInfo14.addButton(new ChangeButton(new ItemSprite(ItemSpriteSheet.DG6), "新法杖", "幻蓝_焰浪_神杖\n\n这根法杖由_蓝磷元素_制成,饰以_魔紫树叶_这使它看起来相当霸气。它的顶端噼啪作响嘶嘶而鸣,渴望着释放其_强大的魔法。_")); ChangeInfo changeInfo15 = new ChangeInfo("V0.2.5-6", true, ""); changeInfo15.hardlight(65535); @@ -530,7 +530,7 @@ public class S_Changes { changeInfos.add(changes); changes.addButton( new ChangeButton(new Image("SRPD/TorchHuntsman.png", 0, 0, 16, 16), "怪物新改动", "新怪物!!!\n" + - "-下水道层:\n-_棕色老鼠_,\n-_灰黑老鼠_,\n-_老年老鼠_,\n(来自OGPD)" + + "-密林层:\n-_棕色老鼠_,\n-_灰黑老鼠_,\n-_老年老鼠_,\n(来自OGPD)" + "\n-监狱层:_赏金猎人_\n(来自SRPD)"+ "\n-矿洞层:_Flame-B01_\n(来自OGPD)"+ "\n后续层数正在开发,敬请期待\n\n"+ @@ -556,7 +556,7 @@ public class S_Changes { changes.addButton( new ChangeButton(new Image(Assets.Environment.TILES_SEWERS, 48, 48, 16 , 16), "房间改动", "房间数量得到了调整,具体改动如下表\n" + - "-下水道层:房间数量_9个_,默认刷怪数量_20个_,额外刷怪_7个_\n" + + "-密林层:房间数量_9个_,默认刷怪数量_20个_,额外刷怪_7个_\n" + "-监狱层:房间数量_8个_,默认刷怪数量_26个_,额外刷怪_11个_\n"+ "-矿洞层:房间数量_10个_,默认刷怪数量_30个_,额外刷怪_16个_\n"+ "-矮人层:房间数量_12个_,默认刷怪数量_21个_,额外刷怪_6个_\n"+ diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/ui/changelist/mlpd/vM0_6_7_X_Changes.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/ui/changelist/mlpd/vM0_6_7_X_Changes.java index 425955975..252b90a2e 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/ui/changelist/mlpd/vM0_6_7_X_Changes.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/ui/changelist/mlpd/vM0_6_7_X_Changes.java @@ -142,6 +142,39 @@ public class vM0_6_7_X_Changes { changes.addButton(new ChangeButton(i, ("熔岩火龙"), ("丛林暴乱的真相"))); + changes = new ChangeInfo("v0.6.5.0-Alpha4", true, ""); + changes.hardlight(Window.TITLE_COLOR); + changeInfos.add(changes); + + changes = new ChangeInfo("新内容", false, null); + changes.hardlight(Window.GREEN_COLOR); + changeInfos.add(changes); + + changes.addButton(new ChangeButton(Icons.get(Icons.CHALLENGE_ON), ("电子斗蛐蛐v0.2"), + ("开发者模式怪物放置器拥有更多功能,欢迎尝试!另追加黏咕,史莱姆王,豺狼炼药长老,豺狼萨满长老,Flame-C01"))); + + changes.addButton(new ChangeButton(Icons.get(Icons.DISPLAY), ("信息栏滚动"), + ("在游戏缩放较大或者拥有较多词条时,该项会很有用。"))); + + changes.addButton(new ChangeButton(Icons.get(Icons.BADGES), ("新徽章:碎片飞溅"), + ("又是一个死亡徽章,新人:悲鸣 因为意味着另类死亡爱好者多了一个新徽章(未解锁该徽章的就更麻烦了)"))); + + changes = new ChangeInfo("改动", false, null); + changes.hardlight(Window.CYELLOW); + changeInfos.add(changes); + + changes.addButton(new ChangeButton(new SalamanderSprites(), ("深蓝蝾螈"), + ("修复被深蓝蝾螈击败不会记录在排行榜的问题。"))); + + changes.addButton(new ChangeButton(new ItemSprite(ItemSpriteSheet.DIEDCROSSBOW), ("重型弩炮"), + ("修复使用还会扣减飞镖的问题。"))); + + changes.addButton(new ChangeButton(new ItemSprite(ItemSpriteSheet.WAND_KCX), ("共生法杖"), + ("修复共生法杖可能能被永续的问题。"))); + + changes.addButton(new ChangeButton(new Image("sprites/spinner.png", 144, 0, 16, 16), + Messages.get(ChangesScene.class, "bugfixes"), Messages.get(vM0_6_7_X_Changes.class, "bug_06X85"))); + changes = new ChangeInfo("v0.6.5.0-Alpha3", true, ""); changes.hardlight(Window.TITLE_COLOR); changeInfos.add(changes); @@ -1233,7 +1266,7 @@ public class vM0_6_7_X_Changes { changes.addButton(new ChangeButton(new OGPDNQHZTT(), ("OGPD老鼠组"), ("曾经的魔绫代表怪物,如今也正式退出魔绫的舞台。2021.2.21--2023.3.24(R.I.P.)"))); - changes.addButton(new ChangeButton(new SnakeSprite(), ("下水道巨蛇"), + changes.addButton(new ChangeButton(new SnakeSprite(), ("密林巨蛇"), ("破碎的代表怪物,由于不符合魔绫的世界观,故而被移除。"))); } diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/windows/WndHardNotification.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/windows/WndHardNotification.java index 7770bc1ec..17556963c 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/windows/WndHardNotification.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/windows/WndHardNotification.java @@ -53,8 +53,7 @@ public class WndHardNotification extends WndTitledMessage{ }; btnOkay.setRect(0, height + GAP, width, 16); btnOkay.enable(false); - add(btnOkay); - + addToBottom(btnOkay); resize(width, (int) btnOkay.bottom()); } @@ -80,4 +79,4 @@ public class WndHardNotification extends WndTitledMessage{ public void onBackPressed() { if (timeLeft <= 0 ) super.onBackPressed(); } -} +} \ No newline at end of file diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/windows/WndTitledMessage.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/windows/WndTitledMessage.java index 9debd52f9..a189fb222 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/windows/WndTitledMessage.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/windows/WndTitledMessage.java @@ -23,47 +23,126 @@ package com.shatteredpixel.shatteredpixeldungeon.windows; import com.shatteredpixel.shatteredpixeldungeon.scenes.PixelScene; import com.shatteredpixel.shatteredpixeldungeon.ui.RenderedTextBlock; +import com.shatteredpixel.shatteredpixeldungeon.ui.ScrollPane; import com.shatteredpixel.shatteredpixeldungeon.ui.Window; import com.watabou.noosa.Image; import com.watabou.noosa.ui.Component; public class WndTitledMessage extends Window { - protected static final int WIDTH_MIN = 120; - protected static final int WIDTH_MAX = 220; - protected static final int GAP = 2; + protected static int maxHeight() { + return (int) (PixelScene.uiCamera.height * 0.9); + } - public WndTitledMessage( Image icon, String title, String message ) { - - this( new IconTitle( icon, title ), message ); + protected static final int WIDTH_MIN = 120; + protected static final int WIDTH_MAX = 220; + protected static final int GAP = 2; + + public WndTitledMessage(Image icon, String title, String message) { + + this(icon, title, message, WIDTH_MAX); } - - public WndTitledMessage( Component titlebar, String message ) { + + public WndTitledMessage(Image icon, String title, String message, int maxWidth) { + + this(new IconTitle(icon, title), message, maxWidth); + + } + + ScrollPane sp; + + public WndTitledMessage(Component titlebar, String message) { + this(titlebar, message, WIDTH_MAX); + } + + public WndTitledMessage(Component titlebar, String message, int maxWidth) { super(); int width = WIDTH_MIN; - titlebar.setRect( 0, 0, width, 0 ); + titlebar.setRect(0, 0, width, 0); add(titlebar); - RenderedTextBlock text = PixelScene.renderTextBlock( 6 ); - text.text( message, width ); - text.setPos( titlebar.left(), titlebar.bottom() + 2*GAP ); - add( text ); + RenderedTextBlock text = PixelScene.renderTextBlock(6); + text.text(message, width); + text.setPos(titlebar.left(), titlebar.bottom() + 2 * GAP); while (PixelScene.landscape() && text.bottom() > (PixelScene.MIN_HEIGHT_L - 10) - && width < WIDTH_MAX){ + && width < maxWidth) { width += 20; titlebar.setRect(0, 0, width, 0); text.setPos( titlebar.left(), titlebar.bottom() + 2*GAP ); text.maxWidth(width); + + titlebar.setWidth(width); + text.setPos(titlebar.left(), titlebar.bottom() + 2 * GAP); } + Component comp = new Component(); + comp.add(text); + text.setPos(0, GAP); + comp.setSize(text.width(), text.height() + GAP * 2); + resize(width, (int) Math.min((int) comp.bottom() + 2 + titlebar.height() + GAP, maxHeight())); + + add(sp = new ScrollPane(comp)); + sp.setRect(titlebar.left(), titlebar.bottom() + GAP, comp.width(), Math.min((int) comp.bottom() + 2, maxHeight() - titlebar.bottom() - GAP)); bringToFront(titlebar); - - resize( width, (int)text.bottom() + 2 ); } -} + + @Override + public void offset(int xOffset, int yOffset) { + super.offset(xOffset, yOffset); + // refresh the scrollbar pane + sp.setPos(sp.left(), sp.top()); + } + + // adds to the bottom of a titled message, below the message itself. + // this only works ONCE currently. + public final void addToBottom(Component c) { + addToBottom(c, GAP); + } + + public final void addToBottom(Component c, int gap) { + addToBottom(c, gap, 0); + } + + public void addToBottom(Component c, int gapBefore, int gapAfter) { + // attempt to place normally. + c.setRect(0, height + gapBefore, width, c.height() + gapAfter); // assumes there is space at the bottom first. note that I'm baking in the bottom spacing into the component itself + add(c); + // in order to make things fit, we need to change the size of the scrollbar to make the component fit properly. + // fixme even though it *feels* like I should be able to stop here if everything fits, I can't. why? + setHeight((int) Math.min(c.bottom(), maxHeight())); + float y; c.setY(y = height - c.height()); // put the component into its final position. + // scrollbar height is reduced to respect top spacing + sp.setRect(0, sp.top(), width, y - sp.top() - gapBefore); + } + + // fixme this wrapper component is very unable to moved after it's placed. If I need to move it again, I won't be able to. + // should be able to simulate the previous behavior... + public Component addToBottom(int gapBefore, int gapAfter, Component... components) { + // this ensures that things are formatted correctly vertically. + Component wrapper = new Component(); + if(components.length == 0) return wrapper; + float top=Float.MAX_VALUE, bottom=Float.MIN_VALUE; + for(Component c : components) { + top = Math.min(top, c.top()); + bottom = Math.max(bottom, c.bottom()); + wrapper.add(c); + } + wrapper.setRect(0, top, width, bottom-top); + addToBottom(wrapper, gapBefore, gapAfter); + + top -= wrapper.top(); + + for(Component c : components) c.setY(c.top() - top); + + return wrapper; + } + // yes the order is different. deal with it. + public Component addToBottom(int gap, Component... components) { return addToBottom(gap, 0, components); } + public Component addToBottom(Component... components) { return addToBottom(GAP, components); } +} \ No newline at end of file diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/windows/WndTradeItem.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/windows/WndTradeItem.java index 5c345de9f..fe4b9ec86 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/windows/WndTradeItem.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/windows/WndTradeItem.java @@ -80,6 +80,7 @@ public class WndTradeItem extends WndInfoItem { hide(); } }; + btnSell.setHeight( BTN_HEIGHT ); btnSell.setRect( 0, pos + GAP, width, BTN_HEIGHT ); btnSell.icon(new ItemSprite(ItemSpriteSheet.GOLD)); add( btnSell ); @@ -163,6 +164,7 @@ public class WndTradeItem extends WndInfoItem { btnStole.alpha(0.3f); btnStole.active=false; } + btnStole.setRect( 0, pos + GAP, width, BTN_HEIGHT ); btnStole.icon(Statistics.fireGirlnoshopping && !Statistics.deadshoppingdied ? new FireMagicGirlSprite() : new ShopGuardDead.ShopGuardianRedSprite()); From 03b435fad6e3b032dc62a330a707ae35add3a3cf Mon Sep 17 00:00:00 2001 From: zxcPandora <1158500986@qq.com> Date: Sat, 23 Sep 2023 23:36:13 +0800 Subject: [PATCH 11/13] =?UTF-8?q?=E6=96=87=E6=9C=AC=E7=BA=A0=E6=AD=A3?= =?UTF-8?q?=E5=8F=8A=E6=B7=BB=E5=8A=A0=E7=89=A9=E5=93=81=E9=80=8F=E8=A7=86?= =?UTF-8?q?=E5=88=B0=E5=8D=87=E9=99=8D=E5=99=A8=E7=9A=84=E6=8E=A2=E6=9F=A5?= =?UTF-8?q?=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../assets/messages/actors/actors.properties | 2 +- .../assets/messages/items/items.properties | 20 +++++++++---------- .../main/assets/messages/misc/misc.properties | 12 +++++------ .../custom/testmode/LevelTeleporter.java | 2 ++ 4 files changed, 19 insertions(+), 17 deletions(-) diff --git a/core/src/main/assets/messages/actors/actors.properties b/core/src/main/assets/messages/actors/actors.properties index f6b68e13c..11a197d63 100644 --- a/core/src/main/assets/messages/actors/actors.properties +++ b/core/src/main/assets/messages/actors/actors.properties @@ -1138,7 +1138,7 @@ actors.buffs.earthimbue.name=大地之力 actors.buffs.earthimbue.desc=你被灌注了大地的力量!\n\n直到该效果结束前,你所有的物理攻击都会使敌人被缠绕在原地无法动弹一段时间。\n\n大地之力还能持续%s回合。 actors.buffs.enhancedrings.name=戒指强化 -actors.buffs.enhancedrings.desc=盗贼在使用神器时会强化装备中的戒指,在%d回合内使其获得+1升级。 +actors.buffs.enhancedrings.desc=极影铃虹在使用神器时会强化装备中的戒指,在%d回合内使其获得+1升级。 actors.buffs.fireimbue.name=火焰之力 actors.buffs.fireimbue.desc=你被灌注了火焰的力量!\n\n所有物理攻击都有机会使敌人燃烧。与此同时你对火焰完全免疫。\n\n剩余火焰之力效果时长:%s回合 diff --git a/core/src/main/assets/messages/items/items.properties b/core/src/main/assets/messages/items/items.properties index 809b9b462..5c9ab1ee9 100644 --- a/core/src/main/assets/messages/items/items.properties +++ b/core/src/main/assets/messages/items/items.properties @@ -552,7 +552,7 @@ items.armor.armor.inscribed=上面镌刻着_%s_。 items.armor.armor.cursed_worn=这套护甲被诅咒了,你无法卸下它。 items.armor.armor.cursed=你能感觉到这套护甲里潜伏着一股充满恶意的魔力。 items.armor.armor.not_cursed=这件护甲没有被诅咒。 -items.armor.armor.seal_attached=战士的破损纹章被贴附于这件护甲上,它正为战士提供_%d点护盾_。 +items.armor.armor.seal_attached=蕾零安洁的破损纹章被贴附于这件护甲上,它正为蕾零安洁提供_%d点护盾_。 items.armor.armor$glyph.glyph=刻印 items.armor.armor$glyph.killed=%s害死了你… @@ -567,13 +567,13 @@ items.armor.clotharmor.desc=这件轻便的护甲能提供最基本的防御。 items.armor.huntressarmor.name=英雄披风 items.armor.huntressarmor.no_enemies=视野中未发现敌人。 -items.armor.huntressarmor.desc=披着这件朴实无华的披风,女猎手能够使出一个华丽的招式。 +items.armor.huntressarmor.desc=披着这件朴实无华的披风,颐莲梅錵能够使出一个华丽的招式。 items.armor.leatherarmor.name=皮甲 items.armor.leatherarmor.desc=用鞣制的兽皮制成的护甲。没有布甲轻,但提供更好的防御。 items.armor.magearmor.name=英雄法袍 -items.armor.magearmor.desc=穿着这件华贵的法袍时,法师可以释放一项特殊的技能。 +items.armor.magearmor.desc=穿着这件华贵的法袍时,茉莉伊洛可以释放一项特殊的技能。 items.armor.mailarmor.name=链甲 items.armor.mailarmor.desc=由金属链环环相扣制成的一套结实又不失灵活的护甲。 @@ -585,13 +585,13 @@ items.armor.lamellararmor.name=札甲 items.armor.lamellararmor.desc=用许多长方形甲片排起而成的盔甲,为能承受它重量的冒险者提供最强的防御。 items.armor.roguearmor.name=英雄风衣 -items.armor.roguearmor.desc=裹着这身与黑暗融为一体的风衣,盗贼能够施展独特的身法。 +items.armor.roguearmor.desc=裹着这身与黑暗融为一体的风衣,极影铃虹能够施展独特的身法。 items.armor.scalearmor.name=鳞甲 items.armor.scalearmor.desc=在厚实的皮背心中缝入金属鳞片,形成了灵活而高防御的护甲。 items.armor.warriorarmor.name=英雄铠甲 -items.armor.warriorarmor.desc=这套铠甲看起来很有份量,但战士能借助它施展一项绝技。 +items.armor.warriorarmor.desc=这套铠甲看起来很有份量,但蕾零安洁能借助它施展一项绝技。 ### custom armor @@ -654,7 +654,7 @@ items.artifacts.cloakofshadows.ac_stealth=潜行 items.artifacts.cloakofshadows.cooldown=你的斗篷还需要%d回合来重新激活。 items.artifacts.cloakofshadows.cursed=你不能使用受诅咒的斗篷 items.artifacts.cloakofshadows.no_charge=你的斗篷充能不足无法使用。 -items.artifacts.cloakofshadows.desc=这是盗贼多年前从皇家军械库窃取的一件无价的魔法斗篷。穿上时,能够使你在短时间内完全隐身。\n\n被使用得越频繁,斗篷就会变得越强,使盗贼更频繁地隐身,持续时间也更长。 +items.artifacts.cloakofshadows.desc=这是极影铃虹多年前从皇家军械库窃取的一件无价的魔法斗篷。穿上时,能够使你在短时间内完全隐身。\n\n被使用得越频繁,斗篷就会变得越强,使极影铃虹更频繁地隐身,持续时间也更长。 items.artifacts.cloakofshadows$cloakstealth.no_charge=你的斗篷耗尽了能量。 items.artifacts.cloakofshadows$cloakstealth.levelup=你的斗篷变得更强大了! items.artifacts.cloakofshadows$cloakstealth.name=斗篷之下 @@ -1011,7 +1011,7 @@ items.bombs.woollybomb.desc=这枚改造过的炸弹在爆炸后会召出一群 ###food items.food.berry.name=地牢浆果 items.food.berry.eat_msg=酸甜可口,真棒! -items.food.berry.desc=这些小浆果是女猎手在地牢的植被里找到的,它可以被快速食用以获得少量饱腹感,还可能有实用的种子包含其中! +items.food.berry.desc=这些小浆果是颐莲梅錵在地牢的植被里找到的,它可以被快速食用以获得少量饱腹感,还可能有实用的种子包含其中! items.food.blandfruit.name=无味果 items.food.blandfruit.cooked=煮熟的无味果 @@ -1820,7 +1820,7 @@ items.wands.wandofmagicmissile.staff_name=魔弹之杖 items.wands.wandofmagicmissile.desc=这根十分普通的法杖能发射由纯魔法能量构成的飞弹。尽管法杖本身没有什么花哨的特效,它有更多的充能数,而且在被升级后能暂时强化其他法杖。 items.wands.wandofmagicmissile.stats_desc=从法杖中发出的魔法飞弹会对单个目标造成_%1$d~%2$d点伤害_,如果被升级则会暂时强化其他法杖。 items.wands.wandofmagicmissile.bmage_desc=当_战斗法师_以魔弹之杖近战攻击目标时,所有的法杖与魔杖都会恢复一定的充能。 -items.wands.wandofmagicmissile.eleblast_desc=魔弹之杖的元素风暴造成50%伤害,并使法师获得15回合的充能效果。 +items.wands.wandofmagicmissile.eleblast_desc=魔弹之杖的元素风暴造成50%伤害,并使战斗法师获得15回合的充能效果。 items.wands.wandofmagicmissile$magiccharge.name=魔力强化 items.wands.wandofmagicmissile$magiccharge.desc=你的魔弹法杖向其他法杖回馈了一股能量,提升着下一次施法的有效等级。\n\n其他法杖被强化至:+ %d\n\n剩余的魔力强化时长:%s 回合 @@ -2039,7 +2039,7 @@ items.weapon.melee.magesstaff.imbue_lost=魔杖之前吸收的魔力都会消散 items.weapon.melee.magesstaff.imbue_talent=最近用于灌注的法杖有_ %1$d%% _的概率回收为0级法杖。\n你还能回收_ %2$d _根法杖。\n如果没能成功回收为法杖,你则会得到一个奥术聚酯取而代之。 items.weapon.melee.magesstaff.yes=是的,我确定 items.weapon.melee.magesstaff.no=不,我改主意了 -items.weapon.melee.magesstaff.desc=这支老魔杖是件独一无二的魔法武器,由法师亲自雕琢而成,能注入其它法杖的魔力以获取新的力量。 +items.weapon.melee.magesstaff.desc=这支老魔杖是件独一无二的魔法武器,由茉莉伊洛亲自雕琢而成,能注入其它法杖的魔力以获取新的力量。 items.weapon.melee.magesstaff.no_wand=这支法杖并没有任何魔力, 它必须先被_注入进另一支法杖的魔力_才能用于施放法术。 items.weapon.melee.magesstaff.has_wand=魔杖目前被灌注了_%s_的力量。 items.weapon.melee.magesstaff.cursed_wand=这根魔杖受到了诅咒,导致它的魔法混乱而随机。 @@ -2255,7 +2255,7 @@ items.brokenseal.prompt=选择一件护甲。 items.brokenseal.unknown_armor=你需要先鉴定那件护甲。 items.brokenseal.degraded_armor=这件护甲的状况实在太糟糕了。 items.brokenseal.affix=你将纹章佩挂在了护甲上! -items.brokenseal.desc=一枚蜡制纹章,被贴在护甲上作为勇气的象征。纹章上的印记已被岁月磨损殆尽,还从中裂成两瓣。\n\n这是一件来自家乡的纪念物,在纹章的支持下战士会变得不屈不挠。佩戴纹章时战士能缓慢获得基于护甲品质的额外生命护盾。\n\n纹章可以被_贴附在护甲上_并能在护甲间转移。它能够携带一次升级。 +items.brokenseal.desc=一枚蜡制纹章,被贴在护甲上作为勇气的象征。纹章上的印记已被岁月磨损殆尽,还从中裂成两瓣。\n\n这是一件来自家乡的纪念物,在纹章的支持下蕾零安洁会变得不屈不挠。佩戴纹章时蕾零安洁能缓慢获得基于护甲品质的额外生命护盾。\n\n纹章可以被_贴附在护甲上_并能在护甲间转移。它能够携带一次升级。 items.brokenseal.choose_title=选择一个刻印 items.brokenseal.choose_desc=这件护甲与破损纹章都携带着一个刻印。请选择一个想保留的刻印。\n\n注意:如果选择保留护甲的刻印,纹章将无法转移此刻印。 diff --git a/core/src/main/assets/messages/misc/misc.properties b/core/src/main/assets/messages/misc/misc.properties index 0bee7c955..58d713c94 100644 --- a/core/src/main/assets/messages/misc/misc.properties +++ b/core/src/main/assets/messages/misc/misc.properties @@ -203,12 +203,12 @@ badges$badge.kill_dm720.desc=击杀冰雪矿洞中的DM-720和它的驾驶员。 badges$badge.death_from_glyph.title=慢性死亡 badges$badge.death_from_glyph.desc=死于延缓伤害。 -badges$badge.unlock_mage.title=解锁法师! -badges$badge.unlock_mage.desc=使用一个升级卷轴以解锁法师 -badges$badge.unlock_rogue.title=解锁盗贼! -badges$badge.unlock_rogue.desc=在一场游戏中进行十次伏击以解锁盗贼 -badges$badge.unlock_huntress.title=解锁女猎手! -badges$badge.unlock_huntress.desc=在一场游戏中使用投掷武器命中十次敌人以解锁女猎手 +badges$badge.unlock_mage.title=解锁茉莉伊洛! +badges$badge.unlock_mage.desc=使用一个升级卷轴以解锁茉莉伊洛 +badges$badge.unlock_rogue.title=解锁极影铃虹! +badges$badge.unlock_rogue.desc=在一场游戏中进行十次伏击以解锁极影铃虹 +badges$badge.unlock_huntress.title=解锁颐莲梅錵! +badges$badge.unlock_huntress.desc=在一场游戏中使用投掷武器命中十次敌人以解锁颐莲梅錵 badges$badge.kill_sm.title=拟态对决 badges$badge.kill_sm.desc=接受拟态王的战书并击败它获得它的认可。这是一场公平的对决! diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/custom/testmode/LevelTeleporter.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/custom/testmode/LevelTeleporter.java index a2f33000f..c0fd94dbb 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/custom/testmode/LevelTeleporter.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/custom/testmode/LevelTeleporter.java @@ -6,6 +6,7 @@ import com.shatteredpixel.shatteredpixeldungeon.Dungeon; import com.shatteredpixel.shatteredpixeldungeon.Statistics; import com.shatteredpixel.shatteredpixeldungeon.actors.Actor; import com.shatteredpixel.shatteredpixeldungeon.actors.Char; +import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Awareness; import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Buff; import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.LockedFloor; import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.MindVision; @@ -94,6 +95,7 @@ public class LevelTeleporter extends TestItem { InterlevelScene.mode = InterlevelScene.Mode.ASCEND; Game.switchScene( InterlevelScene.class ); } else if(action.equals(AC_VIEW)){ + Buff.affect( hero, Awareness.class, Awareness.DURATION ); Buff.affect( hero, MindVision.class, MindVision.DURATION ); Dungeon.observe(); ScrollOfMagicMapping som = new ScrollOfMagicMapping(); From 48ad1addbd9266a3fa4a9b792e0a96db7fab3ea2 Mon Sep 17 00:00:00 2001 From: zxcPandora <1158500986@qq.com> Date: Sun, 24 Sep 2023 12:11:14 +0800 Subject: [PATCH 12/13] =?UTF-8?q?=E6=BB=A1=E8=A1=80=E6=8A=A4=E7=9B=BE?= =?UTF-8?q?=E9=87=8F=E4=BF=AE=E6=AD=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../actors/buffs/ClearBleesdGoodBuff/BlessMixShiled.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/buffs/ClearBleesdGoodBuff/BlessMixShiled.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/buffs/ClearBleesdGoodBuff/BlessMixShiled.java index 779ba5c36..8faf18186 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/buffs/ClearBleesdGoodBuff/BlessMixShiled.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/buffs/ClearBleesdGoodBuff/BlessMixShiled.java @@ -27,7 +27,7 @@ public class BlessMixShiled extends Buff { if(Dungeon.hero.buff(BlessMixShiled.class) != null && hero.HT == hero.HP){ if(Dungeon.depth <= 5) { - Buff.affect(hero, Barrier.class).setShield(((30))); + Buff.affect(hero, Barrier.class).setShield(((20))); } else { Buff.affect(hero, Barrier.class).setShield(((20) * Dungeon.depth / 5)); } From 863ded5be4cbda06ce2e1b24fca518cbb64a5e2a Mon Sep 17 00:00:00 2001 From: zxcPandora <1158500986@qq.com> Date: Sun, 24 Sep 2023 12:33:48 +0800 Subject: [PATCH 13/13] =?UTF-8?q?=E8=8D=AF=E6=B0=B4=E7=99=94=E7=97=87?= =?UTF-8?q?=E6=96=87=E6=9C=AC=E7=BA=A0=E6=AD=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- core/src/main/assets/messages/misc/misc.properties | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/core/src/main/assets/messages/misc/misc.properties b/core/src/main/assets/messages/misc/misc.properties index 58d713c94..513fa68e7 100644 --- a/core/src/main/assets/messages/misc/misc.properties +++ b/core/src/main/assets/messages/misc/misc.properties @@ -336,7 +336,7 @@ challenges.sbsg = ]基因突变] challenges.sbsg_desc=地牢中的神秘魔力让一些生物发生了重大的变化\n-所有生物都会因为突变激素变得各不相同,给探索地牢的脚步带来更大的困难。\n-敌人有6种突变类型,且除爆炸体和酸液体概率为5%后,其余Roll出权重一致:\n\n突变失败体:近战伤害减少35%,移速提高到1.3。\n\n突变爆炸体:移速减少50%,攻击力降低30%,但死亡时拥有爆炸伤害。\n\n突变完全体:移速和攻击力各提高25%,且拥有30%伤害减免。\n\n突变危险体:攻击力提升20%,攻击有10%概率造成流血。死亡时有5%概率立刻向本层发出警报。\n\n突变烟雾体:攻击力减少10%,攻击范围+2,攻击敌人10%概率造成眩晕……\n\n突变酸液体:敌人获得额外远程技能,攻击范围+6,造成自身可造成的伤害20%的额外法术伤害并有概率随机产生一种有害烟雾(酸雾,毒雾,眩雾)\n\n_特别说明:如果开启精英强敌,词条会和精英词条可能共存于一个怪物,届时你将遭遇更大的挑战_ challenges.exsg = ]药水癔症] -challenges.exsg_desc=药水癔症详细规则:\n力量药水--60%概率力量-1\n灵视药剂--60%概率喝后失明5回合\n隐形药剂--60%概率喝后立刻怒吼\n极速药剂--60%概率喝后立刻残废8回合\n==========================\n小型口粮-吃后立刻获得极速4回合\n冷冻生肉片-吃后获得奥术护盾\n全肉大饼-吃后立刻获得8回合极速,且有大概率+1力量(_随着力量的追加,获得力量的概率会渐渐变低_)\n\n高级药水_(合剂/魔药)_不受影响\n不知道何种原因,大部分正面药水你都感觉有毒!\n你的臆想会导致药水有毒,但食物却会很有用!而且地牢里面还会追加自动售货机,会售卖一些更加高级的东西。 +challenges.exsg_desc=药水癔症详细规则:\n力量药水--60%概率力量-1且冰冻10回合\n灵视药剂--60%概率喝后失明5回合\n隐形药剂--60%概率喝后立刻怒吼\n极速药剂--60%概率喝后立刻残废8回合\n==========================\n小型口粮-吃后立刻获得极速4回合\n冷冻生肉片-吃后获得奥术护盾\n全肉大饼-吃后立刻获得8回合极速,且有大概率+1力量(_随着力量的追加,获得力量的概率会渐渐变低_)\n\n高级药水_(合剂/魔药)_不受影响\n不知道何种原因,大部分正面药水你都感觉有毒!\n你的臆想会导致药水有毒,但食物却会很有用!而且地牢里面还会追加自动售货机,会售卖一些更加高级的东西。 challenges.icedied = 雪虐风饕(未完成) challenges.icedied_desc=很显然,地牢的雪越下越大了,在这严寒里面,生存的法则将进一步让我们活得更久。\n篝火房间一旦被激活不再无限,变成40回合的寒冷抑制,商人会贩卖更多特殊物品。