Update 0.6.5.0-Alpha5.2
This commit is contained in:
parent
db3326416d
commit
6611615a13
|
@ -18,8 +18,8 @@ allprojects {
|
|||
appName = 'Magic Ling Pixel Dungeon'
|
||||
appPackageName = 'com.ansdomagiclingpixeldungeon.ling'
|
||||
|
||||
appVersionCode =907700
|
||||
appVersionName = '0.6.5.0-Alpha5.1'
|
||||
appVersionCode =907750
|
||||
appVersionName = '0.6.5.0-Alpha5.2'
|
||||
|
||||
appJavaCompatibility = JavaVersion.VERSION_11
|
||||
|
||||
|
|
Binary file not shown.
Before Width: | Height: | Size: 22 KiB After Width: | Height: | Size: 21 KiB |
Binary file not shown.
Before Width: | Height: | Size: 18 KiB After Width: | Height: | Size: 19 KiB |
Binary file not shown.
Before Width: | Height: | Size: 2.9 KiB After Width: | Height: | Size: 2.9 KiB |
|
@ -415,8 +415,8 @@ custom.testmode.mobplacer.elite_name9=失败体
|
|||
custom.testmode.mobplacer.elite_name10=爆炸体
|
||||
custom.testmode.mobplacer.elite_name11=完全体
|
||||
custom.testmode.mobplacer.elite_name12=危险体
|
||||
custom.testmode.mobplacer.elite_name13=烟雾体
|
||||
custom.testmode.mobplacer.elite_name14=酸液体
|
||||
custom.testmode.mobplacer.elite_name13=酸液体
|
||||
custom.testmode.mobplacer.elite_name14=烟雾体
|
||||
|
||||
custom.testmode.mobplacer.elite_name15=[友好[
|
||||
|
||||
|
|
|
@ -444,7 +444,7 @@ items.bags.kingbag.desc=矮人国王的€定制背包€,好东西,就要
|
|||
|
||||
|
||||
items.weapon.melee.runicblade.name=贤者之剑
|
||||
items.weapon.melee.runicblade.stats_desc=这把武器可以在战斗中获得更多的伤害!
|
||||
items.weapon.melee.runicblade.stats_desc=这把武器可以在升级中获得更多的伤害!
|
||||
items.weapon.melee.runicblade.cooldown=贤者之剑正在重新聚集魔力。在充能过程中其近战伤害将提高。\n贤者之剑将在%s回合后充能完毕。
|
||||
items.weapon.melee.runicblade.ac_zap=释放
|
||||
items.weapon.melee.runicblade.fizzles=你的贤者之剑滋滋作响;一定是没有足够的能量。
|
||||
|
@ -678,6 +678,7 @@ items.artifacts.cloakofshadows.ac_bloodbat=召唤伙伴
|
|||
|
||||
items.artifacts.driedrose.name=干枯玫瑰
|
||||
items.artifacts.driedrose.ac_summon=召唤
|
||||
items.artifacts.driedrose.sorry=冒险者,我要去陪我的爱人了……
|
||||
items.artifacts.driedrose.ac_direct=指引
|
||||
items.artifacts.driedrose.ac_outfit=装备
|
||||
items.artifacts.driedrose.spawned=你已经召唤出幽灵了。
|
||||
|
|
|
@ -305,7 +305,7 @@ paswordbadges$badge.night_cat.desc=在现实时间的夜间单局游玩超过600
|
|||
challenges.no_food=缩餐节食
|
||||
challenges.no_food_desc=食物本就稀缺,但你还需要注意节食!\n\n・使用各类食物与丰饶之角的饱腹效果为原本的三分之一。\n・其他恢复饥饿的机制不受影响。
|
||||
challenges.no_armor=无甲之身
|
||||
challenges.no_armor_desc=要相信自己,因为不能相信护甲了!\n\n・布甲之外所有常规护甲被禁止生成。\n・布甲被升级时增长的防御力大幅降低。\n・灵壤守护者的防御力大幅降低。\n\n_地牢环境已发生改变,请小心应对。(种子物品有生成变动)_
|
||||
challenges.no_armor_desc=要相信自己,因为不能相信护甲了!\n\n・布甲之外所有常规护甲被禁止生成。\n・布甲被升级时增长的防御力大幅降低。\n・灵壤守护者的防御力大幅降低。
|
||||
challenges.no_healing=恐药异症
|
||||
challenges.no_healing_desc=治疗药水真是种好东西,可惜你对它过敏!\n\n・治疗药水以及使用治疗药水炼制的道具将无法治愈英雄,反而会使英雄中毒。\n・炼金催化剂不会随机到治愈英雄或使英雄中毒的效果。\n・这些道具对其他角色依然发挥正常效果。
|
||||
challenges.no_herbalism=荒芜之地
|
||||
|
@ -347,8 +347,8 @@ challenges.exsg_desc=药水癔症详细规则:\n力量药水--60%概率力量-
|
|||
challenges.icedied = 雪虐风饕(未完成)
|
||||
challenges.icedied_desc=很显然,地牢的雪越下越大了,在这严寒里面,生存的法则将进一步让我们活得更久。\n篝火房间一旦被激活不再无限,变成40回合的寒冷抑制,商人会贩卖更多特殊物品。
|
||||
|
||||
challenges.morelevel=变幻莫测(中秋实装)
|
||||
challenges.morelevel_desc=地牢在时间的长河中渐渐的诞生了更多地形,这次探索地牢谁知道能遇到什么?\n\n_地牢环境已发生改变,请小心应对。
|
||||
challenges.morelevel=变幻莫测(今晚实装)
|
||||
challenges.morelevel_desc=地牢在时间的长河中渐渐的诞生了更多地形,这次探索地牢谁知道能遇到什么?\n\n新增6种全新地形感知,6个特殊新怪物。\n\n_地牢环境已发生改变,请小心应对_\n\n(每层必定触发地形感知,且全部均为大型地形)。_
|
||||
|
||||
challenges.dhxd =灯火前路
|
||||
challenges.dhxd_desc= 灯火指引着前进的道路,提灯引路,灯火前行! \n\n此为三挑以上的特殊机制,但你也可以直接开启它!\n\n1.追加灯火祝福和魔女诅咒机制,灯火会随着深入楼层进行降低\n2.在较低的灯火下死亡会精神崩溃,诞生自己的暗影。\n3.追加提灯和灯油,合理使用这些道具,让自己能在灯火祝福中活下去!如果不幸遭到魔女的诅咒,也不会让你陷入绝境。\n\n灯火不灭,希望仍在,提灯引路,灯火前行!
|
||||
|
@ -356,8 +356,7 @@ challenges.dhxd_desc= 灯火指引着前进的道路,提灯引路,灯火前
|
|||
challenges.cs=挑战(占位符)
|
||||
challenges.cs_desc=这并不是挑战,请忽略不计。
|
||||
|
||||
challenges.no_armorx = 这片大地吃布甲之外的护甲从不挑食,侦查到作弊行为,已移除。
|
||||
|
||||
challenges.no_armorx = 这片大地吃布甲之外的护甲从不挑食,侦查到非布甲的护甲,系统已自动移除。
|
||||
|
||||
|
||||
kill=\n_冰雪魔女:_\n_-_生命+25%\n_-_ 水中召唤的仆从更多\n-击败时必定掉落紫金宝石护符\n_矮人大师:_\n_-_ 致命技能更加频繁\n_-_ 生命值+50%\n-击败时必定掉落自然神圣护符\n_史莱姆王:_\n_-_ 生命值+100%\n_-_ 伤害更高,速度更快\n_-_ 在开局额外召唤豺狼诡术师,巨钳螃蟹,腐臭老鼠,蚀化史莱姆\n_-_ 击败时必定掉落凝胶手套\n_DM720:_\n_-_ 获得全新技能\n_-_ 击败时必定掉落DM150控制终端[尚未完成]
|
||||
|
|
|
@ -558,4 +558,7 @@ ui.changelist.mlpd.vm0_6_7_x_changes.bug_06x84=1.修复酸液体和爆炸体权
|
|||
|
||||
ui.changelist.mlpd.vm0_6_7_x_changes.bug_06x85=1.修复酸液体和爆炸体权重错误的问题\n2.修复一些少量错误
|
||||
|
||||
ui.changelist.mlpd.vm0_6_7_x_changes.bug_06x86=1:开发者模式下召唤的恶魔血巢可以移动和攻击攻击无动画且时间长,移动也无动画且移动后贴图和实际位置会不同(已处理,处理方式:移除)\n2:修复开发者模式下召唤烟雾体实际上召唤的是酸液体\n3:开启缩餐节食下幽灵的小月饼会消失(ling以知晓)(已处理,处理方式:食物即刻起正常生成)\n4:碧灰双刃的伤害固定,极化,安息,强化符石,额外力量均无法影响\n5:种子鞋的腐梅效果使用后会出现一个腐梅种子\n6:弱肉强食成就获取后每有怪物死亡就会在右下角播报(ling以知晓)(潘多拉已修复该问题)\n7:焰浪法杖加一只有2点充能(ling以知晓)(已处理,处理方式,换成upgrade函数)\n8:拟态王宝藏没获取第一个后续宝藏会消失(ling以知晓)(潘多拉已修复该问题,Ling已进行改进)\n9:水晶宝箱怪会飞(潘多拉已修复该问题)\n10:部分boss墙壁会消失,推测是因为吊桥楼层原因(已尝试修复,需要玩家验证)\n11:br可以通过升降器去到28层以后的楼层\n12:共生法杖可以通过奥术聚酯升级(ling以知晓)\n13:催眠符石有俩个效果\n14:快捷合成表部分图标错误(已处理)\n15:修复部分楼层转换错误。
|
||||
|
||||
|
||||
//ui.changelist.mlpd.vm0_5_x_changes.xxx//
|
|
@ -94,7 +94,7 @@ public class Assets {
|
|||
public static final String TILES_DIED = "environment/tiles_died.png";
|
||||
public static final String TILES_GOLD = "environment/tiles_gold.png";
|
||||
|
||||
public static final String WATER_COLD= "environment/water2.png";
|
||||
public static final String WATER_COLD= "environment/water-1.png";
|
||||
public static final String PRISON_EXIT_OLD = "environment/custom_tiles/prison_exit_old.png";
|
||||
public static final String PRISON_EXIT_NEW = "environment/custom_tiles/prison_exit_new.png";
|
||||
public static final String P_BOSS = "environment/custom_tiles/p_boss.png";
|
||||
|
|
|
@ -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.food.SmallRation;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.messages.Messages;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.scenes.InterlevelScene;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.utils.GLog;
|
||||
|
@ -53,7 +52,7 @@ public class Challenges {
|
|||
|
||||
public static final int PRO = 32768;
|
||||
|
||||
public static final int MORELEVEL = 65536;
|
||||
public static final int MOREROOM = 65536;
|
||||
|
||||
public static final int CS = 131072;
|
||||
|
||||
|
@ -81,16 +80,17 @@ public class Challenges {
|
|||
|
||||
public static final int[] MASKS = {
|
||||
NO_FOOD, NO_ARMOR, NO_HEALING, NO_HERBALISM, SWARM_INTELLIGENCE, DARKNESS, NO_SCROLLS
|
||||
, AQUAPHOBIA, CHAMPION_ENEMIES,RLPT,SBSG,EXSG,STRONGER_BOSSES,DHXD,ICEDIED,PRO,MORELEVEL,CS,
|
||||
, AQUAPHOBIA, CHAMPION_ENEMIES,RLPT,SBSG,EXSG,STRONGER_BOSSES,DHXD,ICEDIED,PRO,MOREROOM,CS,
|
||||
};
|
||||
public String name;
|
||||
|
||||
public static boolean isItemBlocked(Item item) {
|
||||
if (Dungeon.isChallenged(NO_FOOD)) {
|
||||
if (item instanceof SmallRation) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
//取消
|
||||
// if (Dungeon.isChallenged(NO_FOOD)) {
|
||||
// if (item instanceof Food && !(item instanceof SmallRation || item instanceof MeatPie)) {
|
||||
// return true;
|
||||
// }
|
||||
// }
|
||||
|
||||
if(InterlevelScene.mode == InterlevelScene.Mode.RESET){
|
||||
if (item instanceof Ankh) {
|
||||
|
@ -126,7 +126,7 @@ public class Challenges {
|
|||
public static int activeChallenges() {
|
||||
int chCount = 0;
|
||||
for (int ch : Challenges.MASKS) {
|
||||
if ((Dungeon.challenges & ch) != 0 && ch <= MORELEVEL && ch != PRO && ch != DHXD) {
|
||||
if ((Dungeon.challenges & ch) != 0 && ch <= MOREROOM && ch != PRO && ch != DHXD) {
|
||||
chCount++;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -89,8 +89,8 @@ public class ShatteredPixelDungeon extends Game {
|
|||
com.shatteredpixel.shatteredpixeldungeon.items.stones.StoneOfFear.class,
|
||||
"com.shatteredpixel.shatteredpixeldungeon.items.stones.StoneOfAffection" );
|
||||
com.watabou.utils.Bundle.addAlias(
|
||||
com.shatteredpixel.shatteredpixeldungeon.items.stones.StoneOfDeepSleep.class,
|
||||
"com.shatteredpixel.shatteredpixeldungeon.items.stones.StoneOfDeepenedSleep" );
|
||||
com.shatteredpixel.shatteredpixeldungeon.items.stones.StoneOfDeepenedSleep.class,
|
||||
"com.shatteredpixel.shatteredpixeldungeon.items.stones.StoneOfDeepSleep" );
|
||||
|
||||
//v0.9.3
|
||||
com.watabou.utils.Bundle.addAlias(
|
||||
|
|
|
@ -117,6 +117,9 @@ public class Statistics {
|
|||
//珍宝
|
||||
public static int dimandchestmazeCollected;
|
||||
|
||||
//宝物生成限制,避免有byd的十字架重复刷取
|
||||
public static int fuckGeneratorAlone;
|
||||
|
||||
public static int dageCollected;
|
||||
|
||||
//首次对决
|
||||
|
@ -150,6 +153,7 @@ public class Statistics {
|
|||
foodEaten = 0;
|
||||
goldchestmazeCollected = 0;
|
||||
dimandchestmazeCollected =0;
|
||||
fuckGeneratorAlone = 0;
|
||||
itemsCrafted = 0;
|
||||
piranhasKilled = 0;
|
||||
ankhsUsed = 0;
|
||||
|
@ -295,6 +299,8 @@ public class Statistics {
|
|||
|
||||
private static final String LOVX = "lovx";
|
||||
|
||||
private static final String FUCKALONE = "fuckplayer";
|
||||
|
||||
|
||||
public static void storeInBundle( Bundle bundle ) {
|
||||
|
||||
|
@ -304,6 +310,8 @@ public class Statistics {
|
|||
bundle.put(LOVE,findMoon);
|
||||
bundle.put(LOVX,deadGo);
|
||||
|
||||
bundle.put(FUCKALONE,fuckGeneratorAlone);
|
||||
|
||||
//分数
|
||||
bundle.put( PROG_SCORE, progressScore );
|
||||
bundle.put( ITEM_VAL, heldItemValue );
|
||||
|
@ -397,6 +405,8 @@ public class Statistics {
|
|||
|
||||
bossWeapons = bundle.getInt(BDTX);
|
||||
|
||||
fuckGeneratorAlone = bundle.getInt(FUCKALONE);
|
||||
|
||||
HealingIsDied = bundle.getInt( HEALDIED );
|
||||
|
||||
readBooks = bundle.getInt( READBOOKS );
|
||||
|
|
|
@ -63,10 +63,10 @@ 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.DimandBook;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.items.books.bookslist.TestBooks;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.items.food.Food;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.items.food.MeatPie;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.items.food.SmallRation;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.items.potions.PotionOfExperience;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.items.potions.PotionOfHealing;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.items.potions.PotionOfInvisibility;
|
||||
|
@ -179,7 +179,7 @@ public enum HeroClass {
|
|||
new PotionOfMindVision().quantity(50).identify().collect();
|
||||
|
||||
new PotionOfLiquidFlame().quantity(50).identify().collect();
|
||||
new DimandBook().quantity(50).identify().collect();
|
||||
new SmallRation.BlackMoon().quantity(50).identify().collect();
|
||||
new PotionOfExperience().quantity(100).identify().collect();
|
||||
new ScrollOfMagicMapping().quantity(100).identify().collect();
|
||||
new ScrollOfUpgrade().quantity(100).identify().collect();
|
||||
|
|
|
@ -2,6 +2,7 @@ package com.shatteredpixel.shatteredpixeldungeon.custom.testmode;
|
|||
|
||||
import com.shatteredpixel.shatteredpixeldungeon.Assets;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.Chrome;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.Conducts;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.Dungeon;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.Statistics;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.actors.Actor;
|
||||
|
@ -81,7 +82,7 @@ public class LevelTeleporter extends TestItem {
|
|||
public void execute( Hero hero, String action ) {
|
||||
super.execute( hero, action );
|
||||
if(action.equals(AC_DESCEND)) {
|
||||
if(Dungeon.hero.buff(LockedFloor.class) != null ) {
|
||||
if(Dungeon.hero.buff(LockedFloor.class) != null || Dungeon.depth>26 && !(Dungeon.isDLC(Conducts.Conduct.BOSSRUSH)) || Dungeon.depth>28 && Dungeon.isDLC(Conducts.Conduct.BOSSRUSH) ) {
|
||||
GLog.w(Messages.get(this,"cannot_send"));
|
||||
return;
|
||||
}
|
||||
|
|
|
@ -23,7 +23,6 @@ import com.shatteredpixel.shatteredpixeldungeon.actors.mobs.Crab;
|
|||
import com.shatteredpixel.shatteredpixeldungeon.actors.mobs.DM100;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.actors.mobs.DM200;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.actors.mobs.DM201;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.actors.mobs.DemonSpawner;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.actors.mobs.Elemental;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.actors.mobs.Eye;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.actors.mobs.FetidRat;
|
||||
|
@ -493,7 +492,7 @@ public class MobPlacer extends TestItem{
|
|||
ELE_CHAOS(Elemental.ChaosElemental.class, DictSpriteSheet.ELEMENTAL_CHAOS),
|
||||
|
||||
RIPPER(RipperDemon.class, DictSpriteSheet.RIPPER),
|
||||
SPAWNER(DemonSpawner.class, DictSpriteSheet.SPAWNER),
|
||||
// SPAWNER(DemonSpawner.class, DictSpriteSheet.SPAWNER),
|
||||
EYE(Eye.class, DictSpriteSheet.EYE),
|
||||
SUCCUBUS(Succubus.class, DictSpriteSheet.SUCCUBUS),
|
||||
SCORPIO(Scorpio.class, DictSpriteSheet.SCORPIO),
|
||||
|
|
|
@ -29,6 +29,7 @@ import com.shatteredpixel.shatteredpixeldungeon.effects.Speck;
|
|||
import com.shatteredpixel.shatteredpixeldungeon.items.bags.Bag;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.items.bags.MagicalHolster;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.items.wands.Wand;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.items.wands.WandOfAnmy;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.items.weapon.melee.MagesStaff;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.messages.Messages;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.scenes.GameScene;
|
||||
|
@ -108,7 +109,7 @@ public class ArcaneResin extends Item {
|
|||
|
||||
@Override
|
||||
public void onSelect( Item item ) {
|
||||
if (item != null && item instanceof Wand) {
|
||||
if (item != null && item instanceof Wand && !(item instanceof WandOfAnmy)) {
|
||||
Wand w = (Wand)item;
|
||||
|
||||
if (w.level() >= 3){
|
||||
|
|
|
@ -21,10 +21,11 @@
|
|||
|
||||
package com.shatteredpixel.shatteredpixeldungeon.items.artifacts;
|
||||
|
||||
import static com.shatteredpixel.shatteredpixeldungeon.Statistics.deadGo;
|
||||
|
||||
import com.shatteredpixel.shatteredpixeldungeon.Assets;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.Dungeon;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.ShatteredPixelDungeon;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.Statistics;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.actors.Actor;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.actors.Char;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.actors.blobs.CorrosiveGas;
|
||||
|
@ -116,7 +117,7 @@ public class DriedRose extends Artifact {
|
|||
actions.remove(AC_EQUIP);
|
||||
return actions;
|
||||
}
|
||||
if (isEquipped( hero ) && charge == chargeCap && !cursed && ghostID == 0) {
|
||||
if (isEquipped( hero ) && charge == chargeCap && !cursed && ghostID == 0 && !deadGo) {
|
||||
actions.add(AC_SUMMON);
|
||||
}
|
||||
if (ghostID != 0){
|
||||
|
@ -565,8 +566,9 @@ public class DriedRose extends Artifact {
|
|||
damage(1, this);
|
||||
}
|
||||
|
||||
if(Statistics.findMoon){
|
||||
if(deadGo){
|
||||
die(true);
|
||||
GLog.n(Messages.get(DriedRose.class, "sorry"));
|
||||
}
|
||||
|
||||
if (!isAlive()) {
|
||||
|
|
|
@ -21,6 +21,7 @@
|
|||
|
||||
package com.shatteredpixel.shatteredpixeldungeon.items.quest;
|
||||
|
||||
import com.shatteredpixel.shatteredpixeldungeon.Statistics;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.actors.hero.Hero;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.items.Item;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.sprites.ItemSpriteSheet;
|
||||
|
@ -103,6 +104,7 @@ public class MIME extends Item {
|
|||
public boolean doPickUp(Hero hero, int pos) {
|
||||
if (super.doPickUp(hero, pos)) {
|
||||
if(!isMimeSupported){
|
||||
Statistics.dimandchestmazeCollected++;
|
||||
isMimeSupported = true;
|
||||
}
|
||||
return true;
|
||||
|
|
|
@ -42,7 +42,7 @@ import com.shatteredpixel.shatteredpixeldungeon.items.stones.StoneOfAugmentation
|
|||
import com.shatteredpixel.shatteredpixeldungeon.items.stones.StoneOfBlast;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.items.stones.StoneOfBlink;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.items.stones.StoneOfClairvoyance;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.items.stones.StoneOfDeepSleep;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.items.stones.StoneOfDeepenedSleep;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.items.stones.StoneOfDisarming;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.items.stones.StoneOfEnchantment;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.items.stones.StoneOfFear;
|
||||
|
@ -290,7 +290,7 @@ public abstract class Scroll extends Item {
|
|||
private static HashMap<Class<?extends Scroll>, Class<?extends Runestone>> stones = new HashMap<>();
|
||||
static {
|
||||
stones.put(ScrollOfIdentify.class, StoneOfIntuition.class);
|
||||
stones.put(ScrollOfLullaby.class, StoneOfDeepSleep.class);
|
||||
stones.put(ScrollOfLullaby.class, StoneOfDeepenedSleep.class);
|
||||
stones.put(ScrollOfMagicMapping.class, StoneOfClairvoyance.class);
|
||||
stones.put(ScrollOfMirrorImage.class, StoneOfFlock.class);
|
||||
stones.put(ScrollOfRetribution.class, StoneOfBlast.class);
|
||||
|
|
|
@ -1,57 +1,57 @@
|
|||
/*
|
||||
* Pixel Dungeon
|
||||
* Copyright (C) 2012-2015 Oleg Dolya
|
||||
*
|
||||
* Shattered Pixel Dungeon
|
||||
* Copyright (C) 2014-2022 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 <http://www.gnu.org/licenses/>
|
||||
*/
|
||||
|
||||
package com.shatteredpixel.shatteredpixeldungeon.items.stones;
|
||||
|
||||
import com.shatteredpixel.shatteredpixeldungeon.Assets;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.actors.Actor;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.actors.Char;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Buff;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.MagicalSleep;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.actors.mobs.Mob;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.sprites.ItemSpriteSheet;
|
||||
import com.watabou.noosa.audio.Sample;
|
||||
|
||||
public class StoneOfDeepSleep extends Runestone {
|
||||
|
||||
{
|
||||
image = ItemSpriteSheet.STONE_SLEEP;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void activate(int cell) {
|
||||
|
||||
if (Actor.findChar(cell) != null) {
|
||||
|
||||
Char c = Actor.findChar(cell);
|
||||
|
||||
if (c instanceof Mob){
|
||||
|
||||
Buff.affect(c, MagicalSleep.class);
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
Sample.INSTANCE.play( Assets.Sounds.LULLABY );
|
||||
|
||||
}
|
||||
}
|
||||
///*
|
||||
// * Pixel Dungeon
|
||||
// * Copyright (C) 2012-2015 Oleg Dolya
|
||||
// *
|
||||
// * Shattered Pixel Dungeon
|
||||
// * Copyright (C) 2014-2022 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 <http://www.gnu.org/licenses/>
|
||||
// */
|
||||
//
|
||||
//package com.shatteredpixel.shatteredpixeldungeon.items.stones;
|
||||
//
|
||||
//import com.shatteredpixel.shatteredpixeldungeon.Assets;
|
||||
//import com.shatteredpixel.shatteredpixeldungeon.actors.Actor;
|
||||
//import com.shatteredpixel.shatteredpixeldungeon.actors.Char;
|
||||
//import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Buff;
|
||||
//import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.MagicalSleep;
|
||||
//import com.shatteredpixel.shatteredpixeldungeon.actors.mobs.Mob;
|
||||
//import com.shatteredpixel.shatteredpixeldungeon.sprites.ItemSpriteSheet;
|
||||
//import com.watabou.noosa.audio.Sample;
|
||||
//
|
||||
//public class StoneOfDeepSleep extends Runestone {
|
||||
//
|
||||
// {
|
||||
// image = ItemSpriteSheet.STONE_SLEEP;
|
||||
// }
|
||||
//
|
||||
// @Override
|
||||
// protected void activate(int cell) {
|
||||
//
|
||||
// if (Actor.findChar(cell) != null) {
|
||||
//
|
||||
// Char c = Actor.findChar(cell);
|
||||
//
|
||||
// if (c instanceof Mob){
|
||||
//
|
||||
// Buff.affect(c, MagicalSleep.class);
|
||||
//
|
||||
// }
|
||||
//
|
||||
// }
|
||||
//
|
||||
// Sample.INSTANCE.play( Assets.Sounds.LULLABY );
|
||||
//
|
||||
// }
|
||||
//}
|
||||
|
|
|
@ -55,7 +55,7 @@ public class WandOfFireblast extends DamageWand {
|
|||
public static class PlaceHolderX extends WandOfFireblast {
|
||||
|
||||
{
|
||||
image = ItemSpriteSheet.WAND_BLAST_WAVE;
|
||||
image = ItemSpriteSheet.WAND_FIREBOLT;
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
|
@ -17,7 +17,7 @@ public class FiveRen extends MeleeWeapon {
|
|||
hitSound = Assets.Sounds.HIT_STAB;
|
||||
hitSoundPitch = 0.9f;
|
||||
|
||||
tier = 2;
|
||||
tier = 5;
|
||||
DLY = 1.5f; //0.67x speed
|
||||
RCH = 2; //extra reach
|
||||
}
|
||||
|
|
|
@ -58,19 +58,19 @@ public class Gauntlet extends MeleeWeapon {
|
|||
switch (Random.Int(6)) {
|
||||
case 0:case 1:case 2:case 3:
|
||||
default:
|
||||
return max(buffedLvl());
|
||||
return super.proc( attacker, defender, damage );
|
||||
case 4: case 5:
|
||||
Buff.affect(defender, HalomethaneBurning.class).reignite(defender);
|
||||
if(Random.Float()<0.55f && level <3) {
|
||||
Buff.prolong(attacker, Vertigo.class, 3f);
|
||||
}
|
||||
return max(buffedLvl());
|
||||
return super.proc( attacker, defender, damage );
|
||||
}
|
||||
}
|
||||
|
||||
public String statsInfo(){
|
||||
if (isIdentified()){
|
||||
return Messages.get(this, "stats_desc", 1+1*buffedLvl());
|
||||
return Messages.get(this, "stats_desc", 1+ buffedLvl());
|
||||
} else {
|
||||
return Messages.get(this, "typical_stats_desc", 1);
|
||||
}
|
||||
|
|
|
@ -322,7 +322,7 @@ public class ColdChestBossLevel extends Level {
|
|||
|
||||
//进行Roll判定
|
||||
|
||||
if(Statistics.dimandchestmazeCollected==0) {
|
||||
if(Statistics.fuckGeneratorAlone==0) {
|
||||
switch (Random.NormalIntRange(0, 3)) {
|
||||
case 0:
|
||||
drop(new MIME.GOLD_ONE(), 634);
|
||||
|
@ -338,7 +338,7 @@ public class ColdChestBossLevel extends Level {
|
|||
break;
|
||||
}
|
||||
}
|
||||
Statistics.dimandchestmazeCollected++;
|
||||
Statistics.fuckGeneratorAlone++;
|
||||
|
||||
pro = START;
|
||||
break;
|
||||
|
@ -357,7 +357,7 @@ public class ColdChestBossLevel extends Level {
|
|||
boss.HP = 360;
|
||||
|
||||
//进行Roll判定 获得一定的随机坐标
|
||||
if(Statistics.dimandchestmazeCollected==1) {
|
||||
if(Statistics.fuckGeneratorAlone==1) {
|
||||
if (Random.Float() < 0.5f) {
|
||||
switch (Random.NormalIntRange(0, 4)) {
|
||||
case 0:
|
||||
|
@ -396,7 +396,7 @@ public class ColdChestBossLevel extends Level {
|
|||
}
|
||||
}
|
||||
}
|
||||
Statistics.dimandchestmazeCollected++;
|
||||
Statistics.fuckGeneratorAlone++;
|
||||
|
||||
switch (Random.NormalIntRange(0,8)){
|
||||
case 0:
|
||||
|
@ -469,7 +469,7 @@ public class ColdChestBossLevel extends Level {
|
|||
//drop( new PotionOfPurity(),648 );
|
||||
|
||||
//进行Roll判定
|
||||
if(Statistics.dimandchestmazeCollected==2) {
|
||||
if(Statistics.fuckGeneratorAlone==2) {
|
||||
if (Random.Float() < 0.5f) {
|
||||
switch (Random.NormalIntRange(0, 1)) {
|
||||
case 0:
|
||||
|
@ -490,7 +490,7 @@ public class ColdChestBossLevel extends Level {
|
|||
}
|
||||
}
|
||||
}
|
||||
Statistics.dimandchestmazeCollected++;
|
||||
Statistics.fuckGeneratorAlone++;
|
||||
|
||||
//生成四个水晶,宝箱王持续回血
|
||||
for (int i : FourCrystal) {
|
||||
|
|
|
@ -21,7 +21,7 @@
|
|||
|
||||
package com.shatteredpixel.shatteredpixeldungeon.levels;
|
||||
|
||||
import static com.shatteredpixel.shatteredpixeldungeon.Challenges.MORELEVEL;
|
||||
import static com.shatteredpixel.shatteredpixeldungeon.Challenges.MOREROOM;
|
||||
import static com.shatteredpixel.shatteredpixeldungeon.Challenges.SBSG;
|
||||
|
||||
import com.shatteredpixel.shatteredpixeldungeon.Assets;
|
||||
|
@ -167,6 +167,9 @@ public abstract class Level implements Bundlable {
|
|||
TRAPS,
|
||||
SECRETS,
|
||||
BIGTRAP,
|
||||
THREEWELL,
|
||||
LINKROOM,
|
||||
DIEDROOM
|
||||
}
|
||||
|
||||
public boolean isLevelExplored( int depth ){
|
||||
|
@ -264,6 +267,60 @@ public abstract class Level implements Bundlable {
|
|||
return 48*48;
|
||||
}
|
||||
|
||||
private void initializeLevelDepthType(){
|
||||
if(Dungeon.isChallenged(MOREROOM)){
|
||||
int randomInt = Random.Int(10);
|
||||
if (randomInt == 0) {
|
||||
feeling = Feeling.CHASM;
|
||||
} else if (randomInt == 1) {
|
||||
feeling = Feeling.WATER;
|
||||
} else if (randomInt == 2) {
|
||||
feeling = Feeling.GRASS;
|
||||
} else if (randomInt == 3) {
|
||||
feeling = Feeling.DARK;
|
||||
addItemToSpawn(new Torch());
|
||||
viewDistance = Math.round(viewDistance / 2f);
|
||||
} else if (randomInt >= 4 && randomInt <= 5) {
|
||||
feeling = Feeling.TRAPS;
|
||||
} else if (randomInt == 6) {
|
||||
feeling = Feeling.SECRETS;
|
||||
} else if (randomInt == 7) {
|
||||
feeling = Feeling.BIGTRAP;
|
||||
} else if (randomInt == 8) {
|
||||
feeling = Feeling.THREEWELL;
|
||||
} else {
|
||||
feeling = Feeling.LINKROOM;
|
||||
}
|
||||
} else {
|
||||
switch (Random.Int( 14 )) {
|
||||
case 0:
|
||||
feeling = Feeling.CHASM;
|
||||
break;
|
||||
case 1:
|
||||
feeling = Feeling.WATER;
|
||||
break;
|
||||
case 2:
|
||||
feeling = Feeling.GRASS;
|
||||
break;
|
||||
case 3:
|
||||
feeling = Feeling.DARK;
|
||||
addItemToSpawn(new Torch());
|
||||
viewDistance = Math.round(viewDistance/2f);
|
||||
break;
|
||||
case 4:
|
||||
feeling = Feeling.LARGE;
|
||||
addItemToSpawn(Generator.random(Generator.Category.FOOD));
|
||||
break;
|
||||
case 5:
|
||||
feeling = Feeling.TRAPS;
|
||||
break;
|
||||
case 6:
|
||||
feeling = Feeling.SECRETS;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public void create() {
|
||||
|
||||
Random.pushGenerator( Dungeon.seedCurDepth() );
|
||||
|
@ -300,40 +357,8 @@ public abstract class Level implements Bundlable {
|
|||
addItemToSpawn( new StoneOfIntuition() );
|
||||
}
|
||||
|
||||
if (Dungeon.depth > 1 && !Dungeon.bossLevel()) {
|
||||
//50% chance of getting a level feeling
|
||||
//~7.15% chance for each feeling
|
||||
switch (Random.Int( 14 )) {
|
||||
case 0:
|
||||
feeling = Feeling.CHASM;
|
||||
break;
|
||||
case 1:
|
||||
feeling = Feeling.WATER;
|
||||
break;
|
||||
case 2:
|
||||
feeling = Feeling.GRASS;
|
||||
break;
|
||||
case 3:
|
||||
feeling = Feeling.DARK;
|
||||
addItemToSpawn(new Torch());
|
||||
viewDistance = Math.round(viewDistance/2f);
|
||||
break;
|
||||
case 4:
|
||||
feeling = Feeling.LARGE;
|
||||
addItemToSpawn(Generator.random(Generator.Category.FOOD));
|
||||
break;
|
||||
case 5:
|
||||
feeling = Feeling.TRAPS;
|
||||
break;
|
||||
case 6:
|
||||
feeling = Feeling.SECRETS;
|
||||
break;
|
||||
case 7:
|
||||
if(Dungeon.isChallenged(MORELEVEL)){
|
||||
feeling = Feeling.BIGTRAP;
|
||||
}
|
||||
break;
|
||||
}
|
||||
if (Dungeon.depth > 1 && !Dungeon.isDLC(Conducts.Conduct.BOSSRUSH)) {
|
||||
initializeLevelDepthType();
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -23,6 +23,7 @@ package com.shatteredpixel.shatteredpixeldungeon.levels;
|
|||
|
||||
import static com.shatteredpixel.shatteredpixeldungeon.Challenges.AQUAPHOBIA;
|
||||
import static com.shatteredpixel.shatteredpixeldungeon.Challenges.EXSG;
|
||||
import static com.shatteredpixel.shatteredpixeldungeon.Challenges.MOREROOM;
|
||||
import static com.shatteredpixel.shatteredpixeldungeon.Dungeon.hero;
|
||||
import static com.shatteredpixel.shatteredpixeldungeon.levels.RegularLevel.Holiday.XMAS;
|
||||
|
||||
|
@ -59,8 +60,10 @@ import com.shatteredpixel.shatteredpixeldungeon.levels.builders.LoopBuilder;
|
|||
import com.shatteredpixel.shatteredpixeldungeon.levels.painters.Painter;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.levels.rooms.Room;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.levels.rooms.secret.SecretRoom;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.levels.rooms.secret.SecretWellRoom;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.levels.rooms.special.AutoShopRoom;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.levels.rooms.special.LanFireRoom;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.levels.rooms.special.MagicWellRoom;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.levels.rooms.special.MagicalFireRoom;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.levels.rooms.special.NxhyShopRoom;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.levels.rooms.special.NyzBombAndBooksRoom;
|
||||
|
@ -235,8 +238,8 @@ public abstract class RegularLevel extends Level {
|
|||
initRooms.add( roomExit = new ExitRoom());
|
||||
|
||||
//force max standard rooms and multiple by 1.5x for large levels
|
||||
int standards = standardRooms(feeling == Feeling.LARGE);
|
||||
if (feeling == Feeling.LARGE){
|
||||
int standards = standardRooms(feeling == Feeling.LARGE || Dungeon.isChallenged(MOREROOM));
|
||||
if (feeling == Feeling.LARGE || Dungeon.isChallenged(MOREROOM)){
|
||||
standards = (int)Math.ceil(standards * 1.5f);
|
||||
}
|
||||
for (int i = 0; i < standards; i++) {
|
||||
|
@ -259,9 +262,9 @@ public abstract class RegularLevel extends Level {
|
|||
}
|
||||
|
||||
// initRooms.add(new EyeRoom());
|
||||
// initRooms.add(new YinYangRoom());
|
||||
// initRooms.add(new YinYangRoom());z
|
||||
|
||||
if(RegularLevel.holiday == Holiday.ZQJ){
|
||||
if(RegularLevel.holiday == Holiday.ZQJ ){
|
||||
if(Dungeon.depth == 17){
|
||||
initRooms.add(new HeartRoom());
|
||||
}
|
||||
|
@ -284,10 +287,14 @@ public abstract class RegularLevel extends Level {
|
|||
}
|
||||
|
||||
//force max special rooms and add one more for large levels
|
||||
int specials = specialRooms(feeling == Feeling.LARGE);
|
||||
if (feeling == Feeling.LARGE){
|
||||
int specials = specialRooms(feeling == Feeling.LARGE || Dungeon.isChallenged(MOREROOM));
|
||||
if (feeling == Feeling.LARGE || Dungeon.isChallenged(MOREROOM)){
|
||||
specials++;
|
||||
}
|
||||
if(feeling == Feeling.THREEWELL){
|
||||
initRooms.add(new SecretWellRoom());
|
||||
initRooms.add(new MagicWellRoom());
|
||||
}
|
||||
SpecialRoom.initForFloor();
|
||||
for (int i = 0; i < specials; i++) {
|
||||
SpecialRoom s = SpecialRoom.createRoom();
|
||||
|
@ -365,7 +372,7 @@ public abstract class RegularLevel extends Level {
|
|||
if (Dungeon.depth <= 1) return 0;
|
||||
|
||||
int mobs = 3 + Dungeon.depth % 5 + Random.Int(3);
|
||||
if (feeling == Feeling.LARGE){
|
||||
if (feeling == Feeling.LARGE || Dungeon.isChallenged(MOREROOM)){
|
||||
mobs = (int)Math.ceil(mobs * 1.33f);
|
||||
}
|
||||
return mobs;
|
||||
|
@ -500,7 +507,7 @@ public abstract class RegularLevel extends Level {
|
|||
// drops 3/4/5 items 60%/30%/10% of the time
|
||||
int nItems = 3 + Random.chances(new float[]{6, 3, 1});
|
||||
|
||||
if (feeling == Feeling.LARGE){
|
||||
if (feeling == Feeling.LARGE || Dungeon.isChallenged(MOREROOM)){
|
||||
nItems += 2;
|
||||
}
|
||||
|
||||
|
|
|
@ -74,11 +74,19 @@ public class SLMKingLevel extends SewerLevel {
|
|||
return initRooms;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int tunnelTile() {
|
||||
return Terrain.WATER;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected int standardRooms(boolean forceMax) {
|
||||
if (forceMax) return 3;
|
||||
//2 to 3, average 2.5
|
||||
return 2+Random.chances(new float[]{1, 1});
|
||||
return 0;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected int specialRooms(boolean forceMax) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
protected Builder builder(){
|
||||
|
|
|
@ -57,6 +57,11 @@ public class SewerBossLevel extends SewerLevel {
|
|||
}
|
||||
|
||||
private int stairs = 0;
|
||||
|
||||
@Override
|
||||
public int tunnelTile() {
|
||||
return Terrain.WATER;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void playLevelMusic() {
|
||||
|
@ -108,9 +113,12 @@ public class SewerBossLevel extends SewerLevel {
|
|||
|
||||
@Override
|
||||
protected int standardRooms(boolean forceMax) {
|
||||
if (forceMax) return 3;
|
||||
//2 to 3, average 2.5
|
||||
return 2+Random.chances(new float[]{1, 1});
|
||||
return 0;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected int specialRooms(boolean forceMax) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
protected Builder builder(){
|
||||
|
|
|
@ -446,7 +446,7 @@ public abstract class RegularPainter extends Painter {
|
|||
validCells.size()/5);
|
||||
|
||||
//5x traps on traps level feeling, but the extra traps are all visible
|
||||
for (int i = 0; i < (l.feeling == Level.Feeling.BIGTRAP ? 25*nTraps : l.feeling == Level.Feeling.TRAPS ?
|
||||
for (int i = 0; i < (l.feeling == Level.Feeling.BIGTRAP ? 23*nTraps : l.feeling == Level.Feeling.TRAPS ?
|
||||
5*nTraps :
|
||||
nTraps); i++) {
|
||||
|
||||
|
|
|
@ -23,6 +23,7 @@ package com.shatteredpixel.shatteredpixeldungeon.levels.rooms.secret;
|
|||
|
||||
import com.shatteredpixel.shatteredpixeldungeon.actors.blobs.WaterOfAwareness;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.actors.blobs.WaterOfHealth;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.actors.blobs.WaterOfTransmutation;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.actors.blobs.WellWater;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.levels.Level;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.levels.Terrain;
|
||||
|
@ -33,7 +34,7 @@ import com.watabou.utils.Random;
|
|||
public class SecretWellRoom extends SecretRoom {
|
||||
|
||||
private static final Class<?>[] WATERS =
|
||||
{WaterOfAwareness.class, WaterOfHealth.class};
|
||||
{WaterOfAwareness.class, WaterOfHealth.class, WaterOfTransmutation.class};
|
||||
|
||||
@Override
|
||||
public boolean canConnect(Point p) {
|
||||
|
|
|
@ -23,6 +23,7 @@ package com.shatteredpixel.shatteredpixeldungeon.levels.rooms.special;
|
|||
|
||||
import com.shatteredpixel.shatteredpixeldungeon.actors.blobs.WaterOfAwareness;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.actors.blobs.WaterOfHealth;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.actors.blobs.WaterOfTransmutation;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.actors.blobs.WellWater;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.levels.Level;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.levels.Terrain;
|
||||
|
@ -33,7 +34,7 @@ import com.watabou.utils.Random;
|
|||
public class MagicWellRoom extends SpecialRoom {
|
||||
|
||||
private static final Class<?>[] WATERS =
|
||||
{WaterOfAwareness.class, WaterOfHealth.class};
|
||||
{WaterOfAwareness.class, WaterOfHealth.class, WaterOfTransmutation.class};
|
||||
|
||||
public Class<?extends WellWater> overrideWater = null;
|
||||
|
||||
|
|
|
@ -3,8 +3,8 @@ package com.shatteredpixel.shatteredpixeldungeon.levels.rooms.standard;
|
|||
import static com.shatteredpixel.shatteredpixeldungeon.levels.Terrain.CHASM;
|
||||
import static com.shatteredpixel.shatteredpixeldungeon.levels.Terrain.EMPTY;
|
||||
import static com.shatteredpixel.shatteredpixeldungeon.levels.Terrain.EMPTY_SP;
|
||||
import static com.shatteredpixel.shatteredpixeldungeon.levels.Terrain.FURROWED_GRASS;
|
||||
import static com.shatteredpixel.shatteredpixeldungeon.levels.Terrain.PEDESTAL;
|
||||
import static com.shatteredpixel.shatteredpixeldungeon.levels.Terrain.WALL;
|
||||
import static com.shatteredpixel.shatteredpixeldungeon.levels.Terrain.WATER;
|
||||
|
||||
import com.shatteredpixel.shatteredpixeldungeon.actors.mobs.Mob;
|
||||
|
@ -59,7 +59,7 @@ public class HeartRoom extends SpecialRoom {
|
|||
Painter.drawLine(level, new Point(right, bottom), new Point(left, bottom), WATER);
|
||||
Painter.drawLine(level, new Point(left, bottom), new Point(left, top), CHASM);
|
||||
|
||||
Painter.fill(level,this, WALL);
|
||||
Painter.fill(level,this, FURROWED_GRASS);
|
||||
|
||||
// 绘制爱心
|
||||
|
||||
|
@ -73,7 +73,7 @@ public class HeartRoom extends SpecialRoom {
|
|||
Painter.drawLine(level, new Point(centerX + radius, centerY), new Point(centerX, centerY + radius), PEDESTAL);
|
||||
|
||||
// 绘制眼睛外圈和门
|
||||
int eyeRadius = radius / 2;
|
||||
int eyeRadius = radius /4;
|
||||
Painter.drawCircle(level, center, eyeRadius + 5, EMPTY);
|
||||
|
||||
Painter.drawCircle(level, center, eyeRadius, CHASM);
|
||||
|
|
|
@ -5,7 +5,6 @@ import static com.shatteredpixel.shatteredpixeldungeon.levels.Terrain.EMPTY;
|
|||
import static com.shatteredpixel.shatteredpixeldungeon.levels.Terrain.EMPTY_SP;
|
||||
import static com.shatteredpixel.shatteredpixeldungeon.levels.Terrain.FURROWED_GRASS;
|
||||
import static com.shatteredpixel.shatteredpixeldungeon.levels.Terrain.PEDESTAL;
|
||||
import static com.shatteredpixel.shatteredpixeldungeon.levels.Terrain.WALL;
|
||||
import static com.shatteredpixel.shatteredpixeldungeon.levels.Terrain.WATER;
|
||||
|
||||
import com.shatteredpixel.shatteredpixeldungeon.actors.mobs.Mob;
|
||||
|
@ -49,7 +48,7 @@ public class LoveRoom extends SpecialRoom {
|
|||
int centerY = center.y;
|
||||
int radius = (right - left) / 2;
|
||||
|
||||
int MiddlePos = (top + 7) * level.width() + left + 7;
|
||||
int MiddlePos = (top + 8) * level.width() + left + 8;
|
||||
|
||||
Mob n = new PinkGhostNPC();
|
||||
n.pos = MiddlePos;
|
||||
|
@ -60,7 +59,7 @@ public class LoveRoom extends SpecialRoom {
|
|||
Painter.drawLine(level, new Point(right, bottom), new Point(left, bottom), WATER);
|
||||
Painter.drawLine(level, new Point(left, bottom), new Point(left, top), CHASM);
|
||||
|
||||
Painter.fill(level,this, WALL);
|
||||
Painter.fill(level,this, WATER);
|
||||
|
||||
// 绘制爱心
|
||||
|
||||
|
@ -74,7 +73,7 @@ public class LoveRoom extends SpecialRoom {
|
|||
Painter.drawLine(level, new Point(centerX + radius, centerY), new Point(centerX, centerY + radius), PEDESTAL);
|
||||
|
||||
// 绘制眼睛外圈和门
|
||||
int eyeRadius = radius / 2;
|
||||
int eyeRadius = radius / 4;
|
||||
Painter.drawCircle(level, center, eyeRadius + 5, EMPTY);
|
||||
|
||||
Painter.drawCircle(level, center, eyeRadius, FURROWED_GRASS);
|
||||
|
|
|
@ -52,7 +52,7 @@ public class YinYangRoom extends SpecialRoom {
|
|||
Item prize;
|
||||
do {
|
||||
prize = Generator.random(cat);
|
||||
prize.level= Random.NormalIntRange(1,2);
|
||||
prize.upgrade(Random.NormalIntRange(1,2));
|
||||
prize.cursed = false;
|
||||
} while (Challenges.isItemBlocked(prize));
|
||||
return prize;
|
||||
|
@ -64,7 +64,7 @@ public class YinYangRoom extends SpecialRoom {
|
|||
Item prize;
|
||||
do {
|
||||
prize = Generator.random(cat);
|
||||
prize.level= Random.NormalIntRange(2,3);
|
||||
prize.upgrade(Random.NormalIntRange(2,3));
|
||||
prize.cursed = true;
|
||||
} while (Challenges.isItemBlocked(prize));
|
||||
return prize;
|
||||
|
|
|
@ -3,7 +3,7 @@
|
|||
* Copyright (C) 2012-2015 Oleg Dolya
|
||||
*
|
||||
* Shattered Pixel Dungeon
|
||||
* Copyright (C) 2014-2022 Evan Debenham
|
||||
* 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
|
||||
|
@ -23,12 +23,15 @@ package com.shatteredpixel.shatteredpixeldungeon.plants;
|
|||
|
||||
import com.shatteredpixel.shatteredpixeldungeon.Dungeon;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.actors.Char;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.actors.blobs.Blob;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.actors.blobs.ToxicGas;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.AdrenalineSurge;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Buff;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.actors.hero.Hero;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.actors.hero.HeroSubClass;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.effects.CellEmitter;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.effects.particles.LeafParticle;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.scenes.GameScene;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.sprites.ItemSpriteSheet;
|
||||
|
||||
public class Rotberry extends Plant {
|
||||
|
@ -42,20 +45,21 @@ public class Rotberry extends Plant {
|
|||
public void activate( Char ch ) {
|
||||
if (ch instanceof Hero && ((Hero) ch).subClass == HeroSubClass.WARDEN){
|
||||
Buff.affect(ch, AdrenalineSurge.class).reset(1, AdrenalineSurge.DURATION);
|
||||
} else {
|
||||
GameScene.add( Blob.seed( pos, 100, ToxicGas.class ) );
|
||||
}
|
||||
|
||||
Dungeon.level.drop( new Seed(), pos ).sprite.drop();
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public void wither() {
|
||||
Dungeon.level.uproot( pos );
|
||||
|
||||
|
||||
if (Dungeon.level.heroFOV[pos]) {
|
||||
CellEmitter.get( pos ).burst( LeafParticle.GENERAL, 6 );
|
||||
}
|
||||
|
||||
//no warden benefit
|
||||
|
||||
//seed always drops, no lotus benefit
|
||||
Dungeon.level.drop( new Seed(), pos ).sprite.drop();
|
||||
}
|
||||
|
||||
public static class Seed extends Plant.Seed {
|
||||
|
@ -66,7 +70,7 @@ public class Rotberry extends Plant {
|
|||
|
||||
unique = true;
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public int value() {
|
||||
return 30 * quantity;
|
||||
|
|
|
@ -712,6 +712,7 @@ public class GameScene extends PixelScene {
|
|||
case TRAPS: GLog.w(Messages.get(this, "traps")); break;
|
||||
case SECRETS: GLog.w(Messages.get(this, "secrets")); break;
|
||||
case BIGTRAP: GLog.w(Messages.get(this, "moretraps")); break;
|
||||
case THREEWELL: GLog.w(Messages.get(this, "threewells")); break;
|
||||
}
|
||||
|
||||
for (Mob mob : Dungeon.level.mobs) {
|
||||
|
|
|
@ -294,6 +294,11 @@ public class HeroSelectScene extends PixelScene {
|
|||
if( !visible && GamesInProgress.selectedClass != null){
|
||||
visible = true;
|
||||
}
|
||||
if (SPDSettings.challenges() > 0) {
|
||||
icon(Icons.get( Icons.CHALLENGE_ON));
|
||||
} else {
|
||||
icon(Icons.get( Icons.CHALLENGE_OFF));
|
||||
}
|
||||
super.update();
|
||||
}
|
||||
|
||||
|
|
|
@ -104,6 +104,13 @@ public enum Icons {
|
|||
DEPTH_SECRETS,
|
||||
|
||||
DEPTH_BTRAPS,
|
||||
|
||||
DEPTH_WELLS,
|
||||
|
||||
DEPTH_LINK_ROOM,
|
||||
|
||||
DEPTH_DIED,
|
||||
|
||||
CHAL_COUNT,
|
||||
|
||||
HAPPY_ICON,
|
||||
|
@ -340,6 +347,15 @@ public enum Icons {
|
|||
case DEPTH_BTRAPS:
|
||||
icon.frame( icon.texture.uvRectBySize( 112, 64, 7, 7 ) );
|
||||
break;
|
||||
case DEPTH_WELLS:
|
||||
icon.frame( icon.texture.uvRectBySize( 120, 64, 7, 7 ) );
|
||||
break;
|
||||
case DEPTH_LINK_ROOM:
|
||||
icon.frame( icon.texture.uvRectBySize( 128, 64, 7, 7 ) );
|
||||
break;
|
||||
case DEPTH_DIED:
|
||||
icon.frame( icon.texture.uvRectBySize( 136, 64, 7, 7 ) );
|
||||
break;
|
||||
case CHAL_COUNT:
|
||||
icon.frame( icon.texture.uvRectBySize( 48, 72, 7, 7 ) );
|
||||
break;
|
||||
|
@ -421,6 +437,12 @@ public enum Icons {
|
|||
return get(DEPTH_TRAPS);
|
||||
case BIGTRAP:
|
||||
return get(DEPTH_BTRAPS);
|
||||
case THREEWELL:
|
||||
return get(DEPTH_WELLS);
|
||||
case DIEDROOM:
|
||||
return get(DEPTH_DIED);
|
||||
case LINKROOM:
|
||||
return get(DEPTH_LINK_ROOM);
|
||||
case SECRETS:
|
||||
return get(DEPTH_SECRETS);
|
||||
}
|
||||
|
|
|
@ -21,6 +21,7 @@
|
|||
|
||||
package com.shatteredpixel.shatteredpixeldungeon.ui;
|
||||
|
||||
import static com.shatteredpixel.shatteredpixeldungeon.Challenges.PRO;
|
||||
import static com.shatteredpixel.shatteredpixeldungeon.ui.Window.CYELLOW;
|
||||
import static com.shatteredpixel.shatteredpixeldungeon.ui.Window.GREEN_COLOR;
|
||||
import static com.shatteredpixel.shatteredpixeldungeon.ui.Window.RED_COLOR;
|
||||
|
@ -176,7 +177,8 @@ public class MenuPane extends Component {
|
|||
btnMenu = new MenuButton();
|
||||
add( btnMenu );
|
||||
|
||||
version = new BitmapText( "v" + Game.version, PixelScene.pixelFont);
|
||||
version = new BitmapText( "v" + Game.version + (Dungeon.isChallenged(PRO)?"-DEV_MODE":""),
|
||||
PixelScene.pixelFont);
|
||||
version.alpha( 0.5f );
|
||||
add(version);
|
||||
|
||||
|
|
|
@ -146,6 +146,17 @@ public class vM0_6_7_X_Changes {
|
|||
changes.addButton(new ChangeButton(i, ("熔岩火龙"),
|
||||
("丛林暴乱的真相")));
|
||||
|
||||
changes = new ChangeInfo("v0.6.5.0-Alpha5.2-国庆", true, "");
|
||||
changes.hardlight(Window.TITLE_COLOR);
|
||||
changeInfos.add(changes);
|
||||
|
||||
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_06X86")));
|
||||
|
||||
changes = new ChangeInfo("v0.6.5.0-Alpha5-中秋", true, "");
|
||||
changes.hardlight(Window.TITLE_COLOR);
|
||||
changeInfos.add(changes);
|
||||
|
|
|
@ -0,0 +1,4 @@
|
|||
package com.shatteredpixel.shatteredpixeldungeon.windows;
|
||||
|
||||
public class WndBossMessage {
|
||||
}
|
|
@ -252,6 +252,10 @@ public class WndChallenges extends Window {
|
|||
info = new IconButton(Icons.get(Icons.INFO)){
|
||||
@Override
|
||||
protected void onClick() {
|
||||
// if(challenge.equals("stronger_bosses")){
|
||||
// return;
|
||||
// }
|
||||
|
||||
ShatteredPixelDungeon.scene().add(
|
||||
new WndTitledMessage(new Image(ChallengeInfo.this.icon),
|
||||
Messages.titleCase(Messages.get(Challenges.class, challenge)),
|
||||
|
|
|
@ -177,6 +177,7 @@ public class WndStartGame extends Window {
|
|||
|
||||
|
||||
|
||||
|
||||
@Override
|
||||
protected void layout() {
|
||||
super.layout();
|
||||
|
@ -299,9 +300,10 @@ public class WndStartGame extends Window {
|
|||
if( !visible && GamesInProgress.selectedClass != null){
|
||||
visible = true;
|
||||
}
|
||||
if (parent != null) {
|
||||
icon(Icons.get(SPDSettings.challenges() > 0 ?
|
||||
Icons.CHALLENGE_ON : Icons.CHALLENGE_OFF));
|
||||
if (SPDSettings.challenges() > 0) {
|
||||
icon(Icons.get( Icons.CHALLENGE_ON));
|
||||
} else {
|
||||
icon(Icons.get( Icons.CHALLENGE_OFF));
|
||||
}
|
||||
super.update();
|
||||
}
|
||||
|
@ -332,6 +334,8 @@ public class WndStartGame extends Window {
|
|||
|
||||
}
|
||||
|
||||
|
||||
|
||||
private static class HeroBtn extends IconButton {
|
||||
|
||||
private HeroClass cl;
|
||||
|
|
Loading…
Reference in New Issue
Block a user