update beta21-p1.2
This commit is contained in:
parent
9654542d1f
commit
4efd6e1a94
|
@ -84,6 +84,7 @@ dependencies {
|
|||
// https://firebase.google.com/docs/android/setup#available-libraries
|
||||
|
||||
|
||||
//noinspection GradleDependency
|
||||
implementation "com.badlogicgames.gdx:gdx-backend-android:$gdxVersion"
|
||||
natives "com.badlogicgames.gdx:gdx-platform:$gdxVersion:natives-armeabi-v7a"
|
||||
natives "com.badlogicgames.gdx:gdx-platform:$gdxVersion:natives-x86"
|
||||
|
|
|
@ -50,7 +50,7 @@ public class AndroidGame extends AndroidApplication {
|
|||
public static AndroidApplication instance;
|
||||
private FirebaseAnalytics mFirebaseAnalytics;
|
||||
private static AndroidPlatformSupport support;
|
||||
|
||||
|
||||
@Override
|
||||
protected void onCreate (Bundle savedInstanceState) {
|
||||
super.onCreate(savedInstanceState);
|
||||
|
@ -88,11 +88,11 @@ public class AndroidGame extends AndroidApplication {
|
|||
|
||||
//UCEHandler.Builder builder = new UCEHandler.Builder(this);
|
||||
//builder.build();
|
||||
|
||||
mFirebaseAnalytics = FirebaseAnalytics.getInstance(this);
|
||||
|
||||
if (SPDSettings.firebase()){
|
||||
FirebaseCrashlytics.getInstance().setCrashlyticsCollectionEnabled(true);
|
||||
}
|
||||
FirebaseCrashlytics.getInstance().setUserId(SPDSettings.customSeed());
|
||||
|
||||
FirebaseCrashlytics.getInstance().setCrashlyticsCollectionEnabled(true);
|
||||
|
||||
} else {
|
||||
|
@ -101,20 +101,21 @@ public class AndroidGame extends AndroidApplication {
|
|||
|
||||
//set desired orientation (if it exists) before initializing the app.
|
||||
if (SPDSettings.landscape() != null) {
|
||||
instance.setRequestedOrientation( SPDSettings.landscape() ?
|
||||
instance.setRequestedOrientation(Boolean.TRUE.equals(SPDSettings.landscape()) ?
|
||||
ActivityInfo.SCREEN_ORIENTATION_SENSOR_LANDSCAPE :
|
||||
ActivityInfo.SCREEN_ORIENTATION_SENSOR_PORTRAIT );
|
||||
}
|
||||
|
||||
AndroidApplicationConfiguration config = new AndroidApplicationConfiguration();
|
||||
config.depth = 0;
|
||||
if (Build.VERSION.SDK_INT <= Build.VERSION_CODES.ICE_CREAM_SANDWICH_MR1) {
|
||||
//use rgb565 on ICS devices for better performance
|
||||
config.r = 5;
|
||||
config.g = 6;
|
||||
config.b = 5;
|
||||
}
|
||||
|
||||
|
||||
// if (Build.VERSION.SDK_INT <= Build.VERSION_CODES.ICE_CREAM_SANDWICH_MR1) {
|
||||
// //use rgb565 on ICS devices for better performance
|
||||
// config.r = 5;
|
||||
// config.g = 6;
|
||||
// config.b = 5;
|
||||
// }
|
||||
|
||||
config.useCompass = false;
|
||||
config.useAccelerometer = false;
|
||||
|
||||
|
|
|
@ -17,7 +17,7 @@ allprojects {
|
|||
appPackageName = 'com.ansdomagiclingpixeldungeon.ling'
|
||||
|
||||
appVersionCode =700720
|
||||
appVersionName = '0.6.0.0-Beta21-p1'
|
||||
appVersionName = '0.6.0.0-Beta21-p2'
|
||||
|
||||
appJavaCompatibility = JavaVersion.VERSION_1_8
|
||||
|
||||
|
|
Binary file not shown.
Before Width: | Height: | Size: 17 KiB After Width: | Height: | Size: 18 KiB |
|
@ -294,6 +294,8 @@ actors.mobs.dimandking$dkmonk.rankings_desc=被钻石宝箱王说教至死
|
|||
actors.mobs.dimandking$dkwarlock.rankings_desc=被钻石宝箱王说教至死
|
||||
actors.mobs.dimandking.str_empower=认真模式开启!
|
||||
|
||||
actors.mobs.dimandking.wrning=钻石宝箱王:正在蓄力死亡射线,标记了一处地点……
|
||||
|
||||
actors.mobs.redlunar.name=死灵大师
|
||||
actors.mobs.redlunar.desc=那些回忆花重金雇的保镖,你看来已经引起了他的注意。
|
||||
actors.mobs.redlunar.notice=0元购?
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
###MLPD
|
||||
items.artifacts.goldiron.name=镀金铁砧
|
||||
items.artifacts.goldiron.desc=待补充
|
||||
items.artifacts.goldiron.name=镀金铁锤
|
||||
items.artifacts.goldiron.desc=这曾是巨魔铁匠的锤子,其中蕴含了神奇的力量。\n\n因为你一不小心把巨魔镐子给搞丢了,巨魔委托你去杀死他的阴暗面。\n\n如今,你已完成巨魔的委托,这镀金铁锤便是巨魔给予你的礼物……
|
||||
|
||||
items.bombs.laserpython.name=激光十字晶柱召唤器
|
||||
items.bombs.laserpython.desc=这枚召唤器会在爆炸后立刻生成一个十字晶柱。
|
||||
|
@ -80,24 +80,15 @@ items.quest.shopdiedbook.name=诅咒之书
|
|||
items.quest.shopdiedbook.chill=这层的警报已经拉响,离开这里,快!
|
||||
items.quest.shopdiedbook.desc=当你准备抢劫的时候,商人向你丢了一本书,这本书蕴含了Γ诅咒的力量Γ的魔力,你无力将其扔掉,源源不断的Γ商人守卫军队Γ正在前来。你只能战斗!!!\n\n诅咒之书在身上时,英雄将受到Γ移速减缓一半,同时商店守卫军队将源源不断的出兵Γ来阻止你,你也无法离开本层。唯有击败Γ本层商店守卫首领Γ之后,才能解除诅咒之书的力量,获得店主的认可。\n\n_但同时,店主会因为缺货问题在下一大层无法开设商店,将在下下一大层重新恢复商店交易。_
|
||||
|
||||
items.quest.skeletongold.name=染血骷髅金币
|
||||
items.quest.skeletongold.desc=在寒冰圣域发现的一枚刻有骷髅头的金币,沾染的血渍让这枚金币附着了能改变时空的魔力。抛动金币以扰动地牢的魔力流。
|
||||
items.quest.skeletongold.ac_select_one=Δ抛动一次金币Δ
|
||||
items.quest.skeletongold.ac_select_two=Π抛动两次金币Π
|
||||
items.quest.skeletongold.ac_select_three=Ξ抛动三次金币Ξ
|
||||
items.quest.skeletongold.ac_select_how=使用方法和介绍
|
||||
items.quest.skeletongold.preventing=这里还没有寻找到强大的魔力流……
|
||||
items.quest.skeletongold.wow=染血金币发出诡异的光芒,你感到下层正在分崩离析……
|
||||
|
||||
items.weapon.melee.endingblade.name=终焉
|
||||
items.weapon.melee.endingblade.desc=不知道从哪来的一个拆开的场记板,貌似沾染了焰之诅咒,会随机产生_一种诅咒_,有着强大的侵蚀能力,一旦装备了它就无法脱身了……\n\n这个武器在攻击敌人的时候能吸收一定的浊焰能量,在汲取一定的浊焰能量后会产生新的能力以及自我升级。\n\n当前的浊焰能量:
|
||||
items.weapon.melee.endingblade.desc_2=\n\n死亡宣告当前冷却值为:
|
||||
items.weapon.melee.endingblade.desc_2=\n\n(通过打击敌人减掉)死亡宣告当前冷却值为:
|
||||
items.weapon.melee.endingblade.cursed=当你装备上这个武器后,一股无形的力量将你束缚住……
|
||||
items.weapon.melee.endingblade.donot_eqip=终焉的诅咒已经浸染你的身体,你无力脱下它。
|
||||
|
||||
items.weapon.melee.endingblade.procced=终焉:审判一切,归于虚无!!!
|
||||
items.weapon.melee.endingblade.ac_lastcrystal=Γ激光晶柱Γ
|
||||
items.weapon.melee.endingblade.ac_diedghost=✦死亡宣告✦
|
||||
items.weapon.melee.endingblade.ac_healreset=_亡者归来_
|
||||
items.weapon.melee.endingblade.ac_healreset=_千里追魂_
|
||||
|
||||
#MLPDSTOREYBOOKS
|
||||
|
||||
|
@ -2021,6 +2012,11 @@ items.amulet.ac_end=返回主城
|
|||
items.amulet.rankings_desc=获得水晶之心,而危机仍在
|
||||
items.amulet.desc=击败了古神后,你发现了水晶之心。但是,前面不再有前进的道路了。莫非,本次旅程已经宣告结束了吗?
|
||||
|
||||
items.jamulet.name=水晶之心
|
||||
items.jamulet.ac_end=返回主城
|
||||
items.jamulet.rankings_desc=获得水晶之心,而危机仍在
|
||||
items.jamulet.desc=击败了古神后,你发现了水晶之心。但是,前面不再有前进的道路了。莫非,本次旅程已经宣告结束了吗?
|
||||
|
||||
items.ankh.name=重生十字架
|
||||
items.ankh.ac_bless=祝福
|
||||
items.ankh.bless=你用散发着治愈魔力的清水祝福了这枚重生十字架。
|
||||
|
|
|
@ -69,7 +69,9 @@ badges$badge.godd_make=老人与海\n累计完成老杖匠的全部任务\n\n_
|
|||
badges$badge.clear_water=净化大师\n完成挑战:污泥浊水\n\n_奖励:敬请期待_
|
||||
|
||||
badges$badge.ghostdage=幽灵大哥\n_在幽灵处获得一次+4品质武器或护甲\n\n_(镀层需求:+5品质武器)
|
||||
//badges$badge.ghostdage=幽灵大哥\n在幽灵处获得一次_+5_品质武器或护甲\n\nΞ你已成功镀层Ξ
|
||||
badges$badge.dageto=幽灵大哥\n在幽灵处获得一次_+5_品质武器或护甲\n\nΞ你已成功镀层Ξ
|
||||
|
||||
badges$badge.endied=终焉之旅\n\n_(获得终焉)_
|
||||
|
||||
badges$badge.halofire_died=死于磷火烈焰
|
||||
badges$badge.happy_end=幸福结局
|
||||
|
@ -116,10 +118,10 @@ challenges.champion_enemies_desc=会升级的不止你一个!\n\n・普通敌
|
|||
的机率拥有特殊的精英属性。\n・精英敌人刷出时会立即醒来。\n・精英敌人免疫腐化效果。\n\n精英敌人有七种:\n_烈焰(橙色):_ 近战伤害 \
|
||||
+25% 且带有点燃效果,免疫火焰,死亡时引燃周围。\n_索敌(紫色):_ 近战伤害 +25%,近战范围 +8。\n_敌法(绿色):_ 受到伤害 -25%,拥有魔法免疫。\n_巨型(蓝色):_ 受到伤害 -75%,近战范围 +1,无法进入门与过道。\n_祝福(黄色):_ 精准与躲避 +200%。\n_成长(红色):_ 精准、躲避、攻击伤害与有效生命值 +20%。每过 3 回合会再增长 1%。\n_鬼磷(天蓝色):_ 近战伤害 +65% 且带有磷火效果,免疫火焰与磷火,死亡时引燃周围。
|
||||
challenges.stronger_bosses=Π梦魇Boss
|
||||
challenges.stronger_bosses_desc=这项挑战让挑战 Boss 变得更有挑战性了!\n\n_粘咕:_生命值 +20%\n_-_ 水中恢复量增长,每回合恢复 6 点生命\n_-_ 爆发攻击蓄力时间由 2 回合缩短至 1 回合\n_天狗:_生命 +25%\n_-_ 第一阶段:陷阱更加致命\n_-_ 第二阶段:技能频率更高\n_DM-300:_生命 +60%\n_-_ 能量塔更坚固。\n_-_ 技能频率更高,威力也更强大\n_-_ 超载时移动速度更高\n_-_ 击败时必掉落荆棘斗篷\n_矮人国王:_生命 +50%\n_-_ 整场战斗内召唤的随从都更强大\n_-_ 第一阶段:技能与召唤频率都更高\n_-_ 第二阶段:每轮额外召唤两个随从\n_-_ 第三阶段:生命值 +100%,召唤频率更高\n_Yog-Dzewa:_\n_-_ 同时召唤两个古神之拳!\n_-_ 激光攻击伤害 +60%\n_-_ 召唤更强大的随从
|
||||
challenges.stronger_bosses_desc=这项挑战让挑战 Boss 变得更有挑战性了!\n\n_粘咕:_生命值 +20%\n_-_ 水中恢复量增长,每回合恢复 3 点生命\n_-_ 爆发攻击蓄力时间由 2 回合缩短至 1 回合\n_天狗:_生命 +25%\n_-_ 第一阶段:陷阱更加致命\n_-_ 第二阶段:技能频率更高\n_钻石宝箱王_: 生命+20% \n_-_ 整场战斗出现额外技能\n_DM-300:_生命 +60%\n_-_ 能量塔更坚固。\n_-_ 技能频率更高,威力也更强大\n_-_ 超载时移动速度更高\n_-_ 击败时必掉落荆棘斗篷\n_矮人国王:_生命 +50%\n_-_ 整场战斗内召唤的随从都更强大\n_-_ 第一阶段:技能与召唤频率都更高\n_-_ 第二阶段:每轮额外召唤两个随从\n_-_ 第三阶段:生命值 +100%,召唤频率更高\n_Yog-Dzewa:_\n_-_ 同时召唤两个古神之拳!\n_-_ 激光攻击伤害 +60%\n_-_ 召唤更强大的随从
|
||||
actors.char.aquaphobia=你受到了来自水的伤害!
|
||||
challenges.pro=Δ开发者模式Δ
|
||||
challenges.pro_desc=注解版?\n开局_几乎是全物品_!同时,你将无法通关!
|
||||
challenges.pro_desc=供测试和开发使用\n开局_几乎是全物品_!同时,你将无法通关!也无法记录在排行榜上面。
|
||||
challenges.traditional = 现实之声-T1挑战
|
||||
challenges.hard = 梦境之声-T2挑战
|
||||
challenges.warning = 寻觅之声-T3挑战
|
||||
|
@ -143,5 +145,5 @@ dlc.bossrush_desc=被你击败过多次的首领们熟识了英雄的技能,
|
|||
dlc.back_go=逆流而上
|
||||
dlc.back_go_desc=颠倒的一次的冒险,你能顺利离开这里吗?5大固定Boss则是在最终楼层出现。
|
||||
|
||||
ld=\n_冰雪魔女:_\n_-_生命+25%\n_-_ 水中召唤的仆从更多\n-击败时必定掉落紫金宝石护符\n_矮人大师:_\n_-_ 致命技能更加频繁\n_-_ 生命值+50%\n-击败时必定掉落自然神圣护符\n_史莱姆王:_\n_-_ 生命值+100%\n_-_ 伤害更高,速度更快\n_-_ 在开局额外召唤豺狼诡术师,巨钳螃蟹,腐臭老鼠,蚀化史莱姆\n_-_ 击败时必定掉落凝胶手套\n_DM720:_\n_-_ 获得全新技能\n_-_ 击败时必定掉落DM150控制终端[尚未完成]
|
||||
kill=\n_冰雪魔女:_\n_-_生命+25%\n_-_ 水中召唤的仆从更多\n-击败时必定掉落紫金宝石护符\n_矮人大师:_\n_-_ 致命技能更加频繁\n_-_ 生命值+50%\n-击败时必定掉落自然神圣护符\n_史莱姆王:_\n_-_ 生命值+100%\n_-_ 伤害更高,速度更快\n_-_ 在开局额外召唤豺狼诡术师,巨钳螃蟹,腐臭老鼠,蚀化史莱姆\n_-_ 击败时必定掉落凝胶手套\n_DM720:_\n_-_ 获得全新技能\n_-_ 击败时必定掉落DM150控制终端[尚未完成]
|
||||
|
||||
|
|
|
@ -465,4 +465,6 @@ ui.changelist.mlpd.vm0_6_7_x_changes.bug_06x26=-1.修复了影子盗贼的崩溃
|
|||
ui.changelist.mlpd.vm0_6_7_x_changes.bug_06x28=-1.修复了矮人大师的问题\n-2.修复了部分楼层的错误生成
|
||||
|
||||
ui.changelist.mlpd.vm0_6_7_x_changes.bug_06x29=-1.修复了不抢劫回归地牢也能获得东西的问题\n-2.修复了从雪凛峡谷回来后复活失效的问题
|
||||
|
||||
ui.changelist.mlpd.vm0_6_7_x_changes.bug_06x30=-1.修复了浊焰魔女的错误崩溃\n-2.修复了终焉的错误生成\n-3.红龙之王机制改变,老存档已无法加载,请重新开启新档
|
||||
//ui.changelist.mlpd.vm0_5_x_changes.xxx//
|
|
@ -2,6 +2,13 @@ windows.textchallenges.seed_custom_title = 种子
|
|||
windows.textchallenges.hint = 不输入即为随机种子
|
||||
windows.textchallenges.delete_seed_input = 清除
|
||||
|
||||
windows.wndtextinput.enter_key=输入你的QQ号
|
||||
windows.wndgame.dialog_user=为了更好的在后续崩溃维护检查遇到一些问题,请在这里Ξ输入你的QQ号Ξ,如果开发者遇到问题将可能通过你的ID联系你询问详细崩溃情况。
|
||||
windows.wndtextinput.yes=确认
|
||||
windows.wndtextinput.no=稍后
|
||||
|
||||
windows.wndsettings$helptab.reset=重设你的用户ID
|
||||
|
||||
windows.wndsettings$helptab.title=辅助功能
|
||||
windows.wndsettings$helptab.helpsettings=启用物品生成查询器
|
||||
|
||||
|
|
Binary file not shown.
BIN
core/src/main/assets/music/nbpl.ogg
Normal file
BIN
core/src/main/assets/music/nbpl.ogg
Normal file
Binary file not shown.
|
@ -110,6 +110,7 @@ public class Badges {
|
|||
GODD_MAKE ( 82 ),
|
||||
CLEAR_WATER ( 83 ),
|
||||
GHOSTDAGE ( 84 ),
|
||||
ENDIED ( 85 ),
|
||||
//gold
|
||||
PIRANHAS ( 64 ),
|
||||
//these names are a bit outdated, but it doesn't really matter.
|
||||
|
@ -165,6 +166,7 @@ public class Badges {
|
|||
CHAMPION_4X ( 115 ),
|
||||
CHAMPION_5X ( 116 ),
|
||||
NYZ_SHOP ( 117 ),
|
||||
DAGETO ( 118 ),
|
||||
|
||||
//rudy
|
||||
FIREGIRL ( 128 ),
|
||||
|
@ -380,6 +382,21 @@ public class Badges {
|
|||
displayBadge( badge );
|
||||
}
|
||||
|
||||
public static void GhostDageCollected() {
|
||||
Badge badge = null;
|
||||
|
||||
if (!local.contains( Badge.GHOSTDAGE ) && Statistics.naiyaziCollected == 1) {
|
||||
badge = Badge.GHOSTDAGE;
|
||||
local.add( badge );
|
||||
}
|
||||
if (!local.contains( Badge.DAGETO ) && Statistics.naiyaziCollected >= 2) {
|
||||
addGlobal(badge);
|
||||
badge = Badge.DAGETO;
|
||||
}
|
||||
local.add(badge);
|
||||
displayBadge( badge );
|
||||
}
|
||||
|
||||
public static void validateLevelReached() {
|
||||
Badge badge = null;
|
||||
|
||||
|
@ -555,6 +572,14 @@ public class Badges {
|
|||
validateYASD();
|
||||
}
|
||||
|
||||
public static void ENDDIED() {
|
||||
Badge badge = Badge.ENDIED;
|
||||
local.add( badge );
|
||||
displayBadge( badge );
|
||||
|
||||
validateYASD();
|
||||
}
|
||||
|
||||
public static void DeathRedNercols() {
|
||||
Badge badge = Badge.DEATH_FROM_FIRE;
|
||||
local.add( badge );
|
||||
|
|
|
@ -35,7 +35,6 @@ import com.shatteredpixel.shatteredpixeldungeon.items.scrolls.Scroll;
|
|||
import com.shatteredpixel.shatteredpixeldungeon.journal.Notes;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.messages.Messages;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.ui.QuickSlotButton;
|
||||
import com.watabou.noosa.Game;
|
||||
import com.watabou.utils.Bundlable;
|
||||
import com.watabou.utils.Bundle;
|
||||
import com.watabou.utils.FileUtils;
|
||||
|
@ -61,6 +60,10 @@ public enum Rankings {
|
|||
|
||||
public void submit( boolean win, Class cause ) {
|
||||
|
||||
if(Dungeon.isChallenged(Challenges.PRO)){
|
||||
return;
|
||||
}
|
||||
|
||||
load();
|
||||
|
||||
Record rec = new Record();
|
||||
|
|
|
@ -37,9 +37,19 @@ import java.util.Locale;
|
|||
public class SPDSettings extends GameSettings {
|
||||
|
||||
//Version info
|
||||
public static final String KEY_AUTH_KEY = "net_auth_key";
|
||||
public static final String KEY_CUSTOM_SEED = "Your_Key";
|
||||
public static final String KEY_CUSTOM_LING = "Your_Key";
|
||||
|
||||
public static void customSeed( String value ){
|
||||
put( KEY_CUSTOM_SEED, value );
|
||||
}
|
||||
|
||||
public static String customSeed() {
|
||||
return getString( KEY_CUSTOM_SEED, KEY_CUSTOM_LING, 20);
|
||||
}
|
||||
|
||||
public static final String KEY_VERSION = "version";
|
||||
public static String DEFAULT_KEY = "debug";
|
||||
|
||||
public static void quickslots( int value ){
|
||||
put( KEY_QUICKSLOTS, value );
|
||||
}
|
||||
|
|
|
@ -33,6 +33,11 @@ import com.watabou.utils.PlatformSupport;
|
|||
|
||||
public class ShatteredPixelDungeon extends Game {
|
||||
|
||||
public TitleScene net;
|
||||
public static TitleScene net(){
|
||||
return ((ShatteredPixelDungeon)instance).net;
|
||||
}
|
||||
|
||||
private static String log = "";
|
||||
public static void appendLog(String string) {
|
||||
log += "\n\n" + string;
|
||||
|
|
|
@ -55,6 +55,12 @@ public class Statistics {
|
|||
|
||||
public static boolean deadshoppingdied = false;
|
||||
|
||||
public static boolean wangzheguilai = false;
|
||||
|
||||
public static boolean endingbald = false;
|
||||
|
||||
public static int dageCollected;
|
||||
|
||||
//Directly add float time will cause accuracy lose and stop timing if time is long enough
|
||||
//so use long to record seconds, float to count sub-seconds.
|
||||
//SPD-V1.3.2-ITEM SPAWN CODE
|
||||
|
@ -89,6 +95,8 @@ public class Statistics {
|
|||
fireGirlnoshopping = false;
|
||||
|
||||
deadshoppingdied = false;
|
||||
wangzheguilai = false;
|
||||
endingbald = false;
|
||||
|
||||
second_elapsed = 0f;
|
||||
real_seconds = 0;
|
||||
|
@ -121,6 +129,10 @@ public class Statistics {
|
|||
|
||||
private static final String SHOPPINGDIED = "deadshoppingdied";
|
||||
|
||||
private static final String WZGL = "wangzheguilai";
|
||||
|
||||
private static final String ENBR = "endingbald";
|
||||
|
||||
private static final String EXLEVEL = "Exlevel";
|
||||
|
||||
public static void storeInBundle( Bundle bundle ) {
|
||||
|
@ -148,6 +160,8 @@ public class Statistics {
|
|||
|
||||
bundle.put( SHOPPINGDIED, deadshoppingdied );
|
||||
|
||||
bundle.put( WZGL, wangzheguilai );
|
||||
|
||||
//SPD
|
||||
bundle.put("real_time_passed", second_elapsed);
|
||||
bundle.put("real_seconds_passed", real_seconds);
|
||||
|
@ -178,6 +192,8 @@ public class Statistics {
|
|||
fireGirlnoshopping = bundle.getBoolean( NOSHOPPING );
|
||||
deadshoppingdied = bundle.getBoolean( SHOPPINGDIED );
|
||||
|
||||
wangzheguilai = bundle.getBoolean( WZGL );
|
||||
|
||||
//SPD
|
||||
second_elapsed = bundle.getFloat("real_time_passed");
|
||||
real_seconds = bundle.getLong("real_seconds_passed");
|
||||
|
|
|
@ -24,6 +24,7 @@ package com.shatteredpixel.shatteredpixeldungeon.actors.hero;
|
|||
import static com.shatteredpixel.shatteredpixeldungeon.Challenges.AQUAPHOBIA;
|
||||
import static com.shatteredpixel.shatteredpixeldungeon.Challenges.LIGHTBLACK;
|
||||
import static com.shatteredpixel.shatteredpixeldungeon.Dungeon.hero;
|
||||
import static com.shatteredpixel.shatteredpixeldungeon.SPDSettings.HelpSettings;
|
||||
import static com.shatteredpixel.shatteredpixeldungeon.levels.Level.set;
|
||||
|
||||
import com.shatteredpixel.shatteredpixeldungeon.Assets;
|
||||
|
@ -376,7 +377,7 @@ public class Hero extends Char {
|
|||
pre.append("craft_vals_");
|
||||
pre.append(csname);
|
||||
int[] trys = bundle.getIntArray(pre.toString());
|
||||
LinkedHashMap lname = new LinkedHashMap();
|
||||
LinkedHashMap<String, Integer> lname = new LinkedHashMap<String, Integer>();
|
||||
|
||||
for(int lisx = 0; lisx < enus.length && lisx < trys.length; ++lisx) {
|
||||
lname.put(enus[lisx], trys[lisx]);
|
||||
|
@ -495,7 +496,13 @@ public class Hero extends Char {
|
|||
}
|
||||
Buff.affect( this, Regeneration.class );
|
||||
Buff.affect( this, Hunger.class );
|
||||
Buff.affect(this, GameTracker.class);
|
||||
|
||||
|
||||
if(HelpSettings()) {
|
||||
Buff.affect(this, GameTracker.class);
|
||||
} {
|
||||
//Do Stauff
|
||||
}
|
||||
}
|
||||
|
||||
public int tier() {
|
||||
|
|
|
@ -57,14 +57,13 @@ import com.shatteredpixel.shatteredpixeldungeon.items.armor.ClothArmor;
|
|||
import com.shatteredpixel.shatteredpixeldungeon.items.artifacts.ChaliceOfBlood;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.items.artifacts.CloakOfShadows;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.items.artifacts.DriedRose;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.items.artifacts.EtherealChains;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.items.artifacts.GoldIron;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.items.artifacts.MasterThievesArmband;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.items.artifacts.TalismanOfForesight;
|
||||
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.bombs.LaserPython;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.items.books.bookslist.BrokenBooks;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.items.books.bookslist.DeepBloodBooks;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.items.books.bookslist.GrassKingBooks;
|
||||
|
@ -78,7 +77,6 @@ import com.shatteredpixel.shatteredpixeldungeon.items.food.MeatPie;
|
|||
import com.shatteredpixel.shatteredpixeldungeon.items.food.PotionOfLightningShiled;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.items.lightblack.OilLantern;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.items.lightblack.OilPotion;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.items.potions.AlchemicalCatalyst;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.items.potions.PotionOfExperience;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.items.potions.PotionOfHealing;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.items.potions.PotionOfInvisibility;
|
||||
|
@ -119,6 +117,7 @@ import com.shatteredpixel.shatteredpixeldungeon.items.weapon.melee.BlackDog;
|
|||
import com.shatteredpixel.shatteredpixeldungeon.items.weapon.melee.Dagger;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.items.weapon.melee.EndingBlade;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.items.weapon.melee.FireFishSword;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.items.weapon.melee.Gauntlet;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.items.weapon.melee.Gloves;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.items.weapon.melee.GreenSword;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.items.weapon.melee.IceFishSword;
|
||||
|
@ -177,12 +176,11 @@ public enum HeroClass {
|
|||
if (Dungeon.isChallenged(Challenges.PRO)){
|
||||
new FrozenCarpaccio().quantity(11).identify().collect();
|
||||
new FireFishSword().quantity(1).identify().collect();
|
||||
new LaserPython().quantity(100).identify().collect();
|
||||
new PotionOfInvisibility().quantity(45).identify().collect();
|
||||
new LockSword().quantity(1).identify().collect();
|
||||
Buff.affect(hero, ChampionHero.AntiMagic.class, 50000f);
|
||||
new AlchemicalCatalyst().quantity(45).identify().collect();
|
||||
new EtherealChains().quantity(1).identify().collect();
|
||||
new Gauntlet().quantity(1).identify().collect();
|
||||
new GoldIron().quantity(1).identify().collect();
|
||||
new ScrollOfIdentify().quantity(45).identify().collect();
|
||||
new ScrollOfTransmutation().quantity(45).identify().collect();
|
||||
new BeaconOfReturning().quantity(11).identify().collect();
|
||||
|
|
|
@ -1,5 +1,7 @@
|
|||
package com.shatteredpixel.shatteredpixeldungeon.actors.mobs;
|
||||
|
||||
import static com.shatteredpixel.shatteredpixeldungeon.Challenges.STRONGER_BOSSES;
|
||||
|
||||
import com.shatteredpixel.shatteredpixeldungeon.Assets;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.Badges;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.Dungeon;
|
||||
|
@ -22,6 +24,7 @@ import com.shatteredpixel.shatteredpixeldungeon.effects.CellEmitter;
|
|||
import com.shatteredpixel.shatteredpixeldungeon.effects.Flare;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.effects.Pushing;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.effects.Speck;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.effects.TargetedCell;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.effects.particles.ElmoParticle;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.effects.particles.EnergyParticle;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.effects.particles.HalomethaneFlameParticle;
|
||||
|
@ -43,9 +46,12 @@ import com.shatteredpixel.shatteredpixeldungeon.messages.Messages;
|
|||
import com.shatteredpixel.shatteredpixeldungeon.scenes.GameScene;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.sprites.CharSprite;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.sprites.MimicSprite;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.tiles.DungeonTilemap;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.ui.BossHealthBar;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.ui.BuffIndicator;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.ui.Window;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.utils.GLog;
|
||||
import com.watabou.noosa.Game;
|
||||
import com.watabou.noosa.audio.Sample;
|
||||
import com.watabou.noosa.particles.Emitter;
|
||||
import com.watabou.utils.Bundle;
|
||||
|
@ -63,8 +69,7 @@ public class DimandKing extends Boss {
|
|||
initBaseStatus(14, 23, 33, 22, 200, 5, 12);
|
||||
initStatus(120);
|
||||
properties.add(Property.UNDEAD);
|
||||
HP=250;
|
||||
HT=250;
|
||||
HP = HT = Dungeon.isChallenged(STRONGER_BOSSES) ? 320 : 250;
|
||||
}
|
||||
|
||||
private int phase = 1;
|
||||
|
@ -95,6 +100,8 @@ public class DimandKing extends Boss {
|
|||
private static final String ABILITY_CD = "ability_cd";
|
||||
private static final String LAST_ABILITY = "last_ability";
|
||||
|
||||
private static final String TARGETED_CELLS = "targeted_cells";
|
||||
|
||||
@Override
|
||||
public void storeInBundle(Bundle bundle) {
|
||||
super.storeInBundle(bundle);
|
||||
|
@ -104,6 +111,13 @@ public class DimandKing extends Boss {
|
|||
bundle.put( ABILITY_CD, abilityCooldown );
|
||||
bundle.put( LAST_ABILITY, lastAbility );
|
||||
bundle.put("wavePhase2", wave);
|
||||
|
||||
//暴力Boss
|
||||
int[] bundleArr = new int[targetedCells.size()];
|
||||
for (int i = 0; i < targetedCells.size(); i++){
|
||||
bundleArr[i] = targetedCells.get(i);
|
||||
}
|
||||
bundle.put(TARGETED_CELLS, bundleArr);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -117,6 +131,13 @@ public class DimandKing extends Boss {
|
|||
wave = bundle.getInt("wavePhase2");
|
||||
|
||||
if (phase == 2) properties.add(Property.IMMOVABLE);
|
||||
|
||||
//暴力Boss
|
||||
int[] bundleArr = new int[targetedCells.size()];
|
||||
for (int i = 0; i < targetedCells.size(); i++){
|
||||
bundleArr[i] = targetedCells.get(i);
|
||||
}
|
||||
bundle.put(TARGETED_CELLS, bundleArr);
|
||||
}
|
||||
|
||||
private void resetChanceMap(){
|
||||
|
@ -333,6 +354,9 @@ public class DimandKing extends Boss {
|
|||
|
||||
if (bestPos != enemy.pos) ScrollOfTeleportation.appear(furthest, bestPos);
|
||||
yell(Messages.get(this, "teleport_" + Random.IntRange(1, 2)));
|
||||
if(Dungeon.isChallenged(STRONGER_BOSSES)) {
|
||||
doYogLasers();
|
||||
}
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
|
@ -347,12 +371,18 @@ public class DimandKing extends Boss {
|
|||
}
|
||||
new Flare(5, 32).color(0xFF6060, false).show(sprite, 1.5f);
|
||||
yell(Messages.get(this,"buff_all"));
|
||||
if(Dungeon.isChallenged(STRONGER_BOSSES)) {
|
||||
doYogLasers();
|
||||
}
|
||||
}
|
||||
|
||||
private void sacrificeSubject(){
|
||||
Buff.affect(this, SacrificeSubjectListener.class, 3f);
|
||||
new Flare(6, 32).color(0xFF22FF, false).show(sprite, 1.5f);
|
||||
yell(Messages.get(this, "sacrifice"));
|
||||
if(Dungeon.isChallenged(STRONGER_BOSSES)) {
|
||||
doYogLasers();
|
||||
}
|
||||
}
|
||||
|
||||
private void deathRattleSubject(){
|
||||
|
@ -370,6 +400,9 @@ public class DimandKing extends Boss {
|
|||
}
|
||||
new Flare(7, 32).color(0x303030, false).show(sprite, 1.5f);
|
||||
yell(Messages.get(this,"death_rattle"));
|
||||
if(Dungeon.isChallenged(STRONGER_BOSSES)) {
|
||||
doYogLasers();
|
||||
}
|
||||
}
|
||||
|
||||
private void extraSummonSubject(){
|
||||
|
@ -378,6 +411,9 @@ public class DimandKing extends Boss {
|
|||
summonSubject(3);
|
||||
summonsMade++;
|
||||
yell(Messages.get(this, "more_summon"));
|
||||
if(Dungeon.isChallenged(STRONGER_BOSSES)) {
|
||||
doYogLasers();
|
||||
}
|
||||
new Flare(4, 32).color(0x4040FF, false).show(sprite, 1.5f);
|
||||
}
|
||||
|
||||
|
@ -949,4 +985,77 @@ public class DimandKing extends Boss {
|
|||
return super.attachTo(target);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
private static final int MIN_ABILITY_CD = 7;
|
||||
private int lastHeroPos;
|
||||
private static final int MAX_ABILITY_CD = 12;
|
||||
private ArrayList<Integer> targetedCells = new ArrayList<>();
|
||||
|
||||
public void doYogLasers(){
|
||||
boolean terrainAffected = false;
|
||||
HashSet<Char> affected = new HashSet<>();
|
||||
//delay fire on a rooted hero
|
||||
if (!enemy.rooted) {
|
||||
for (int i : targetedCells) {
|
||||
Ballistica b = new Ballistica(i, lastHeroPos, Ballistica.WONT_STOP);
|
||||
//shoot beams
|
||||
sprite.parent.add(new Beam.DeathRayS(DungeonTilemap.raisedTileCenterToWorld(i),
|
||||
DungeonTilemap.raisedTileCenterToWorld(b.collisionPos)));
|
||||
for (int p : b.path) {
|
||||
Char ch = Actor.findChar(p);
|
||||
if (ch != null && (ch.alignment != alignment || ch instanceof Bee)) {
|
||||
affected.add(ch);
|
||||
}
|
||||
if (Dungeon.level.flamable[p]) {
|
||||
Dungeon.level.destroy(p);
|
||||
GameScene.updateMap(p);
|
||||
terrainAffected = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
if (terrainAffected) {
|
||||
Dungeon.observe();
|
||||
}
|
||||
for (Char ch : affected) {
|
||||
ch.damage(Random.NormalIntRange(30, 50), new Eye.DeathGaze());
|
||||
|
||||
if (Dungeon.level.heroFOV[pos]) {
|
||||
ch.sprite.flash();
|
||||
CellEmitter.center(pos).burst(Speck.factory(Speck.COIN), Random.IntRange(2, 3));
|
||||
}
|
||||
if (!ch.isAlive() && ch == Dungeon.hero) {
|
||||
Dungeon.fail(getClass());
|
||||
GLog.n(Messages.get(Char.class, "kill", name()));
|
||||
}
|
||||
}
|
||||
targetedCells.clear();
|
||||
}
|
||||
|
||||
if (abilityCooldown <= 0 && HP < HT*0.8f){
|
||||
lastHeroPos = enemy.pos;
|
||||
|
||||
int beams = (int) (4 + (HP * 1.0f / HT)*4);
|
||||
for (int i = 0; i < beams; i++){
|
||||
int randompos = Random.Int(Dungeon.level.width()) + Dungeon.level.width()*2;
|
||||
targetedCells.add(randompos);
|
||||
}
|
||||
|
||||
for (int i : targetedCells){
|
||||
Ballistica b = new Ballistica(i, Dungeon.hero.pos, Ballistica.WONT_STOP);
|
||||
|
||||
for (int p : b.path){
|
||||
Game.scene().addToFront(new TargetedCell(p, Window.TITLE_COLOR));
|
||||
}
|
||||
}
|
||||
|
||||
spend(TICK*1.5f);
|
||||
Dungeon.hero.interrupt();
|
||||
GLog.p(Messages.get(DimandKing.class, "wrning", name()));
|
||||
abilityCooldown += Random.NormalFloat(MIN_ABILITY_CD - 2*(1 - (HP * 1f / HT)), MAX_ABILITY_CD - 5*(1 - (HP * 1f / HT)));
|
||||
} else {
|
||||
spend(TICK);
|
||||
}
|
||||
if (abilityCooldown > 0) abilityCooldown--;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -26,6 +26,7 @@ import static com.shatteredpixel.shatteredpixeldungeon.Dungeon.level;
|
|||
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.Char;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.actors.blobs.Freezing;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Blindness;
|
||||
|
@ -33,6 +34,7 @@ import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Buff;
|
|||
import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Burning;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.effects.Lightning;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.effects.Splash;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.items.Gold;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.items.potions.PotionOfFrost;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.items.potions.PotionOfLiquidFlame;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.items.quest.Embers;
|
||||
|
@ -40,12 +42,14 @@ import com.shatteredpixel.shatteredpixeldungeon.items.scrolls.ScrollOfRecharging
|
|||
import com.shatteredpixel.shatteredpixeldungeon.items.scrolls.ScrollOfTransmutation;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.items.wands.CursedWand;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.items.weapon.enchantments.Shocking;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.items.weapon.melee.EndingBlade;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.mechanics.Ballistica;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.scenes.GameScene;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.sprites.CharSprite;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.sprites.ElementalSprite;
|
||||
import com.watabou.noosa.audio.Sample;
|
||||
import com.watabou.utils.Bundle;
|
||||
import com.watabou.utils.PathFinder;
|
||||
import com.watabou.utils.Random;
|
||||
|
||||
import java.util.ArrayList;
|
||||
|
@ -217,6 +221,27 @@ public abstract class Elemental extends Mob {
|
|||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void die(Object cause) {
|
||||
super.die(cause);
|
||||
//机会
|
||||
int blobs = Random.chances(new float[]{0, 1, 0, 1, 0});
|
||||
|
||||
if(!Statistics.endingbald) {
|
||||
for (int i = 0; i < blobs; i++) {
|
||||
int ofs;
|
||||
do {
|
||||
ofs = PathFinder.NEIGHBOURS8[Random.NormalIntRange(1,1)];
|
||||
} while (!Dungeon.level.passable[pos + ofs]);
|
||||
Dungeon.level.drop(new EndingBlade(), pos + ofs).sprite.drop(pos);
|
||||
Badges.ENDDIED();
|
||||
Statistics.endingbald = true;
|
||||
}
|
||||
} else {
|
||||
Dungeon.level.drop(new Gold().quantity(Random.Int(90, 120)), pos).sprite.drop();
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void rangedProc( Char enemy ) {
|
||||
if (!level.water[enemy.pos]) {
|
||||
|
@ -249,6 +274,9 @@ public abstract class Elemental extends Mob {
|
|||
public void die(Object cause) {
|
||||
super.die(cause);
|
||||
if (alignment == Alignment.ENEMY) Dungeon.level.drop( new Embers(), pos ).sprite.drop();
|
||||
|
||||
//机会
|
||||
|
||||
Badges.KILL_COLDELE();
|
||||
}
|
||||
|
||||
|
|
|
@ -22,11 +22,9 @@ import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.LifeLink;
|
|||
import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.LockedFloor;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.MagicImmune;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.ShopLimitLock;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.actors.mobs.Bee;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.actors.mobs.BlackHost;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.actors.mobs.ColdGurad;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.actors.mobs.DM100;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.actors.mobs.Eye;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.actors.mobs.Mob;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.actors.mobs.Monk;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.actors.mobs.SRPDICLRPRO;
|
||||
|
@ -43,7 +41,6 @@ import com.shatteredpixel.shatteredpixeldungeon.effects.Flare;
|
|||
import com.shatteredpixel.shatteredpixeldungeon.effects.MagicMissile;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.effects.Pushing;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.effects.Speck;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.effects.TargetedCell;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.effects.particles.ElmoParticle;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.effects.particles.EnergyParticle;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.effects.particles.PurpleParticle;
|
||||
|
@ -56,7 +53,6 @@ import com.shatteredpixel.shatteredpixeldungeon.items.scrolls.ScrollOfMagicMappi
|
|||
import com.shatteredpixel.shatteredpixeldungeon.items.scrolls.ScrollOfTeleportation;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.items.scrolls.ScrollOfUpgrade;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.levels.ShopBossLevel;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.levels.Terrain;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.mechanics.Ballistica;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.messages.Messages;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.scenes.GameScene;
|
||||
|
@ -66,7 +62,6 @@ import com.shatteredpixel.shatteredpixeldungeon.tiles.DungeonTilemap;
|
|||
import com.shatteredpixel.shatteredpixeldungeon.ui.BossHealthBar;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.utils.GLog;
|
||||
import com.watabou.noosa.Camera;
|
||||
import com.watabou.noosa.Game;
|
||||
import com.watabou.noosa.audio.Music;
|
||||
import com.watabou.noosa.audio.Sample;
|
||||
import com.watabou.noosa.particles.Emitter;
|
||||
|
@ -357,7 +352,6 @@ public class FireMagicDied extends Mob implements Callback {
|
|||
@Override
|
||||
public boolean act() {
|
||||
if (phase == 1 && HP <= 350) {
|
||||
doYogLasers();
|
||||
actScanning();
|
||||
if (Dungeon.level.water[pos] && HP < HT) {
|
||||
HP += healInc;
|
||||
|
@ -549,7 +543,7 @@ public class FireMagicDied extends Mob implements Callback {
|
|||
Sample.INSTANCE.play( Assets.Sounds.DEBUFF );
|
||||
}
|
||||
|
||||
int dmg = Random.NormalIntRange( 12, 18 );
|
||||
int dmg = Random.NormalIntRange( 2, 4 );
|
||||
|
||||
for (Mob mob : Dungeon.level.mobs.toArray( new Mob[0] )) {
|
||||
if(Random.NormalIntRange(0,9)<4) {
|
||||
|
@ -690,8 +684,6 @@ public class FireMagicDied extends Mob implements Callback {
|
|||
LockedFloor lock = Dungeon.hero.buff(LockedFloor.class);
|
||||
if (lock != null) lock.addTime(dmg*2);
|
||||
|
||||
super.damage(dmg, src);
|
||||
|
||||
if (phase == 1) {
|
||||
int dmgTaken = preHP - HP;
|
||||
abilityCooldown -= dmgTaken/8f;
|
||||
|
@ -702,7 +694,7 @@ public class FireMagicDied extends Mob implements Callback {
|
|||
}
|
||||
//properties.add(Property.IMMOVABLE);
|
||||
ScrollOfTeleportation.appear(this, ShopBossLevel.throneling);
|
||||
doYogLasers();
|
||||
//doYogLasers();
|
||||
sprite.centerEmitter().start( Speck.factory( Speck.SCREAM ), 0.4f, 2 );
|
||||
Sample.INSTANCE.play( Assets.Sounds.CHALLENGE );
|
||||
phase = 2;
|
||||
|
@ -742,7 +734,6 @@ public class FireMagicDied extends Mob implements Callback {
|
|||
sprite.showStatus(0xff0000, Messages.get(this, "dead"));
|
||||
|
||||
} else if (phase == 3 && preHP > 80 && HP <= 80){
|
||||
doYogLasers();
|
||||
yell( Messages.get(this, "losing") );
|
||||
}
|
||||
|
||||
|
@ -752,12 +743,15 @@ public class FireMagicDied extends Mob implements Callback {
|
|||
GameScene.flash(0x80FFFFFF);
|
||||
}
|
||||
}
|
||||
super.damage(dmg, src);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void die( Object cause ) {
|
||||
|
||||
super.die( cause );
|
||||
ShatteredPixelDungeon.seamlessResetScene();
|
||||
|
||||
Dungeon.level.drop(new BackGoKey().quantity(1).identify(), pos).sprite.drop();
|
||||
Dungeon.level.drop(new ScrollOfMagicMapping().quantity(1).identify(), pos).sprite.drop();
|
||||
Dungeon.level.drop(new ScrollOfUpgrade().quantity(3).identify(), pos).sprite.drop();
|
||||
|
@ -984,7 +978,7 @@ public class FireMagicDied extends Mob implements Callback {
|
|||
}
|
||||
} else {
|
||||
if (((FireMagicDied)target).phase == 2 && HP > 300){
|
||||
target.damage(10, new FireMagicDied.KingDamager());
|
||||
target.damage(30, new FireMagicDied.KingDamager());
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -1139,97 +1133,6 @@ public class FireMagicDied extends Mob implements Callback {
|
|||
}
|
||||
}
|
||||
|
||||
//Next Level 4
|
||||
public void doYogLasers(){
|
||||
boolean terrainAffected = false;
|
||||
HashSet<Char> affected = new HashSet<>();
|
||||
//delay fire on a rooted hero
|
||||
if (!enemy.rooted) {
|
||||
for (int i : targetedCells) {
|
||||
Ballistica b = new Ballistica(i, lastHeroPos, Ballistica.WONT_STOP);
|
||||
//shoot beams
|
||||
sprite.parent.add(new Beam.DeathRayS(DungeonTilemap.raisedTileCenterToWorld(i),
|
||||
DungeonTilemap.raisedTileCenterToWorld(b.collisionPos)));
|
||||
for (int p : b.path) {
|
||||
Char ch = Actor.findChar(p);
|
||||
if (ch != null && (ch.alignment != alignment || ch instanceof Bee)) {
|
||||
affected.add(ch);
|
||||
}
|
||||
if (Dungeon.level.flamable[p]) {
|
||||
Dungeon.level.destroy(p);
|
||||
GameScene.updateMap(p);
|
||||
terrainAffected = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
if (terrainAffected) {
|
||||
Dungeon.observe();
|
||||
}
|
||||
for (Char ch : affected) {
|
||||
ch.damage(Random.NormalIntRange(60, 121), new Eye.DeathGaze());
|
||||
|
||||
if (Dungeon.level.heroFOV[pos]) {
|
||||
ch.sprite.flash();
|
||||
CellEmitter.center(pos).burst(Speck.factory(Speck.COIN), Random.IntRange(2, 3));
|
||||
}
|
||||
if (!ch.isAlive() && ch == Dungeon.hero) {
|
||||
Dungeon.fail(getClass());
|
||||
GLog.n(Messages.get(Char.class, "kill", name()));
|
||||
}
|
||||
}
|
||||
targetedCells.clear();
|
||||
}
|
||||
|
||||
if (abilityCooldown <= 0 && HP < HT*0.8f){
|
||||
lastHeroPos = enemy.pos;
|
||||
|
||||
int beams = (int) (4 + (HP * 1.0f / HT)*4);
|
||||
for (int i = 0; i < beams; i++){
|
||||
int randompos = Random.Int(Dungeon.level.width()) + Dungeon.level.width()*2;
|
||||
targetedCells.add(randompos);
|
||||
}
|
||||
|
||||
for (int i : targetedCells){
|
||||
Ballistica b = new Ballistica(i, Dungeon.hero.pos, Ballistica.WONT_STOP);
|
||||
for (int p : b.path){
|
||||
Game.scene().addToFront(new TargetedCell(p, 0xFF0000));
|
||||
}
|
||||
}
|
||||
|
||||
spend(TICK*1.5f);
|
||||
Dungeon.hero.interrupt();
|
||||
|
||||
abilityCooldown += Random.NormalFloat(MIN_ABILITY_CD - 2*(1 - (HP * 1f / HT)), MAX_ABILITY_CD - 5*(1 - (HP * 1f / HT)));
|
||||
} else {
|
||||
spend(TICK);
|
||||
}
|
||||
if (abilityCooldown > 0) abilityCooldown--;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void move(int step) {
|
||||
|
||||
super.move(step);
|
||||
|
||||
Camera.main.shake( 1, 0.25f );
|
||||
if(HP < 250) {
|
||||
if (Dungeon.level.map[step] == Terrain.WATER && state == HUNTING) {
|
||||
Buff.affect(this, DwarfMaster.DKBarrior.class).setShield(50);
|
||||
|
||||
if (Dungeon.level.water[pos] && HP < HT) {
|
||||
if (Dungeon.level.heroFOV[pos]) {
|
||||
sprite.emitter().burst(Speck.factory(Speck.HEALING), 1);
|
||||
}
|
||||
if (HP * 2 == HT) {
|
||||
BossHealthBar.bleed(false);
|
||||
}
|
||||
HP++;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
//亡魂显现
|
||||
public static class ColdGuradA extends ColdGurad {
|
||||
{
|
||||
|
@ -1332,7 +1235,7 @@ public class FireMagicDied extends Mob implements Callback {
|
|||
super.detach();
|
||||
for (Mob m : Dungeon.level.mobs.toArray(new Mob[0])){
|
||||
if (m instanceof FireMagicDied ){
|
||||
m.damage(10, this);
|
||||
m.damage(30, this);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -24,7 +24,9 @@ package com.shatteredpixel.shatteredpixeldungeon.actors.mobs.npcs;
|
|||
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.Statistics;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.actors.Char;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Buff;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.actors.mobs.FetidRat;
|
||||
|
@ -327,10 +329,18 @@ public class Ghost extends NPC {
|
|||
hero.sprite.showStatus( CharSprite.NEGATIVE, "+3!!!" );
|
||||
} else if (itemLevelRoll < 0.95f){
|
||||
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);
|
||||
|
|
|
@ -35,11 +35,12 @@ import com.shatteredpixel.shatteredpixeldungeon.effects.CellEmitter;
|
|||
import com.shatteredpixel.shatteredpixeldungeon.effects.Speck;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.items.Generator;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.items.armor.Armor;
|
||||
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.artifacts.Artifact;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.items.potions.brews.BlizzardBrew;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.items.potions.brews.Brew;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.items.potions.brews.CausticBrew;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.items.potions.brews.InfernalBrew;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.items.potions.brews.ShockingBrew;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.items.rings.Ring;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.items.scrolls.exotic.ExoticScroll;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.items.scrolls.exotic.ScrollOfAffection;
|
||||
|
@ -237,7 +238,7 @@ public class RedDragon extends NPC {
|
|||
public static Ring weapon;
|
||||
public static Ring RingT;
|
||||
public static Artifact armor;
|
||||
public static Armor food;
|
||||
public static Brew food;
|
||||
public static ExoticScroll scrolls;
|
||||
|
||||
public static Weapon.Enchantment enchant;
|
||||
|
@ -308,7 +309,7 @@ public class RedDragon extends NPC {
|
|||
|
||||
weapon = (Ring)node.get( WEAPON );
|
||||
armor = (Artifact) node.get( ARMOR );
|
||||
food = (Armor) node.get( FOOD );
|
||||
food = (Brew) node.get( FOOD );
|
||||
scrolls = (ExoticScroll) node.get( SCROLLS );
|
||||
|
||||
if (node.contains(ENCHANT)) {
|
||||
|
@ -341,10 +342,10 @@ public class RedDragon extends NPC {
|
|||
//5
|
||||
switch (Random.chances(new float[]{0, 0, 10, 6, 3, 1})){
|
||||
default:
|
||||
case 2: food = new LeatherArmor(); break;
|
||||
case 3: food = new MailArmor(); break;
|
||||
case 4: food = new ScaleArmor(); break;
|
||||
case 5: food = new PlateArmor(); break;
|
||||
case 2: food = new BlizzardBrew(); break;
|
||||
case 3: food = new CausticBrew(); break;
|
||||
case 4: food = new InfernalBrew(); break;
|
||||
case 5: food = new ShockingBrew(); break;
|
||||
}
|
||||
|
||||
//TODO Fixed Ring Spawn;
|
||||
|
|
|
@ -14,7 +14,9 @@ import com.shatteredpixel.shatteredpixeldungeon.items.Heap;
|
|||
import com.shatteredpixel.shatteredpixeldungeon.items.Item;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.items.armor.Armor;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.items.artifacts.Artifact;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.items.potions.brews.Brew;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.items.rings.Ring;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.items.scrolls.exotic.ExoticScroll;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.items.wands.Wand;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.items.weapon.Weapon;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.levels.RegularLevel;
|
||||
|
@ -88,6 +90,8 @@ public class GameTracker extends Buff {
|
|||
if(m instanceof RedDragon){
|
||||
appendDesc(RedDragon.Quest.weapon, info, "QUEST_REWARD");
|
||||
appendDesc(RedDragon.Quest.armor, info, "QUEST_REWARD");
|
||||
appendDesc(RedDragon.Quest.food, info, "QUEST_REWARD");
|
||||
appendDesc(RedDragon.Quest.scrolls, info, "QUEST_REWARD");
|
||||
}
|
||||
if(m instanceof Imp){
|
||||
appendDesc(Imp.Quest.reward, info, "QUEST_REWARD");
|
||||
|
@ -101,12 +105,12 @@ public class GameTracker extends Buff {
|
|||
if(item != null) {
|
||||
if (
|
||||
((item instanceof Weapon || item instanceof Armor) && item.level() > 0)
|
||||
|| (item instanceof Ring || item instanceof Wand || item instanceof Artifact)
|
||||
|| (item instanceof Ring || item instanceof Wand || item instanceof Artifact || item instanceof ExoticScroll|| item instanceof Brew)
|
||||
) {
|
||||
String name = item.trueName();
|
||||
int index = name.indexOf('+');
|
||||
if(index > 0){
|
||||
name = name.substring(0, index - 3);
|
||||
name = name.substring(0, index - 1);
|
||||
}
|
||||
info.append(prefix).append(name).append('+').append(item.level()).append(item.cursed ? " CURSED\n" : "\n");
|
||||
}
|
||||
|
|
|
@ -365,6 +365,7 @@ public class Generator {
|
|||
WEP_T2.probs = new float[]{ 6, 5, 5, 4, 4 };
|
||||
|
||||
WEP_T3.classes = new Class<?>[]{
|
||||
Gauntlet.class,
|
||||
Sword.class,
|
||||
Mace.class,
|
||||
Scimitar.class,
|
||||
|
@ -374,9 +375,9 @@ public class Generator {
|
|||
SkyShield.class,
|
||||
Dairikyan.class,
|
||||
GreenSword.class,
|
||||
LockSword.class,
|
||||
|
||||
};
|
||||
WEP_T3.probs = new float[]{ 6, 5, 5, 4, 0, 4 ,3,8,0,7};
|
||||
WEP_T3.probs = new float[]{ 1, 5, 5, 4, 0, 4 ,3,8,0,4};
|
||||
|
||||
WEP_T4.classes = new Class<?>[]{
|
||||
Longsword.class,
|
||||
|
@ -390,12 +391,13 @@ public class Generator {
|
|||
WEP_T4.probs = new float[]{ 6, 5, 5, 4, 4, 4, 3 };
|
||||
|
||||
WEP_T5.classes = new Class<?>[]{
|
||||
LockSword.class,
|
||||
Greatsword.class,
|
||||
WarHammer.class,
|
||||
Glaive.class,
|
||||
Greataxe.class,
|
||||
Greatshield.class,
|
||||
Gauntlet.class
|
||||
Greatshield.class
|
||||
|
||||
};
|
||||
WEP_T5.probs = new float[]{ 6, 5, 5, 4, 4, 4 };
|
||||
|
||||
|
|
|
@ -8,7 +8,6 @@ import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Hunger;
|
|||
import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Invisibility;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.LockedFloor;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.actors.hero.Hero;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.actors.hero.Talent;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.actors.mobs.Mob;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.items.Item;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.items.rings.RingOfEnergy;
|
||||
|
@ -16,10 +15,8 @@ import com.shatteredpixel.shatteredpixeldungeon.levels.traps.Trap;
|
|||
import com.shatteredpixel.shatteredpixeldungeon.messages.Messages;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.scenes.GameScene;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.sprites.CharSprite;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.sprites.ItemSprite;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.sprites.ItemSpriteSheet;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.utils.GLog;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.windows.WndOptions;
|
||||
import com.watabou.noosa.audio.Sample;
|
||||
import com.watabou.noosa.particles.Emitter;
|
||||
import com.watabou.utils.Bundle;
|
||||
|
@ -37,11 +34,12 @@ public class GoldIron extends Artifact {
|
|||
charge = 5+level();
|
||||
partialCharge = 0;
|
||||
chargeCap = 5+level();
|
||||
|
||||
defaultAction = AC_ACTIVATE;
|
||||
}
|
||||
|
||||
public static final String AC_ACTIVATE = "ACTIVATE";
|
||||
public static final String AC_STONETOGOLD = "stonegold";
|
||||
public static final String AC_ONEDINGYI = "onedingyi";
|
||||
public static final String AC_CONDONTXA = "condontxa";
|
||||
|
||||
|
||||
//keeps track of generated sandbags.
|
||||
public int sandBags = 0;
|
||||
|
@ -50,7 +48,9 @@ public class GoldIron extends Artifact {
|
|||
public ArrayList<String> actions(Hero hero ) {
|
||||
ArrayList<String> actions = super.actions( hero );
|
||||
if (isEquipped( hero ) && !cursed && (charge > 0 || activeBuff != null)) {
|
||||
actions.add(AC_ACTIVATE);
|
||||
actions.add(AC_STONETOGOLD);
|
||||
actions.add(AC_ONEDINGYI);
|
||||
actions.add(AC_CONDONTXA);
|
||||
}
|
||||
return actions;
|
||||
}
|
||||
|
@ -60,46 +60,12 @@ public class GoldIron extends Artifact {
|
|||
|
||||
super.execute(hero, action);
|
||||
|
||||
if (action.equals(AC_ACTIVATE)){
|
||||
if (action.equals(AC_STONETOGOLD)){
|
||||
|
||||
if (!isEquipped( hero )) GLog.i( Messages.get(Artifact.class, "need_to_equip") );
|
||||
else if (activeBuff != null) {
|
||||
if (activeBuff instanceof GoldIron.timeStasis) { //do nothing
|
||||
} else {
|
||||
activeBuff.detach();
|
||||
GLog.i( Messages.get(this, "deactivate") );
|
||||
}
|
||||
} else if (charge <= 0) GLog.i( Messages.get(this, "no_charge") );
|
||||
else if (cursed) GLog.i( Messages.get(this, "cursed") );
|
||||
else GameScene.show(
|
||||
new WndOptions(new ItemSprite(this),
|
||||
Messages.titleCase(name()),
|
||||
Messages.get(this, "prompt"),
|
||||
Messages.get(this, "stasis"),
|
||||
Messages.get(this, "freeze")) {
|
||||
@Override
|
||||
protected void onSelect(int index) {
|
||||
if (index == 0) {
|
||||
GLog.i( Messages.get(GoldIron.class, "onstasis") );
|
||||
GameScene.flash(0x80FFFFFF);
|
||||
Sample.INSTANCE.play(Assets.Sounds.TELEPORT);
|
||||
} else if (action.equals(AC_ONEDINGYI)) {
|
||||
|
||||
activeBuff = new GoldIron.timeStasis();
|
||||
Talent.onArtifactUsed(Dungeon.hero);
|
||||
activeBuff.attachTo(Dungeon.hero);
|
||||
} else if (index == 1) {
|
||||
GLog.i( Messages.get(GoldIron.class, "onfreeze") );
|
||||
GameScene.flash(0x80FFFFFF);
|
||||
Sample.INSTANCE.play(Assets.Sounds.TELEPORT);
|
||||
} else if (action.equals(AC_CONDONTXA)) {
|
||||
|
||||
activeBuff = new GoldIron.timeFreeze();
|
||||
Talent.onArtifactUsed(Dungeon.hero);
|
||||
activeBuff.attachTo(Dungeon.hero);
|
||||
((GoldIron.timeFreeze)activeBuff).processTime(0f);
|
||||
}
|
||||
}
|
||||
}
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -3,51 +3,32 @@ package com.shatteredpixel.shatteredpixeldungeon.items.weapon.melee;
|
|||
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.buffs.AllyBuff;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Barrier;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Blindness;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Buff;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Burning;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Chill;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Corrosion;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Corruption;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Cripple;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Doom;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Drowsy;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.FlavourBuff;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Frost;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Hex;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Hunger;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Invisibility;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.MagicImmune;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.MagicalSleep;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Ooze;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Paralysis;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Poison;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.ScrollEmpower;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Slow;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.SoulMark;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Terror;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Vertigo;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Weakness;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.actors.hero.Hero;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.actors.hero.HeroSubClass;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.actors.hero.Talent;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.actors.mobs.Bee;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.actors.mobs.Mimic;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.actors.mobs.Eye;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.actors.mobs.Mob;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.actors.mobs.Piranha;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.actors.mobs.Statue;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.actors.mobs.Swarm;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.actors.mobs.Wraith;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.custom.utils.BallisticaReal;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.effects.Beam;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.actors.mobs.npcs.NPC;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.effects.CellEmitter;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.effects.MagicMissile;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.effects.particles.PurpleParticle;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.effects.Speck;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.effects.particles.ShaftParticle;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.items.artifacts.TalismanOfForesight;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.items.bombs.LaserPython;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.items.potions.PotionOfHealing;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.items.scrolls.ScrollOfRecharging;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.items.wands.Wand;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.items.wands.WandOfMagicMissile;
|
||||
|
@ -67,12 +48,9 @@ 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.Point;
|
||||
import com.watabou.utils.PointF;
|
||||
import com.watabou.utils.Random;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.HashMap;
|
||||
|
||||
public class EndingBlade extends Weapon {
|
||||
|
||||
|
@ -134,7 +112,9 @@ public class EndingBlade extends Weapon {
|
|||
//每100点浊焰能量自动升级
|
||||
@Override
|
||||
public int level() {
|
||||
return fireenergy/100;
|
||||
int level = Dungeon.hero == null ? 0 : fireenergy/100;
|
||||
if (Dungeon.hero == null) level += 1;
|
||||
return level;
|
||||
}
|
||||
private int TIME_TO_DIED = 0;
|
||||
public void execute( Hero hero, String action ) {
|
||||
|
@ -142,14 +122,14 @@ public class EndingBlade extends Weapon {
|
|||
|
||||
switch (action) {
|
||||
case AC_LASERCRYSTAL:
|
||||
if(level >= 4 && firstx){
|
||||
if(level >= 3 && firstx){
|
||||
firstx = false;
|
||||
new LaserPython().quantity(1).identify().collect();
|
||||
GLog.n("你突然感觉你的背包鼓鼓的……");
|
||||
} else if(!firstx) {
|
||||
GLog.n("你尚未使用激光晶柱,无法继续使用");
|
||||
} else {
|
||||
GLog.n("等级不足");
|
||||
GLog.n("等级不足,需求等级为3");
|
||||
}
|
||||
break;
|
||||
case AC_DIEDGHOST:
|
||||
|
@ -157,15 +137,37 @@ public class EndingBlade extends Weapon {
|
|||
curUser = hero;
|
||||
curItem = this;
|
||||
GameScene.selectCell(zapper);
|
||||
TIME_TO_DIED = 20;
|
||||
} else if (TIME_TO_DIED != 0) {
|
||||
GLog.n("道具正在冷却");
|
||||
GLog.n("技能正在冷却");
|
||||
} else {
|
||||
GLog.n("等级不足");
|
||||
GLog.n("等级不足,需求等级为5");
|
||||
}
|
||||
break;
|
||||
case AC_HEALRESET:
|
||||
GLog.w("3");
|
||||
if(level >= 7 && 0.30f >= (float)(hero.HP/hero.HT) && !Statistics.wangzheguilai) {
|
||||
//0.30f >= (float)(hero.HP/hero.HT)
|
||||
PotionOfHealing.cure( hero );
|
||||
hero.belongings.uncurseEquipped();
|
||||
hero.buff( Hunger.class ).satisfy( Hunger.STARVING );
|
||||
hero.HP = hero.HT;
|
||||
hero.sprite.emitter().start( Speck.factory( Speck.HEALING ), 0.4f, 4 );
|
||||
CellEmitter.get( hero.pos ).start( ShaftParticle.FACTORY, 0.2f, 3 );
|
||||
Dungeon.hero.interrupt();
|
||||
GLog.p( Messages.get(this, "procced") );
|
||||
Statistics.wangzheguilai = true;
|
||||
cursed = false;
|
||||
for(Mob mob : Dungeon.level.mobs.toArray(new Mob[0])){
|
||||
if (!(mob instanceof NPC) ) {
|
||||
mob.damage( Random.NormalIntRange( 30*(level/5), 50*(level/5) ), new Eye.DeathGaze() );
|
||||
}
|
||||
}
|
||||
} else if(Statistics.wangzheguilai) {
|
||||
GLog.n("你本局已经使用千里追魂,无法再次使用。");
|
||||
} else if(level < 7) {
|
||||
GLog.n("你的等级尚未达到7级以上,打败更多的怪物,鲜血会让你的武器变得更强……");
|
||||
} else if(0.30f <= (float)(hero.HP/hero.HT)) {
|
||||
GLog.n("你的血量尚未低于30%,无法使用");
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
@ -311,21 +313,7 @@ public class EndingBlade extends Weapon {
|
|||
curUser.spendAndNext( TIME_TO_ZAP );
|
||||
}
|
||||
|
||||
protected int nReflections(int level){
|
||||
//return Math.min(2+level/3, 5);
|
||||
return 5;
|
||||
}
|
||||
|
||||
protected float reflectionDamageFactor(int reflections){
|
||||
return 1f+0.1f*reflections*reflections;
|
||||
}
|
||||
|
||||
public void onZap( Ballistica beam ) {
|
||||
int count = 0;
|
||||
for(BallisticaReal b: beams){
|
||||
onZapX(b, count);
|
||||
++count;
|
||||
}
|
||||
Char ch = Actor.findChar(beam.collisionPos);
|
||||
|
||||
if (ch != null){
|
||||
|
@ -336,104 +324,13 @@ public class EndingBlade extends Weapon {
|
|||
|
||||
Mob enemy = (Mob) ch;
|
||||
|
||||
float corruptingPower = 3 + buffedLvl()/2f;
|
||||
AllyBuff.affectAndLoot(enemy, curUser, Corruption.class);
|
||||
TIME_TO_DIED = 30;
|
||||
|
||||
//base enemy resistance is usually based on their exp, but in special cases it is based on other criteria
|
||||
float enemyResist = 1 + enemy.EXP;
|
||||
if (ch instanceof Mimic || ch instanceof Statue){
|
||||
enemyResist = 1 + Dungeon.depth;
|
||||
} else if (ch instanceof Piranha || ch instanceof Bee) {
|
||||
enemyResist = 1 + Dungeon.depth/2f;
|
||||
} else if (ch instanceof Wraith) {
|
||||
//divide by 5 as wraiths are always at full HP and are therefore ~5x harder to corrupt
|
||||
enemyResist = (1f + Dungeon.depth/3f) / 5f;
|
||||
} else if (ch instanceof Swarm){
|
||||
//child swarms don't give exp, so we force this here.
|
||||
enemyResist = 1 + 3;
|
||||
}
|
||||
|
||||
//100% health: 5x resist 75%: 3.25x resist 50%: 2x resist 25%: 1.25x resist
|
||||
enemyResist *= 1 + 4*Math.pow(enemy.HP/(float)enemy.HT, 2);
|
||||
|
||||
//debuffs placed on the enemy reduce their resistance
|
||||
for (Buff buff : enemy.buffs()){
|
||||
if (MAJOR_DEBUFFS.containsKey(buff.getClass())) enemyResist *= (1f-MAJOR_DEBUFF_WEAKEN);
|
||||
else if (MINOR_DEBUFFS.containsKey(buff.getClass())) enemyResist *= (1f-MINOR_DEBUFF_WEAKEN);
|
||||
else if (buff.type == Buff.buffType.NEGATIVE) enemyResist *= (1f-MINOR_DEBUFF_WEAKEN);
|
||||
}
|
||||
|
||||
//cannot re-corrupt or doom an enemy, so give them a major debuff instead
|
||||
if(enemy.buff(Corruption.class) != null || enemy.buff(Doom.class) != null){
|
||||
corruptingPower = enemyResist - 0.001f;
|
||||
}
|
||||
|
||||
if (corruptingPower > enemyResist){
|
||||
corruptEnemy( enemy );
|
||||
} else {
|
||||
float debuffChance = corruptingPower / enemyResist;
|
||||
if (Random.Float() < debuffChance){
|
||||
debuffEnemy( enemy, MAJOR_DEBUFFS);
|
||||
} else {
|
||||
debuffEnemy( enemy, MINOR_DEBUFFS);
|
||||
}
|
||||
}
|
||||
|
||||
wandProc(ch, chargesPerCast());
|
||||
Sample.INSTANCE.play( Assets.Sounds.HIT_MAGIC, 1, 0.8f * Random.Float(0.87f, 1.15f) );
|
||||
}
|
||||
}
|
||||
|
||||
public void onZapX(BallisticaReal beam,int reflection) {
|
||||
int level = buffedLvl();
|
||||
|
||||
int maxDistance = beam.dist;
|
||||
|
||||
ArrayList<Char> chars = new ArrayList<>();
|
||||
|
||||
for (int c : beam.subPath((reflection>0?0:1), maxDistance)) {
|
||||
//prevent self_damage
|
||||
if(c==beam.sourceI && c==curUser.pos) continue;
|
||||
|
||||
Char ch;
|
||||
if ((ch = Actor.findChar( c )) != null) {
|
||||
|
||||
chars.add( ch );
|
||||
}
|
||||
|
||||
if (Dungeon.level.flamable[c]) {
|
||||
Dungeon.level.destroy( c );
|
||||
GameScene.updateMap( c );
|
||||
|
||||
}
|
||||
|
||||
CellEmitter.center( c ).burst( PurpleParticle.BURST, Random.IntRange( 1, 2 ) );
|
||||
|
||||
}
|
||||
|
||||
|
||||
Dungeon.observe();
|
||||
|
||||
boolean alive = curUser.isAlive();
|
||||
|
||||
int lvl = level;
|
||||
for (Char ch : chars) {
|
||||
wandProc(ch, chargesPerCast());
|
||||
int damage = Math.round(2*reflectionDamageFactor(reflection));
|
||||
if(!ch.equals(curUser)) {
|
||||
ch.damage(damage, this);
|
||||
}else{
|
||||
ch.damage(damage/6, this);
|
||||
}
|
||||
ch.sprite.centerEmitter().burst( PurpleParticle.BURST, Random.IntRange( 1, 2 ) );
|
||||
ch.sprite.flash();
|
||||
}
|
||||
|
||||
if (!curUser.isAlive() && alive) {
|
||||
Dungeon.fail( getClass() );
|
||||
GLog.n(Messages.get(this, "ondeath"));
|
||||
}
|
||||
}
|
||||
|
||||
protected int chargesPerCast() {
|
||||
return 2;
|
||||
}
|
||||
|
@ -457,72 +354,6 @@ public class EndingBlade extends Weapon {
|
|||
}
|
||||
}
|
||||
|
||||
private static final float MINOR_DEBUFF_WEAKEN = 1/4f;
|
||||
private static final HashMap<Class<? extends Buff>, Float> MINOR_DEBUFFS = new HashMap<>();
|
||||
static{
|
||||
MINOR_DEBUFFS.put(Weakness.class, 2f);
|
||||
MINOR_DEBUFFS.put(Corruption.class, 2f);
|
||||
MINOR_DEBUFFS.put(Cripple.class, 1f);
|
||||
MINOR_DEBUFFS.put(Blindness.class, 1f);
|
||||
MINOR_DEBUFFS.put(Terror.class, 1f);
|
||||
|
||||
MINOR_DEBUFFS.put(Chill.class, 0f);
|
||||
MINOR_DEBUFFS.put(Ooze.class, 0f);
|
||||
MINOR_DEBUFFS.put(Corruption.class, 4f);
|
||||
MINOR_DEBUFFS.put(Vertigo.class, 0f);
|
||||
MINOR_DEBUFFS.put(Drowsy.class, 0f);
|
||||
MINOR_DEBUFFS.put(Corruption.class, 10f);
|
||||
MINOR_DEBUFFS.put(Burning.class, 0f);
|
||||
MINOR_DEBUFFS.put(Poison.class, 0f);
|
||||
}
|
||||
|
||||
private static final float MAJOR_DEBUFF_WEAKEN = 1/2f;
|
||||
private static final HashMap<Class<? extends Buff>, Float> MAJOR_DEBUFFS = new HashMap<>();
|
||||
static{
|
||||
MAJOR_DEBUFFS.put(Corruption.class, 3f);
|
||||
MAJOR_DEBUFFS.put(Slow.class, 2f);
|
||||
MAJOR_DEBUFFS.put(Hex.class, 2f);
|
||||
MAJOR_DEBUFFS.put(Paralysis.class, 1f);
|
||||
|
||||
MAJOR_DEBUFFS.put(Corruption.class, 0f);
|
||||
MAJOR_DEBUFFS.put(Corruption.class, 0f);
|
||||
MAJOR_DEBUFFS.put(MagicalSleep.class, 0f);
|
||||
MAJOR_DEBUFFS.put(SoulMark.class, 0f);
|
||||
MAJOR_DEBUFFS.put(Corrosion.class, 0f);
|
||||
MAJOR_DEBUFFS.put(Frost.class, 0f);
|
||||
MAJOR_DEBUFFS.put(Doom.class, 0f);
|
||||
}
|
||||
|
||||
|
||||
|
||||
private void debuffEnemy( Mob enemy, HashMap<Class<? extends Buff>, Float> category ){
|
||||
|
||||
//do not consider buffs which are already assigned, or that the enemy is immune to.
|
||||
HashMap<Class<? extends Buff>, Float> debuffs = new HashMap<>(category);
|
||||
for (Buff existing : enemy.buffs()){
|
||||
if (debuffs.containsKey(existing.getClass())) {
|
||||
debuffs.put(existing.getClass(), 0f);
|
||||
}
|
||||
}
|
||||
for (Class<?extends Buff> toAssign : debuffs.keySet()){
|
||||
if (debuffs.get(toAssign) > 0 && enemy.isImmune(toAssign)){
|
||||
debuffs.put(toAssign, 0f);
|
||||
}
|
||||
}
|
||||
|
||||
//all buffs with a > 0 chance are flavor buffs
|
||||
Class<?extends FlavourBuff> debuffCls = (Class<? extends FlavourBuff>) Random.chances(debuffs);
|
||||
|
||||
if (debuffCls != null){
|
||||
Buff.append(enemy, debuffCls, 6 + buffedLvl()*3);
|
||||
} else {
|
||||
//if no debuff can be applied (all are present), then go up one tier
|
||||
if (category == MINOR_DEBUFFS) debuffEnemy( enemy, MAJOR_DEBUFFS);
|
||||
else if (category == MAJOR_DEBUFFS) corruptEnemy( enemy );
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
private void corruptEnemy( Mob enemy ){
|
||||
//cannot re-corrupt or doom an enemy, so give them a major debuff instead
|
||||
if(enemy.buff(Corruption.class) != null || enemy.buff(Doom.class) != null){
|
||||
|
@ -539,9 +370,6 @@ public class EndingBlade extends Weapon {
|
|||
}
|
||||
}
|
||||
|
||||
protected static ArrayList<PointF> fxS = new ArrayList<>();
|
||||
protected static ArrayList<PointF> fxE = new ArrayList<>();
|
||||
|
||||
public void fxs(Ballistica beam, Callback callback) {
|
||||
MagicMissile.boltFromChar( curUser.sprite.parent,
|
||||
MagicMissile.SHADOW,
|
||||
|
@ -549,129 +377,9 @@ public class EndingBlade extends Weapon {
|
|||
beam.collisionPos,
|
||||
callback);
|
||||
Sample.INSTANCE.play( Assets.Sounds.ZAP );
|
||||
buildBeams(beam);
|
||||
int size = fxE.size();
|
||||
for(int i=0;i<size;++i){
|
||||
//Point p = Dungeon.level.cellToPoint(fxE.get(i));
|
||||
//GLog.i("(%d, %d)", p.x, p.y);
|
||||
curUser.sprite.parent.add(new Beam.DeathRayS(BallisticaReal.raisedPointToScreen(fxS.get(i)),
|
||||
BallisticaReal.raisedPointToScreen(fxE.get(i)) ));
|
||||
}
|
||||
//buildBeams(beam);
|
||||
callback.call();
|
||||
}
|
||||
protected static ArrayList<BallisticaReal> beams = new ArrayList<>();
|
||||
protected static ArrayList<Float> offset_1 = new ArrayList<>();
|
||||
protected void buildOffsetArray(int level){
|
||||
offset_1.clear();
|
||||
float offPerStep = 45f* (1.9f+level) / (1.9f+level*3f);
|
||||
int maxDSB;
|
||||
if(level>7){maxDSB = 0;}
|
||||
else if(level>3){maxDSB = 0;}
|
||||
else{maxDSB = 0;}
|
||||
//offset_1.add(0f);
|
||||
if(maxDSB>0) {
|
||||
for (int i = -maxDSB; i < maxDSB + 1; ++i) {
|
||||
offset_1.add(i * offPerStep / maxDSB);
|
||||
}
|
||||
}else{
|
||||
offset_1.add(0f);
|
||||
}
|
||||
|
||||
// if(level<9) return base_3;
|
||||
//else return base_4;
|
||||
}
|
||||
|
||||
protected PointF pointToF(Point p){
|
||||
return new PointF(p.x, p.y);
|
||||
}
|
||||
|
||||
protected void addBeam(BallisticaReal beam){
|
||||
beams.add(beam);
|
||||
fxS.add(beam.sourceF);
|
||||
fxE.add(beam.collisionF);
|
||||
}
|
||||
|
||||
protected void buildBeams(Ballistica beam){
|
||||
fxS.clear();
|
||||
fxE.clear();
|
||||
beams.clear();
|
||||
buildOffsetArray(this.level());
|
||||
//addBeam(new Ballistica(beam.sourcePos, beam.collisionPos, Ballistica.STOP_SOLID | Ballistica.IGNORE_SOFT_SOLID));
|
||||
float angle = PointF.angle(new PointF(pointToF(Dungeon.level.cellToPoint(beam.sourcePos))),
|
||||
new PointF(pointToF(Dungeon.level.cellToPoint(beam.collisionPos))));
|
||||
angle /= PointF.G2R;
|
||||
if(angle<0f) angle += 360f;
|
||||
//GLog.i("%f,", angle);
|
||||
int scatter = offset_1.size();
|
||||
for(int i=0;i<scatter;++i){
|
||||
addBeam(new BallisticaReal(beam.sourcePos, angle + offset_1.get(i), 20, BallisticaReal.STOP_SOLID | BallisticaReal.IGNORE_SOFT_SOLID));
|
||||
}
|
||||
int maxRf = nReflections(this.level());
|
||||
for(int ref = 0; ref < maxRf; ++ref) {
|
||||
for (int i = 0; i < scatter; ++i) {
|
||||
BallisticaReal br = new BallisticaReal(fxE.get(i+ref*scatter), reflectAngle(fxS.get(i+ref*scatter), fxE.get(i+ref*scatter)), 20, BallisticaReal.STOP_SOLID | BallisticaReal.IGNORE_SOFT_SOLID);
|
||||
addBeam(br);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
protected float horizontalReflectAngle(float angle){
|
||||
angle = angle%360f;
|
||||
return 360f-angle;
|
||||
}
|
||||
|
||||
protected float verticalReflectAngle(float angle){
|
||||
angle = angle%360f;
|
||||
if(angle<180f) angle=180f-angle;
|
||||
else angle = 540f-angle;
|
||||
return angle;
|
||||
}
|
||||
|
||||
protected float reflectAngle(PointF s, PointF e){
|
||||
//PointF realPoint = nextPF(s,e);
|
||||
float angle = PointF.angle(s,e)/PointF.G2R;
|
||||
if(angle<0f) angle+= 360f;
|
||||
float dx = e.x - s.x;
|
||||
float dy = e.y - s.y;
|
||||
boolean up = dy>0;
|
||||
boolean right = dx>0;
|
||||
boolean horizontalWall = false;
|
||||
boolean verticalWall = false;
|
||||
|
||||
int xTile=(int)e.x;
|
||||
if(e.x-(int)e.x<1e-5 && right){
|
||||
xTile-=1;
|
||||
}
|
||||
int yTile=(int)e.y;
|
||||
if(e.y-(int)e.y<1e-5 && up){
|
||||
yTile-=1;
|
||||
}
|
||||
final int[] neigh = new int[]{-1, 1, -Dungeon.level.width(), Dungeon.level.width()};
|
||||
boolean[] isWall = new boolean[4];
|
||||
for(int i=0; i<4; ++i){
|
||||
isWall[i]=Dungeon.level.solid[xTile+yTile*Dungeon.level.width()+neigh[i]];
|
||||
}
|
||||
if(e.x-(int)e.x<1e-5){
|
||||
verticalWall = (right && isWall[1]) || (!right && isWall[0]);
|
||||
}
|
||||
if(e.y-(int)e.y<1e-5){
|
||||
horizontalWall = (up && isWall[3]) || (!up && isWall[2]);
|
||||
}
|
||||
|
||||
if(horizontalWall != verticalWall){
|
||||
if(horizontalWall) return horizontalReflectAngle(angle);
|
||||
else return verticalReflectAngle(angle);
|
||||
}else if(horizontalWall && verticalWall){
|
||||
if(Math.abs(dx)<Math.abs(dy)){
|
||||
return horizontalReflectAngle(angle);
|
||||
}else{
|
||||
return verticalReflectAngle(angle);
|
||||
}
|
||||
}else{
|
||||
return angle;
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public int STRReq(int C) {
|
||||
|
@ -687,7 +395,8 @@ public class EndingBlade extends Weapon {
|
|||
if(TIME_TO_DIED != 0){
|
||||
TIME_TO_DIED--;
|
||||
}
|
||||
|
||||
//fixme
|
||||
//todo
|
||||
if(level >= 10){
|
||||
fireenergy += 0;
|
||||
//武器最高级
|
||||
|
|
|
@ -21,8 +21,6 @@
|
|||
|
||||
package com.shatteredpixel.shatteredpixeldungeon.items.weapon.melee;
|
||||
|
||||
import static com.shatteredpixel.shatteredpixeldungeon.Dungeon.hero;
|
||||
|
||||
import com.shatteredpixel.shatteredpixeldungeon.Assets;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.actors.Char;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Buff;
|
||||
|
@ -40,7 +38,7 @@ public class Gauntlet extends MeleeWeapon {
|
|||
hitSound = Assets.Sounds.HIT_CRUSH;
|
||||
hitSoundPitch = 1.2f;
|
||||
|
||||
tier = 5;
|
||||
tier = 3;
|
||||
DLY = 0.25f; //2x speed
|
||||
}
|
||||
|
||||
|
@ -64,7 +62,7 @@ public class Gauntlet extends MeleeWeapon {
|
|||
return max(buffedLvl());
|
||||
case 1:
|
||||
Buff.affect(defender, Burning.class).reignite(defender);
|
||||
Buff.affect(hero, Cripple.class, Degrade.ADURATION);
|
||||
Buff.affect(attacker, Cripple.class, Degrade.ADURATION);
|
||||
return super.proc(attacker, defender, damage);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -5,31 +5,35 @@
|
|||
|
||||
package com.shatteredpixel.shatteredpixeldungeon.items.weapon.melee;
|
||||
|
||||
import static com.shatteredpixel.shatteredpixeldungeon.Dungeon.hero;
|
||||
|
||||
import com.shatteredpixel.shatteredpixeldungeon.Dungeon;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.actors.Char;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Buff;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.RandomBuff;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.items.weapon.enchantments.Blazing;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.items.weapon.enchantments.Kinetic;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.items.weapon.enchantments.Shocking;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.items.weapon.enchantments.Unstable;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.messages.Messages;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.sprites.ItemSpriteSheet;
|
||||
import com.watabou.utils.Bundle;
|
||||
|
||||
public class LockSword extends MeleeWeapon {
|
||||
public int lvl;
|
||||
public int lvl = 0;
|
||||
|
||||
public LockSword() {
|
||||
super.image = ItemSpriteSheet.DG3;
|
||||
super.tier = 3;
|
||||
if (this.lvl >= 150) {
|
||||
super.image = ItemSpriteSheet.DG4;
|
||||
}
|
||||
super.tier = 5;
|
||||
}
|
||||
|
||||
if (this.lvl >= 450) {
|
||||
super.image = ItemSpriteSheet.DG5;
|
||||
}
|
||||
@Override
|
||||
public int min(int lvl) {
|
||||
|
||||
return Math.round(1.0f*(tier+1)) + //15 base, down from 30
|
||||
lvl*Math.round(0.5f*(tier+1)); //+3 per level, down from +6
|
||||
}
|
||||
|
||||
@Override
|
||||
public int max(int lvl) {
|
||||
|
||||
return Math.round(1.5f*(tier+1)) + //15 base, down from 30
|
||||
lvl*Math.round(0.5f*(tier+1)); //+3 per level, down from +6
|
||||
}
|
||||
|
||||
public String desc() {
|
||||
|
@ -37,44 +41,57 @@ public class LockSword extends MeleeWeapon {
|
|||
}
|
||||
|
||||
public int image() {
|
||||
if (this.level() == 3 && Dungeon.hero.buff(RandomBuff.class) != null){
|
||||
//GLog.n("谢谢你为我升级……");
|
||||
for (Buff buff : hero.buffs()) {
|
||||
if (buff instanceof RandomBuff) {
|
||||
buff.detach();
|
||||
}
|
||||
}
|
||||
return image;
|
||||
if (lvl == 150) {
|
||||
super.image = ItemSpriteSheet.DG4;
|
||||
} else if (lvl >= 350) {
|
||||
super.image = ItemSpriteSheet.DG5;
|
||||
}
|
||||
return image;
|
||||
}
|
||||
|
||||
public int proc(Char var1, Char var2, int var3) {
|
||||
++this.lvl;
|
||||
int var4 = var3;
|
||||
if (this.lvl >= 150) {
|
||||
var4 = (new Unstable()).proc(this, var1, var2, var3) + 3;
|
||||
super.image = ItemSpriteSheet.DG4;
|
||||
public int proc(Char attacker, Char defender, int damage ) {
|
||||
++lvl;
|
||||
int dmg;
|
||||
|
||||
if(level >= 10){
|
||||
lvl += 0;
|
||||
} else if(defender.properties().contains(Char.Property.BOSS) && defender.HP <= damage){
|
||||
//目标Boss血量小于实际伤害判定为死亡,+20
|
||||
lvl+=20;
|
||||
} else if(defender.properties().contains(Char.Property.MINIBOSS) && defender.HP <= damage){
|
||||
//目标迷你Boss血量小于实际伤害判定为死亡,+10
|
||||
lvl+=10;
|
||||
} else if (defender.HP <= damage){
|
||||
//目标血量小于实际伤害判定为死亡,+5
|
||||
lvl+=5;
|
||||
}
|
||||
|
||||
var3 = var4;
|
||||
if (this.lvl >= 450) {
|
||||
var3 = (new Unstable()).proc(this, var1, var2, var4);
|
||||
var3 = (new Unstable()).proc(this, var1, var2, var3) + 7;
|
||||
super.image = ItemSpriteSheet.DG5;
|
||||
if (level>= 8) {
|
||||
dmg = (new Unstable()).proc(this, attacker, defender, damage) + 4;
|
||||
damage = dmg;
|
||||
} else if (level>= 6){
|
||||
dmg = (new Shocking()).proc(this, attacker, defender, damage) + 3;
|
||||
damage = dmg;
|
||||
} else if (level>= 4){
|
||||
dmg = (new Blazing()).proc(this, attacker, defender, damage) + 2;
|
||||
damage = dmg;
|
||||
} else if (level>= 2){
|
||||
dmg = (new Kinetic()).proc(this, attacker, defender, damage) + 1;
|
||||
damage = dmg;
|
||||
}
|
||||
|
||||
return super.proc(var1, var2, var3);
|
||||
return super.proc(attacker, defender, damage);
|
||||
|
||||
|
||||
}
|
||||
|
||||
public void restoreFromBundle(Bundle var1) {
|
||||
super.restoreFromBundle(var1);
|
||||
super.image = ItemSpriteSheet.DG3;
|
||||
if (this.lvl >= 150) {
|
||||
super.image = ItemSpriteSheet.DG4;
|
||||
}
|
||||
|
||||
if (this.lvl >= 450) {
|
||||
if (lvl == 150) {
|
||||
super.image = ItemSpriteSheet.DG4;
|
||||
} else if (lvl >= 350) {
|
||||
super.image = ItemSpriteSheet.DG5;
|
||||
}
|
||||
|
||||
|
@ -84,11 +101,10 @@ public class LockSword extends MeleeWeapon {
|
|||
public void storeInBundle(Bundle var1) {
|
||||
super.storeInBundle(var1);
|
||||
super.image = ItemSpriteSheet.DG3;
|
||||
if (this.lvl >= 150) {
|
||||
super.image = ItemSpriteSheet.DG4;
|
||||
}
|
||||
|
||||
if (this.lvl >= 450) {
|
||||
if (lvl == 150) {
|
||||
super.image = ItemSpriteSheet.DG4;
|
||||
} else if (lvl >= 350) {
|
||||
super.image = ItemSpriteSheet.DG5;
|
||||
}
|
||||
|
||||
|
|
|
@ -21,6 +21,8 @@
|
|||
|
||||
package com.shatteredpixel.shatteredpixeldungeon.levels;
|
||||
|
||||
import static com.shatteredpixel.shatteredpixeldungeon.Challenges.PRO;
|
||||
|
||||
import com.shatteredpixel.shatteredpixeldungeon.Assets;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.Dungeon;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.Statistics;
|
||||
|
@ -28,6 +30,7 @@ import com.shatteredpixel.shatteredpixeldungeon.actors.Actor;
|
|||
import com.shatteredpixel.shatteredpixeldungeon.actors.Char;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.actors.mobs.Mob;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.items.Amulet;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.items.JAmulet;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.levels.painters.Painter;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.messages.Messages;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.tiles.CustomTilemap;
|
||||
|
@ -154,7 +157,11 @@ public class LastLevel extends Level {
|
|||
|
||||
@Override
|
||||
protected void createItems() {
|
||||
drop( new Amulet(), exit );
|
||||
if(Dungeon.isChallenged(PRO)) {
|
||||
drop(new JAmulet(), exit);
|
||||
} else {
|
||||
drop(new Amulet(), exit);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
|
@ -182,7 +182,7 @@ public class InterlevelScene extends PixelScene {
|
|||
fadeTime += 0.9f; //adds 1 second total
|
||||
//speed up transition when debugging
|
||||
} else if (DeviceCompat.isDebug()){
|
||||
fadeTime = 0.1f;
|
||||
fadeTime = 0.8f;
|
||||
}
|
||||
|
||||
SkinnedBlock bg = new SkinnedBlock(Camera.main.width, Camera.main.height, loadingAsset ){
|
||||
|
|
|
@ -7,9 +7,11 @@ import com.shatteredpixel.shatteredpixeldungeon.sprites.BlueBatSprite;
|
|||
import com.shatteredpixel.shatteredpixeldungeon.sprites.ColdGuardSprite;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.sprites.DiedMonkLoaderSprite;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.sprites.FlameBoiSprite;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.sprites.GhostSprite;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.sprites.ItemSprite;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.sprites.ItemSpriteSheet;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.sprites.KagenoNusujinSprite;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.sprites.MimicSprite;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.sprites.SRPDHBLRTT;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.sprites.ShopkKingSprite;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.sprites.WFSprite;
|
||||
|
@ -24,6 +26,8 @@ import java.util.ArrayList;
|
|||
public class vM0_6_7_X_Changes {
|
||||
|
||||
public static void addAllChanges(ArrayList<ChangeInfo> changeInfos) {
|
||||
add_v0_6_10_Changes(changeInfos);
|
||||
add_v0_6_9_Changes(changeInfos);
|
||||
add_v0_6_8_Changes(changeInfos);
|
||||
add_v0_6_7_Changes(changeInfos);
|
||||
add_v0_6_6_Changes(changeInfos);
|
||||
|
@ -35,6 +39,64 @@ public class vM0_6_7_X_Changes {
|
|||
add_v0_6_0_Changes(changeInfos);
|
||||
}
|
||||
|
||||
public static void add_v0_6_10_Changes( ArrayList<ChangeInfo> changeInfos ) {
|
||||
ChangeInfo changes = new ChangeInfo("v0.6.0.0-Beta21-p1.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.ENDDIED), ("彩蛋武器:终焉"),
|
||||
("正式实装,击败火元素概率掉落")));
|
||||
|
||||
changes = new ChangeInfo("改动", false, null);
|
||||
changes.hardlight(Window.CYELLOW);
|
||||
changeInfos.add(changes);
|
||||
|
||||
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_06X30")));
|
||||
|
||||
}
|
||||
|
||||
public static void add_v0_6_9_Changes( ArrayList<ChangeInfo> changeInfos ) {
|
||||
ChangeInfo changes = new ChangeInfo("v0.6.0.0-Beta21-p1", 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.ENDDIED), ("彩蛋武器:终焉"),
|
||||
("在命运的尽头,亦或者是命运的起点")));
|
||||
|
||||
changes.addButton(new ChangeButton(new ItemSprite(ItemSpriteSheet.GAUNTLETS), ("碧灰双刃"),
|
||||
("武器降级到3阶")));
|
||||
|
||||
changes.addButton(new ChangeButton(new ItemSprite(ItemSpriteSheet.DG3), ("钥匙剑"),
|
||||
("武器提格到5阶,进行了一定的重做")));
|
||||
|
||||
changes = new ChangeInfo("改动", false, null);
|
||||
changes.hardlight(Window.CYELLOW);
|
||||
changeInfos.add(changes);
|
||||
|
||||
changes.addButton(new ChangeButton(new MimicSprite.Dimand(), ("钻石宝箱王"),
|
||||
("在梦魇Boss中出现新的技能")));
|
||||
|
||||
changes.addButton(new ChangeButton(new GhostSprite(), ("幽灵奖励改变"),
|
||||
("幽灵现在更能出现+3,以及+4,+5品种的武器或护甲")));
|
||||
|
||||
changes.addButton(new ChangeButton(Icons.get(Icons.CHANGES), ("药水癔症"),
|
||||
("暂时为以前的样子,后续会改善")));
|
||||
|
||||
changes.addButton(new ChangeButton(Icons.get(Icons.INFO), ("杂项改动"),
|
||||
("1.部分物品的显示逻辑更新\n2.用户ID系统\n3.调整红龙之王的奖励\n4.修复了一系列的Bug")));
|
||||
|
||||
|
||||
}
|
||||
|
||||
public static void add_v0_6_8_Changes( ArrayList<ChangeInfo> changeInfos ) {
|
||||
ChangeInfo changes = new ChangeInfo("v0.6.0.0-Beta20.80", true, "");
|
||||
changes.hardlight(Window.TITLE_COLOR);
|
||||
|
@ -50,12 +112,6 @@ public class vM0_6_7_X_Changes {
|
|||
changes.addButton(new ChangeButton(new ShopkKingSprite(), ("商人领主商店终端"),
|
||||
("交易使人快乐")));
|
||||
|
||||
changes = new ChangeInfo("改动", false, null);
|
||||
changes.hardlight(Window.GREEN_COLOR);
|
||||
changeInfos.add(changes);
|
||||
|
||||
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_06X29")));
|
||||
}
|
||||
|
||||
public static void add_v0_6_7_Changes( ArrayList<ChangeInfo> changeInfos ) {
|
||||
|
|
|
@ -26,6 +26,17 @@ import com.watabou.utils.Random;
|
|||
//This class defines the parameters for seeds in ShatteredPD and contains a few convenience methods
|
||||
public class DungeonSeed {
|
||||
|
||||
//USER NAME QQ
|
||||
public static String formatText( String inputText ){
|
||||
try {
|
||||
//if the seed matches a code, then just convert it to using the code system
|
||||
return convertToCode(convertFromCode(inputText));
|
||||
} catch (IllegalArgumentException e){
|
||||
//otherwise just return the input text
|
||||
return inputText;
|
||||
}
|
||||
}
|
||||
|
||||
private static long TOTAL_SEEDS = 5429503678976L; //26^9 possible seeds
|
||||
|
||||
public static long randomSeed(){
|
||||
|
|
|
@ -21,6 +21,8 @@
|
|||
|
||||
package com.shatteredpixel.shatteredpixeldungeon.windows;
|
||||
|
||||
import static com.watabou.utils.DeviceCompat.isAndroid;
|
||||
|
||||
import com.shatteredpixel.shatteredpixeldungeon.Assets;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.Chrome;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.SPDSettings;
|
||||
|
@ -270,7 +272,7 @@ public class WndSettings extends WndTabbed {
|
|||
add(optScale);
|
||||
}
|
||||
|
||||
if (DeviceCompat.isAndroid() && PixelScene.maxScreenZoom >= 2) {
|
||||
if (isAndroid() && PixelScene.maxScreenZoom >= 2) {
|
||||
chkSaver = new CheckBox(Messages.get(this, "saver")) {
|
||||
@Override
|
||||
protected void onClick() {
|
||||
|
@ -299,7 +301,7 @@ public class WndSettings extends WndTabbed {
|
|||
add( chkSaver );
|
||||
}
|
||||
|
||||
if (DeviceCompat.isAndroid()) {
|
||||
if (isAndroid()) {
|
||||
Boolean landscape = SPDSettings.landscape();
|
||||
if (landscape == null){
|
||||
landscape = Game.width > Game.height;
|
||||
|
@ -685,6 +687,8 @@ public class WndSettings extends WndTabbed {
|
|||
ColorBlock sep1;
|
||||
CheckBox LockFing;
|
||||
|
||||
RedButton ResetButton;
|
||||
|
||||
@Override
|
||||
protected void createChildren() {
|
||||
title = PixelScene.renderTextBlock(Messages.get(this, "title"), 9);
|
||||
|
@ -703,6 +707,17 @@ public class WndSettings extends WndTabbed {
|
|||
};
|
||||
LockFing.checked(SPDSettings.HelpSettings());
|
||||
add(LockFing);
|
||||
|
||||
ResetButton = new RedButton(Messages.get(this, "reset")) {
|
||||
@Override
|
||||
protected void onClick() {
|
||||
WndStartGame.showKeyInput();
|
||||
}
|
||||
};
|
||||
if(isAndroid()) {
|
||||
add(ResetButton);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -718,8 +733,10 @@ public class WndSettings extends WndTabbed {
|
|||
|
||||
if (width > 200){
|
||||
LockFing.setRect(0, bottom, width, SLIDER_HEIGHT);
|
||||
ResetButton.setRect(0, LockFing.bottom() + GAP, width, SLIDER_HEIGHT);
|
||||
} else {
|
||||
LockFing.setRect(0, bottom + GAP, width, SLIDER_HEIGHT);
|
||||
ResetButton.setRect(0, LockFing.bottom() + GAP, width, SLIDER_HEIGHT);
|
||||
}
|
||||
|
||||
height = LockFing.bottom();
|
||||
|
|
|
@ -21,7 +21,10 @@
|
|||
|
||||
package com.shatteredpixel.shatteredpixeldungeon.windows;
|
||||
|
||||
import static com.shatteredpixel.shatteredpixeldungeon.SPDSettings.KEY_CUSTOM_LING;
|
||||
import static com.shatteredpixel.shatteredpixeldungeon.SPDSettings.KEY_CUSTOM_SEED;
|
||||
import static com.shatteredpixel.shatteredpixeldungeon.ui.Icons.RENAME_OFF;
|
||||
import static com.watabou.utils.DeviceCompat.isAndroid;
|
||||
|
||||
import com.shatteredpixel.shatteredpixeldungeon.Assets;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.Badges;
|
||||
|
@ -46,6 +49,8 @@ import com.shatteredpixel.shatteredpixeldungeon.ui.RedButton;
|
|||
import com.shatteredpixel.shatteredpixeldungeon.ui.RenderedTextBlock;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.ui.StyledButton;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.ui.Window;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.utils.DungeonSeed;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.utils.GLog;
|
||||
import com.watabou.noosa.ColorBlock;
|
||||
import com.watabou.noosa.Game;
|
||||
import com.watabou.noosa.Image;
|
||||
|
@ -57,6 +62,23 @@ import java.util.ArrayList;
|
|||
|
||||
public class WndStartGame extends Window {
|
||||
|
||||
public static void showKeyInput(){
|
||||
Game.runOnRenderThread(() -> ShatteredPixelDungeon.scene().add(new WndTextInput(Messages.get(WndTextInput.class,"enter_key"), Messages.get(WndGame.class,
|
||||
"dialog_user"), SPDSettings.customSeed(), 10, false, Messages.get(WndTextInput.class,"yes"),
|
||||
Messages.get(WndTextInput.class,"no")){
|
||||
@Override
|
||||
public void onSelect(boolean positive, String text) {
|
||||
text = DungeonSeed.formatText(text);
|
||||
if(positive) {
|
||||
SPDSettings.customSeed(text);
|
||||
//抛出一个问题,保证初始化成功
|
||||
throw new RuntimeException("成功,信息已录入");
|
||||
}
|
||||
}
|
||||
}));
|
||||
}
|
||||
|
||||
|
||||
private static final int WIDTH = 120;
|
||||
private static final int HEIGHT = 160;
|
||||
|
||||
|
@ -252,11 +274,15 @@ public class WndStartGame extends Window {
|
|||
ActionIndicator.action = null;
|
||||
InterlevelScene.mode = InterlevelScene.Mode.DESCEND;
|
||||
|
||||
if (SPDSettings.intro()) {
|
||||
//匹配两个值以及为安卓才显示
|
||||
if(SPDSettings.customSeed().equals(KEY_CUSTOM_LING) && SPDSettings.customSeed().equals(KEY_CUSTOM_SEED) && isAndroid()){
|
||||
WndStartGame.showKeyInput();
|
||||
} else if (SPDSettings.intro()) {
|
||||
SPDSettings.intro( false );
|
||||
Game.switchScene( IntroScene.class );
|
||||
} else {
|
||||
Game.switchScene( InterlevelScene.class );
|
||||
GLog.n(SPDSettings.customSeed());
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -144,7 +144,8 @@ public class WndTextInput extends Window {
|
|||
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@Override
|
||||
public void offset(int xOffset, int yOffset) {
|
||||
super.offset(xOffset, yOffset);
|
||||
if (textBox != null){
|
||||
|
|
Loading…
Reference in New Issue
Block a user