diff --git a/build.gradle b/build.gradle index 628ee1b9d..acb8e1a2d 100644 --- a/build.gradle +++ b/build.gradle @@ -18,8 +18,8 @@ allprojects { appName = 'Magic Ling Pixel Dungeon' appPackageName = 'com.ansdomagiclingpixeldungeon.ling' - appVersionCode =915000 - appVersionName = '0.6.5.0-Alpha6-Patch5' + appVersionCode =916000 + appVersionName = '0.6.5.0-Alpha6-Patch6' appJavaCompatibility = JavaVersion.VERSION_1_8 diff --git a/core/src/main/assets/environment/tiles_halloween.png b/core/src/main/assets/environment/tiles_halloween.png new file mode 100644 index 000000000..b9f65014d Binary files /dev/null and b/core/src/main/assets/environment/tiles_halloween.png differ diff --git a/core/src/main/assets/environment/water7.png b/core/src/main/assets/environment/water7.png new file mode 100644 index 000000000..7909ba071 Binary files /dev/null and b/core/src/main/assets/environment/water7.png differ diff --git a/core/src/main/assets/messages/actors/actors.properties b/core/src/main/assets/messages/actors/actors.properties index 8665bbc85..723cde474 100644 --- a/core/src/main/assets/messages/actors/actors.properties +++ b/core/src/main/assets/messages/actors/actors.properties @@ -1,5 +1,11 @@ #####MLPD-P3文本 +actors.mobs.hollow.apprenticewitch.name=见习魔女 +actors.mobs.hollow.apprenticewitch.desc=她曾是某魔法学院的学生,因为太过顽皮,没能通过魔法考试,所以无法成为一名合格的法师。\n\n有些人会吸取教训,继续努力学习成为出色的法师,但她却渐渐失去了对魔力的控制,境况逐渐堕落。如今,她只能作为一名见习魔女游荡在荒野之外,以汲取过路人灵魂或给予她糖果为乐。如果没有给她糖果,那么她会生气,你的灵魂会被她汲取。 + +actors.mobs.hollow.frankenstein.name=未尽梦偶 +actors.mobs.hollow.frankenstein.desc=游荡在万圣大殿的未完成人偶,据说制作它们的主人因为它们失败的外型和缓慢的速度最终抛弃了它们。它们已经陷入了癫狂之中,会寻找一切活着的生命,并撕碎他们的灵魂。 + actors.mobs.blackmimic.name=暗金宝箱怪 actors.mobs.blackmimic.desc=宝箱怪是一种能随意改变外形的魔法生物。在地牢里它们几乎一直以宝箱形态出现,因为这样总能吸引不防备的冒险者。\n\n暗金宝箱怪是在极度魔力紊乱下才会出现的极度危险的怪物。它们潜伏在暗影中等待猎物的到来…… @@ -500,7 +506,6 @@ custom.testmode.spawnweapon.ac_spawn=生成 name = 请先选择附魔种类,然后会出现对应的编号。\n\n通过下方滑块滑动选择对应的编号即可。 custom.testmode.spawnweapon$weaponsetting.selected=选择 - actors.buffs.sanity.bad=我感觉我不太好…… actors.buffs.sanity.tobad=理智过低了会死吗? actors.buffs.sanity.diedsoul=希望不在……绝望永存…… diff --git a/core/src/main/assets/messages/windows/windows.properties b/core/src/main/assets/messages/windows/windows.properties index 346f08469..af45953a9 100644 --- a/core/src/main/assets/messages/windows/windows.properties +++ b/core/src/main/assets/messages/windows/windows.properties @@ -56,6 +56,7 @@ windows.wndstory.start=灯火冒险正式开始!你获得了一次免费的增 windows.wndstory.letxz=灯火冒险欢迎您,已赠送你免费的增益Roll! windows.wndstory.letsplay=深度调查模式已经开启,在该模式下挑战徽章不可获得,祝你游戏愉快! +windows.wndstory.warning=你正在进行的是超过6个挑战,属于高挑模式。请小心行动。同时你的初始灯火将有所扣减。 windows.wndhero$statstab.lanterfire=灯火 @@ -112,6 +113,7 @@ windows.wndinfomob.abyss=深渊 windows.wndinfomob.undied=亡灵 windows.wndinfomob.demon=恶魔 windows.wndinfomob.ling=元素 +windows.wndinfomob.hollow=万圣 windows.wndinfomob.normal=常规 windows.wndinfomob.canroll=可掉落 windows.wndinfomob.noroll=不掉落 diff --git a/core/src/main/assets/sprites/amulet.png b/core/src/main/assets/sprites/amulet.png index 8eee01798..226db3278 100644 Binary files a/core/src/main/assets/sprites/amulet.png and b/core/src/main/assets/sprites/amulet.png differ diff --git a/core/src/main/assets/sprites/hollow/apprentice_witch.png b/core/src/main/assets/sprites/hollow/apprentice_witch.png new file mode 100644 index 000000000..f28325b50 Binary files /dev/null and b/core/src/main/assets/sprites/hollow/apprentice_witch.png differ diff --git a/core/src/main/assets/sprites/hollow/butcher.png b/core/src/main/assets/sprites/hollow/butcher.png new file mode 100644 index 000000000..8e6eb9fd0 Binary files /dev/null and b/core/src/main/assets/sprites/hollow/butcher.png differ diff --git a/core/src/main/assets/sprites/hollow/frankenstein.png b/core/src/main/assets/sprites/hollow/frankenstein.png new file mode 100644 index 000000000..3e13872a5 Binary files /dev/null and b/core/src/main/assets/sprites/hollow/frankenstein.png differ diff --git a/core/src/main/assets/sprites/hollow/ghost_halloween.png b/core/src/main/assets/sprites/hollow/ghost_halloween.png new file mode 100644 index 000000000..0f8734bb6 Binary files /dev/null and b/core/src/main/assets/sprites/hollow/ghost_halloween.png differ diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/Assets.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/Assets.java index 509df796a..06f960bf1 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/Assets.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/Assets.java @@ -70,6 +70,9 @@ public class Assets { public static final String TILES_PRISON = "environment/tiles_prison.png"; public static final String TILES_COLDCHEST = "environment/tiles_coldchest.png"; public static final String TILES_FIRE = "environment/tiles_fire.png"; + + public static final String TILES_HOLLOW = "environment/tiles_halloween.png"; + public static final String TILES_CAVES = "environment/tiles_caves.png"; public static final String TILES_CITY = "environment/tiles_city.png"; public static final String TILES_ANCIENT = "environment/tiles_ancient.png"; @@ -82,6 +85,7 @@ public class Assets { public static final String WATER_ANCIENT = "environment/water5.png"; + public static final String WATER_HOLLOW = "environment/water7.png"; public static final String WEAK_FLOOR = "environment/custom_tiles/weak_floor.png"; public static final String SEWER_BOSS = "environment/custom_tiles/sewer_boss.png"; @@ -325,6 +329,11 @@ public class Assets { //NPCS public static final String KEEPERKING = "sprites/npc/ShopKing.png"; + //HOLLOW + public static final String APWHEEL = "sprites/hollow/apprentice_witch.png"; + + public static final String ZOMBIE = "sprites/hollow/frankenstein.png"; + public static final String KEEPERKINGBOT = "sprites/npc/autoshop.png"; //BOSS diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/Char.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/Char.java index 3c6472c49..9375e4856 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/Char.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/Char.java @@ -1053,7 +1053,8 @@ public abstract class Char extends Actor { IMMOVABLE, NPC, HUNTER, - MIMIC; + MIMIC, + HOLLOW; private HashSet resistances; diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/buffs/Nyctophobia.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/buffs/Nyctophobia.java index a0585ea6f..327d7faad 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/buffs/Nyctophobia.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/buffs/Nyctophobia.java @@ -35,6 +35,7 @@ public class Nyctophobia extends Buff implements Hero.Doom { public boolean act() { if(hero.lanterfire >= 90){ + //灯火大于90给予一个buff 然后不叠加 for (Buff b : hero.buffs(ClearLanterBuff.class)){ if(b == null){ goodLanterFire(); diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/hero/Hero.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/hero/Hero.java index a5a9e6e8c..c899f6eff 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/hero/Hero.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/hero/Hero.java @@ -1036,9 +1036,13 @@ public class Hero extends Char { } + if(chCount>=6 && !lanterfireactive && !Dungeon.isChallenged(PRO)){ + GLog.n(Messages.get(WndStory.class, "warning")); + } + if(chCount >= 3 && !lanterfireactive && !Dungeon.isChallenged(PRO) || Dungeon.isChallenged(DHXD) && !lanterfireactive){ - //TODO 灯火前行 - lanterfire = 100; + //灯火前行 3.2 + lanterfire = 100 - (chCount>=6 ? chCount*3 : 0); new OilLantern().quantity(1).identify().collect(); lanterfireactive = true; diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/mobs/Bestiary.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/mobs/Bestiary.java index 826058574..fe6c2c6e4 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/mobs/Bestiary.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/mobs/Bestiary.java @@ -25,6 +25,9 @@ import static com.shatteredpixel.shatteredpixeldungeon.Challenges.RLPT; import com.shatteredpixel.shatteredpixeldungeon.Conducts; import com.shatteredpixel.shatteredpixeldungeon.Dungeon; +import com.shatteredpixel.shatteredpixeldungeon.actors.mobs.hollow.ApprenticeWitch; +import com.shatteredpixel.shatteredpixeldungeon.actors.mobs.hollow.Frankenstein; +import com.watabou.utils.DeviceCompat; import com.watabou.utils.Random; import java.util.ArrayList; @@ -45,10 +48,17 @@ public class Bestiary { if (Dungeon.isChallenged(RLPT) && !Dungeon.isDLC(Conducts.Conduct.BOSSRUSH)){ switch (i) { case 1: - //3x rat, 1x snake - return new ArrayList<>(Arrays.asList( - FlowerSlime.class, FlowerSlime.class, - FlowerSlime.class)); + //开发者测试怪组 + if(DeviceCompat.isDebug() && DeviceCompat.isDesktop()){ + return new ArrayList<>(Arrays.asList( + Frankenstein.class, ApprenticeWitch.class, + FlowerSlime.class)); + } else { + return new ArrayList<>(Arrays.asList( + FlowerSlime.class, FlowerSlime.class, + FlowerSlime.class)); + } + case 2: return new ArrayList<>(Arrays.asList(FlowerSlime.class, FlowerSlime.class, FlowerSlime.class, Gnoll.class, Gnoll.class, diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/mobs/Mob.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/mobs/Mob.java index aa253cd2c..6b51f7772 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/mobs/Mob.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/mobs/Mob.java @@ -27,6 +27,7 @@ import static com.shatteredpixel.shatteredpixeldungeon.Difficulty.DifficultyCond import static com.shatteredpixel.shatteredpixeldungeon.Difficulty.DifficultyConduct.HARD; import static com.shatteredpixel.shatteredpixeldungeon.Difficulty.DifficultyConduct.NORMAL; import static com.shatteredpixel.shatteredpixeldungeon.Dungeon.hero; +import static com.shatteredpixel.shatteredpixeldungeon.Statistics.lanterfireactive; import com.shatteredpixel.shatteredpixeldungeon.Assets; import com.shatteredpixel.shatteredpixeldungeon.BGMPlayer; @@ -636,7 +637,8 @@ public abstract class Mob extends Char { @Override public int attackProc(Char enemy, int damage) { - if(Dungeon.isChallenged(DHXD)){ + //除了直接点击 布尔判定也应该生效 + if(Dungeon.isChallenged(DHXD)||lanterfireactive){ damageAttackProcLanterMob(); } @@ -660,25 +662,27 @@ public abstract class Mob extends Char { // boolean GhostQuestMob = this instanceof GreatCrab ||this instanceof GnollTrickster || this instanceof FetidRat; - //15%的老鼠 (-1) <85 - if (isHero && this instanceof Rat && one && hero.lanterfire < 85) ((Hero) enemy).damageLantern(1); - //25%的监狱守卫 (-1) <85 - if (isHero && this instanceof Guard && two && hero.lanterfire < 85) ((Hero) enemy).damageLantern(1); - //15%的豺狼萨满 (-2) <70 - if (isHero && this instanceof Shaman && one && hero.lanterfire < 70) ((Hero) enemy).damageLantern(2); - //50%的幽灵任务怪 (-5) <95 NZND - if (isHero && GhostQuestMob && four && hero.lanterfire < 95) ((Hero) enemy).damageLantern(5); + //15%的老鼠 (-1) <95 + if (isHero && this instanceof Rat && one && hero.lanterfire < 95) ((Hero) enemy).damageLantern(1); + //25%的监狱守卫 (-1) <90 + if (isHero && this instanceof Guard && two && hero.lanterfire < 90) ((Hero) enemy).damageLantern(1); + //15%的豺狼萨满 (-2) <80 + if (isHero && this instanceof Shaman && one && hero.lanterfire < 80) ((Hero) enemy).damageLantern(2); + //50%的幽灵任务怪 (-4) 均要扣减 + if (isHero && GhostQuestMob && four) ((Hero) enemy).damageLantern(4); //怨灵 75%的概率-6灯火 且必定死亡 if (isHero && this instanceof Wraith && three ){ ((Hero) enemy).damageLantern(6); this.die(true); } //新生火元素 25%的概率-6灯火 <80 - if (isHero && this instanceof Elemental.NewbornFireElemental && two && hero.lanterfire < 80 ) ((Hero) enemy).damageLantern(2); + if (isHero && this instanceof Elemental.NewbornFireElemental && two && hero.lanterfire < 80 ) ((Hero) enemy).damageLantern(6); //矿洞蜘蛛 15%的概率-3灯火 <70 if (isHero && this instanceof Wraith && one && hero.lanterfire < 70 ) ((Hero) enemy).damageLantern(3); //矮人术士 85%的概率-5灯火 <70 - if (isHero && this instanceof Warlock && five && hero.lanterfire < 50 ) ((Hero) enemy).damageLantern(5); + if (isHero && this instanceof Warlock && five && hero.lanterfire < 70 ) ((Hero) enemy).damageLantern(5); + //黑色怨灵 85%的概率-5灯火 <90 + if (isHero && this instanceof BlackHost && five && hero.lanterfire < 90 ) ((Hero) enemy).damageLantern(5); } diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/mobs/hollow/ApprenticeWitch.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/mobs/hollow/ApprenticeWitch.java new file mode 100644 index 000000000..d337b0b34 --- /dev/null +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/mobs/hollow/ApprenticeWitch.java @@ -0,0 +1,44 @@ +package com.shatteredpixel.shatteredpixeldungeon.actors.mobs.hollow; + +import com.shatteredpixel.shatteredpixeldungeon.actors.Char; +import com.shatteredpixel.shatteredpixeldungeon.actors.mobs.Mob; +import com.shatteredpixel.shatteredpixeldungeon.sprites.ApprenticeWitchSprite; +import com.watabou.utils.Random; + +public class ApprenticeWitch extends Mob { + + { + spriteClass = ApprenticeWitchSprite.class; + + baseSpeed = 1.2f; + HP = HT = 150; + defenseSkill = 24; + maxLvl = 35; + properties.add(Property.HOLLOW); + + properties.add(Property.ICY); + properties.add(Property.FIERY); + properties.add(Property.ELECTRIC); + } + +// @Override +// protected boolean act() { +// return super.act(); +// } + + @Override + public int damageRoll() { + return Random.NormalIntRange( 20, 34 ); + } + + @Override + public int attackSkill( Char target ) { + return 15; + } + + @Override + public int drRoll() { + return Random.NormalIntRange(5, 10); + } +} + diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/mobs/hollow/Frankenstein.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/mobs/hollow/Frankenstein.java new file mode 100644 index 000000000..4413ce567 --- /dev/null +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/mobs/hollow/Frankenstein.java @@ -0,0 +1,41 @@ +package com.shatteredpixel.shatteredpixeldungeon.actors.mobs.hollow; + +import com.shatteredpixel.shatteredpixeldungeon.actors.Char; +import com.shatteredpixel.shatteredpixeldungeon.actors.mobs.Mob; +import com.shatteredpixel.shatteredpixeldungeon.sprites.FrankensteinSprite; +import com.watabou.utils.Random; + +public class Frankenstein extends Mob { + + { + spriteClass = FrankensteinSprite.class; + + baseSpeed = 0.85f; + HP = HT = 90; + defenseSkill = 14; + maxLvl = 35; + properties.add(Char.Property.HOLLOW); + } + +// @Override +// protected boolean act() { +// return super.act(); +// } + + @Override + public int damageRoll() { + return Random.NormalIntRange( 15, 27 ); + } + + @Override + public int attackSkill( Char target ) { + return 15; + } + + @Override + public int drRoll() { + return 0; + } +} + + diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/mobs/spical/GooMob.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/mobs/spical/GooMob.java index ffa16e7ee..61e9e92da 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/mobs/spical/GooMob.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/mobs/spical/GooMob.java @@ -100,7 +100,7 @@ public class GooMob extends Mob { @Override public void add(Buff buff) { super.add(buff); - if (state == PASSIVE && buff.type == Buff.buffType.NEGATIVE && Dungeon.level.heroFOV[pos]){ + if (state == PASSIVE && buff.type == Buff.buffType.NEGATIVE){ state = HUNTING; } } diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/custom/dict/DictSpriteSheet.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/custom/dict/DictSpriteSheet.java index 70dc045a4..c370e1462 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/custom/dict/DictSpriteSheet.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/custom/dict/DictSpriteSheet.java @@ -1,6 +1,7 @@ package com.shatteredpixel.shatteredpixeldungeon.custom.dict; import com.shatteredpixel.shatteredpixeldungeon.Assets; +import com.shatteredpixel.shatteredpixeldungeon.sprites.ApprenticeWitchSprite; import com.shatteredpixel.shatteredpixeldungeon.sprites.BombGnollTricksterSprites; import com.shatteredpixel.shatteredpixeldungeon.sprites.BruteBotSprite; import com.shatteredpixel.shatteredpixeldungeon.sprites.ClearElementalSprites; @@ -9,7 +10,6 @@ import com.shatteredpixel.shatteredpixeldungeon.sprites.ColdRatSprite; import com.shatteredpixel.shatteredpixeldungeon.sprites.FireAcidicSprite; import com.shatteredpixel.shatteredpixeldungeon.sprites.FlameC01Sprite; import com.shatteredpixel.shatteredpixeldungeon.sprites.FlowerSlimeSprites; -import com.shatteredpixel.shatteredpixeldungeon.sprites.GooSprite; import com.shatteredpixel.shatteredpixeldungeon.sprites.IceFireScorpioSprite; import com.shatteredpixel.shatteredpixeldungeon.sprites.IceGolemSprite; import com.shatteredpixel.shatteredpixeldungeon.sprites.ItemSprite; @@ -93,7 +93,7 @@ public class DictSpriteSheet { case GnollF: return new SkullShamanSprite(); case Goo: - return new GooSprite(); + return new ApprenticeWitchSprite(); case GNOLL: return new Image(Assets.Sprites.GNOLL, 0, 0, 12, 15); case STX: diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/artifacts/ChaliceOfBlood.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/artifacts/ChaliceOfBlood.java index 87bde1bcc..c754add54 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/artifacts/ChaliceOfBlood.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/artifacts/ChaliceOfBlood.java @@ -85,7 +85,8 @@ public class ChaliceOfBlood extends Artifact { if (action.equals(AC_PRICK)){ - Statistics.ChaicBlood++; + //修复等级问题 2023 10 15 + Statistics.ChaicBlood = Math.min(Statistics.ChaicBlood + 1, 10); int damage = 3*(level()*level()); diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/lightblack/OilLantern.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/lightblack/OilLantern.java index c4371931e..06061793a 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/lightblack/OilLantern.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/lightblack/OilLantern.java @@ -3,6 +3,7 @@ package com.shatteredpixel.shatteredpixeldungeon.items.lightblack; import static com.shatteredpixel.shatteredpixeldungeon.Dungeon.hero; import com.shatteredpixel.shatteredpixeldungeon.Assets; +import com.shatteredpixel.shatteredpixeldungeon.Challenges; import com.shatteredpixel.shatteredpixeldungeon.Dungeon; import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Buff; import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.LighS; @@ -47,7 +48,13 @@ public class OilLantern extends Artifact { this.image = ItemSpriteSheet.LANTERNA; this.unique = true; updateSprite(); - charge = 100; + + int chCount = 0; + for (int ch : Challenges.MASKS){ + if ((Dungeon.challenges & ch) != 0) chCount++; + } + + charge = 100 - (chCount>=6 ? chCount*4 : 0); defaultAction = AC_LIGHT; } diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/weapon/melee/BloodthirstyThorn.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/weapon/melee/BloodthirstyThorn.java index 7fbf10c2e..643f984d9 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/weapon/melee/BloodthirstyThorn.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/weapon/melee/BloodthirstyThorn.java @@ -40,6 +40,7 @@ public class BloodthirstyThorn extends MeleeWeapon { hitSoundPitch = 0.9f; ACC = 1.75f; RCH=1; + tier=6; } @@ -48,7 +49,6 @@ public class BloodthirstyThorn extends MeleeWeapon { public boolean isUpgradable() { return false; } - public static final String AC_PRICK = "PRICK"; @Override @@ -235,16 +235,26 @@ public class BloodthirstyThorn extends MeleeWeapon { @Override public int min(int lvl) { - return 2 +lvl*2; + if (lvl > 14) { + return 0; + } + return 2 + lvl * 2; } @Override public int max(int lvl) { - return 6 + lvl*4; + if (lvl > 14) { + return 0; + } + return 6 + lvl * 4; } + @Override - public int STRReq(int lvl){ + public int STRReq(int lvl) { + if (lvl > 14) { + return lvl * 5; + } return 14; } diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/HollowLevel.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/HollowLevel.java new file mode 100644 index 000000000..b85f6943b --- /dev/null +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/HollowLevel.java @@ -0,0 +1,166 @@ +package com.shatteredpixel.shatteredpixeldungeon.levels; + +import com.shatteredpixel.shatteredpixeldungeon.Assets; +import com.shatteredpixel.shatteredpixeldungeon.Dungeon; +import com.shatteredpixel.shatteredpixeldungeon.actors.mobs.npcs.Wandmaker; +import com.shatteredpixel.shatteredpixeldungeon.levels.painters.Painter; +import com.shatteredpixel.shatteredpixeldungeon.levels.painters.PrisonPainter; +import com.shatteredpixel.shatteredpixeldungeon.levels.rooms.Room; +import com.shatteredpixel.shatteredpixeldungeon.levels.traps.AlarmTrap; +import com.shatteredpixel.shatteredpixeldungeon.levels.traps.BurningTrap; +import com.shatteredpixel.shatteredpixeldungeon.levels.traps.ChillingTrap; +import com.shatteredpixel.shatteredpixeldungeon.levels.traps.ConfusionTrap; +import com.shatteredpixel.shatteredpixeldungeon.levels.traps.FlockTrap; +import com.shatteredpixel.shatteredpixeldungeon.levels.traps.GatewayTrap; +import com.shatteredpixel.shatteredpixeldungeon.levels.traps.GeyserTrap; +import com.shatteredpixel.shatteredpixeldungeon.levels.traps.GrippingTrap; +import com.shatteredpixel.shatteredpixeldungeon.levels.traps.OozeTrap; +import com.shatteredpixel.shatteredpixeldungeon.levels.traps.PoisonDartTrap; +import com.shatteredpixel.shatteredpixeldungeon.levels.traps.ShockingTrap; +import com.shatteredpixel.shatteredpixeldungeon.levels.traps.SummoningTrap; +import com.shatteredpixel.shatteredpixeldungeon.levels.traps.TeleportationTrap; +import com.shatteredpixel.shatteredpixeldungeon.levels.traps.ToxicTrap; +import com.shatteredpixel.shatteredpixeldungeon.messages.Messages; +import com.shatteredpixel.shatteredpixeldungeon.tiles.DungeonTilemap; +import com.watabou.noosa.Group; +import com.watabou.noosa.Halo; +import com.watabou.noosa.audio.Music; +import com.watabou.noosa.particles.Emitter; +import com.watabou.utils.PointF; +import com.watabou.utils.Random; + +import java.util.ArrayList; + +public class HollowLevel extends RegularLevel { + + { + color1 = 0x6a723d; + color2 = 0x88924c; + } + + @Override + public void playLevelMusic() { + Music.INSTANCE.playTracks( + new String[]{Assets.Music.PRISON_1, Assets.Music.PRISON_2, Assets.Music.PRISON_2}, + new float[]{1, 1, 0.5f}, + false); + } + + @Override + protected ArrayList initRooms() { + return Wandmaker.Quest.spawnRoom(super.initRooms()); + } + + @Override + protected int standardRooms(boolean forceMax) { + if (forceMax) return 6; + //5 to 6, average 5.5 + return 5+ Random.chances(new float[]{1, 1}); + } + + @Override + protected int specialRooms(boolean forceMax) { + if (forceMax) return 3; + //1 to 3, average 2.0 + return 1+Random.chances(new float[]{1, 3, 1}); + } + + @Override + protected Painter painter() { + return new PrisonPainter() + .setWater(feeling == Level.Feeling.WATER ? 0.90f : 0.30f, 4) + .setGrass(feeling == Level.Feeling.GRASS ? 0.80f : 0.20f, 3) + .setTraps(nTraps(), trapClasses(), trapChances()); + } + + @Override + public String tilesTex() { + return Assets.Environment.TILES_HOLLOW; + } + + @Override + public String waterTex() { + return Assets.Environment.WATER_HOLLOW; + } + + @Override + protected Class[] trapClasses() { + return new Class[]{ + ChillingTrap.class, ShockingTrap.class, ToxicTrap.class, BurningTrap.class, PoisonDartTrap.class, + AlarmTrap.class, OozeTrap.class, GrippingTrap.class, + ConfusionTrap.class, FlockTrap.class, SummoningTrap.class, TeleportationTrap.class, GatewayTrap.class, GeyserTrap.class }; + } + + @Override + protected float[] trapChances() { + return new float[]{ + 4, 4, 4, 4, 4, + 2, 2, 2, + 1, 1, 1, 1, 1, 1 }; + } + + @Override + public String tileName( int tile ) { + switch (tile) { + case Terrain.WATER: + return Messages.get(PrisonLevel.class, "water_name"); + default: + return super.tileName( tile ); + } + } + + @Override + public String tileDesc(int tile) { + switch (tile) { + case Terrain.EMPTY_DECO: + return Messages.get(PrisonLevel.class, "empty_deco_desc"); + case Terrain.BOOKSHELF: + return Messages.get(PrisonLevel.class, "bookshelf_desc"); + default: + return super.tileDesc( tile ); + } + } + + @Override + public Group addVisuals() { + super.addVisuals(); + addPrisonVisuals(this, visuals); + return visuals; + } + + public static void addPrisonVisuals(Level level, Group group){ + for (int i=0; i < level.length(); i++) { + if (level.map[i] == Terrain.WALL_DECO) { + group.add( new PumpLanter( i ) ); + } + } + } + + public static class PumpLanter extends Emitter { + + private int pos; + + public PumpLanter( int pos ) { + super(); + + this.pos = pos; + + PointF p = DungeonTilemap.tileCenterToWorld( pos ); +// for (int i=0; i){ +// +// } +// pos( p.x - 4, p.y + 2, 2, 0 ); +// +// pour( FlameParticle.FACTORY, 0.15f ); + + add( new Halo( 12, 0xFFa500, 0.3f ).point( p.x, p.y + 1 ) ); + } + + @Override + public void update() { + if (visible == (pos < Dungeon.level.heroFOV.length && Dungeon.level.heroFOV[pos])) { + super.update(); + } + } + } +} diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/scenes/InterlevelScene.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/scenes/InterlevelScene.java index 5604f3e94..af2bdfaf4 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/scenes/InterlevelScene.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/scenes/InterlevelScene.java @@ -178,6 +178,7 @@ public class InterlevelScene extends PixelScene { else if (loadingDepth <= 25) loadingAsset = Assets.Interfaces.LOADING_HALLS; else loadingAsset = Assets.Interfaces.SHADOW; + //场景过渡速度 //本地调试+桌面 if (DeviceCompat.isDebug() && DeviceCompat.isDesktop()){ fadeTime = 0.1f; diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/sprites/ApprenticeWitchSprite.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/sprites/ApprenticeWitchSprite.java new file mode 100644 index 000000000..086685248 --- /dev/null +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/sprites/ApprenticeWitchSprite.java @@ -0,0 +1,30 @@ +package com.shatteredpixel.shatteredpixeldungeon.sprites; + +import com.shatteredpixel.shatteredpixeldungeon.Assets; +import com.watabou.noosa.TextureFilm; + +public class ApprenticeWitchSprite extends MobSprite { + + public ApprenticeWitchSprite() { + super(); + + texture( Assets.Sprites.APWHEEL ); + + TextureFilm frames = new TextureFilm( texture, 16, 16 ); + + idle = new Animation( 6, true ); + idle.frames( frames, 0, 1, 2, 3, 2 ,1 ); + + run = new Animation( 12, true ); + run.frames( frames, 14,15,16,17 ); + + attack = new Animation( 18, false ); + attack.frames( frames, 4,5,6,7,8,9,0 ); + + die = new Animation( 18, false ); + die.frames( frames, 10, 12, 13 ); + + play( idle ); + } + +} diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/sprites/FrankensteinSprite.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/sprites/FrankensteinSprite.java new file mode 100644 index 000000000..afa276e39 --- /dev/null +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/sprites/FrankensteinSprite.java @@ -0,0 +1,32 @@ +package com.shatteredpixel.shatteredpixeldungeon.sprites; + +import com.shatteredpixel.shatteredpixeldungeon.Assets; +import com.watabou.noosa.MovieClip; +import com.watabou.noosa.TextureFilm; + +public class FrankensteinSprite extends MobSprite { + + public FrankensteinSprite() { + super(); + + texture( Assets.Sprites.ZOMBIE ); + + TextureFilm frames = new TextureFilm( texture, 16, 20 ); + + idle = new MovieClip.Animation( 2, true ); + idle.frames( frames, 0, 1 ); + + run = new MovieClip.Animation( 9, true ); + run.frames( frames, 2,3,4,5 ); + + attack = new MovieClip.Animation( 6, false ); + attack.frames( frames, 6,7,8,9,0 ); + + die = new MovieClip.Animation( 6, false ); + die.frames( frames, 10, 12, 13 ); + + play( idle ); + } + +} + diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/ui/changelist/mlpd/vM0_6_4_P_Changes.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/ui/changelist/mlpd/vM0_6_4_P_Changes.java index 1ce20c257..2e837ac14 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/ui/changelist/mlpd/vM0_6_4_P_Changes.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/ui/changelist/mlpd/vM0_6_4_P_Changes.java @@ -9,13 +9,17 @@ import com.shatteredpixel.shatteredpixeldungeon.effects.PasswordBadgeBanner; import com.shatteredpixel.shatteredpixeldungeon.messages.Messages; import com.shatteredpixel.shatteredpixeldungeon.scenes.ChangesScene; import com.shatteredpixel.shatteredpixeldungeon.scenes.PixelScene; +import com.shatteredpixel.shatteredpixeldungeon.sprites.ApprenticeWitchSprite; import com.shatteredpixel.shatteredpixeldungeon.sprites.CrivusFruitsSprite; +import com.shatteredpixel.shatteredpixeldungeon.sprites.DM300AttackSprite; import com.shatteredpixel.shatteredpixeldungeon.sprites.FireDragonSprite; import com.shatteredpixel.shatteredpixeldungeon.sprites.FlowerSlimeSprites; +import com.shatteredpixel.shatteredpixeldungeon.sprites.FrankensteinSprite; import com.shatteredpixel.shatteredpixeldungeon.sprites.GhostSprite; import com.shatteredpixel.shatteredpixeldungeon.sprites.IceSlowGirlSprites; import com.shatteredpixel.shatteredpixeldungeon.sprites.ItemSprite; import com.shatteredpixel.shatteredpixeldungeon.sprites.ItemSpriteSheet; +import com.shatteredpixel.shatteredpixeldungeon.sprites.RedNecromancerSprite; import com.shatteredpixel.shatteredpixeldungeon.sprites.SakaFishBossSprites; import com.shatteredpixel.shatteredpixeldungeon.sprites.SalamanderSprites; import com.shatteredpixel.shatteredpixeldungeon.sprites.ShopkeeperSprite; @@ -35,27 +39,95 @@ public class vM0_6_4_P_Changes { add_v0_6_54_Changes(changeInfos); } public static void add_v0_6_56_Changes( ArrayList changeInfos ) { - ChangeInfo changes = new ChangeInfo("Coming Soon V0.6.5.0-Alpha7", true, ""); + ChangeInfo changes = new ChangeInfo("Coming Soon V0.6.6.0", true, ""); changes.hardlight(Window.CBLACK); changeInfos.add(changes); -// changes.addButton(new ChangeButton(new RedNecromancerSprite(), ("BossRush2.0"), -// ("地牢发生了翻天覆地的改变,一切的矛头指向了死灵军团……"))); -// -// Image s = new DM300AttackSprite(); -// s.scale.set(PixelScene.align(0.74f)); -// changes.addButton(new ChangeButton(s, ("DM-ZERO"), -// ("时间在这里停止流动,与DMZERO正面对决的即将到来"))); + changes = new ChangeInfo("计划", false, null); + changes.hardlight(Window.CBLACK); + changeInfos.add(changes); + + changes.addButton(new ChangeButton(new RedNecromancerSprite(), ("BossRush2.0"), + ("地牢发生了翻天覆地的改变,一切的矛头指向了死灵军团……"))); + + changes.addButton(new ChangeButton(new Image(Assets.Interfaces.HAICONS, 16, 16, 16, 16), ("黄金时代改动预告"), + ("黄金沉入黄沙,化为金水流入地下。\n" + + "黑暗的地牢就此发出了金色的光芒。\n" + + "树影融入黑夜,\n" + + "财富在此长眠,\n" + + "流沙,黄金与鲜血交织着,\n" + + "正如一首金色的华尔兹。\n" + + "冒险家,地牢与财富正在等着你。\n" + + "当然,你的舞伴可并不友好......\n" + + "黄金时代即将重做。\n" + + "策划by QinYue 不接入游戏主线剧情"))); + + Image i = new Image("sprites/boss/fireDragon.png", 0, 0, 24, 24); + i.scale.set(PixelScene.align(0.74f)); + changes.addButton(new ChangeButton(i, ("熔岩火龙"), + ("丛林暴乱的真相"))); + + changes.addButton(new ChangeButton(new ItemSprite(ItemSpriteSheet.CHALLANEESICON_14), ("寒冷系统V3.0"), + ("寒冷系统将会彻底实装,敬请期待冬季版本"))); + + changes = new ChangeInfo("改进", false, null); + changes.hardlight(Window.CBLACK); + changeInfos.add(changes); + + changes.addButton(new ChangeButton(new CrivusFruitsSprite(), ("克里弗斯之果重做"), + ("作为MLPD替代Goo的Boss,它还有很长的路要走。"))); + + changes.addButton(new ChangeButton(Icons.get(Icons.CHANGES), ("底层迭代"), + ("魔绫的底层版本现在是1.2.3,然而经过一年的维护,我们必须再一次进行底层同步。\n\n" + + "至于迭代哪个破碎,敬请期待冬季版本。"))); + + + Image s = new DM300AttackSprite(); + s.scale.set(PixelScene.align(0.74f)); + changes.addButton(new ChangeButton(s, ("DM-ZERO"), + ("时间在这里停止流动,与DMZERO正面对决的即将到来"))); Image c = new IceSlowGirlSprites(); c.scale.set(PixelScene.align(0.74f)); changes.addButton(new ChangeButton(c, ("冰雪魔女重做"), ("石碑上记录了有关于她的一切,她的过去,她的现在,她的未来。而当你与她对峙时,你是否能够看清她的真实面目?"))); - Image i = new Image("sprites/boss/fireDragon.png", 0, 0, 24, 24); - i.scale.set(PixelScene.align(0.74f)); - changes.addButton(new ChangeButton(i, ("熔岩火龙"), - ("丛林暴乱的真相"))); + + + changes = new ChangeInfo("v0.6.5.0-Alpha6-Patch6", true, ""); + changes.hardlight(Window.TITLE_COLOR); + changeInfos.add(changes); + + changes = new ChangeInfo("预载", false, null); + changes.hardlight(Window.CBLACK); + changeInfos.add(changes); + + changes.addButton(new ChangeButton(new ApprenticeWitchSprite(), ("新中立怪物:见习魔女"), + ("魔法学院的劣等生,见习中的魔女。\n\n该数据已预载,将在万圣节活动启用。"))); + + changes.addButton(new ChangeButton(new FrankensteinSprite(), ("新怪物:未尽梦偶"), + ("它在寻找它的创造者,以及,撕碎所有拥有生命的气息。\n\n该数据已预载,将在万圣节活动启用。"))); + + changes = new ChangeInfo("新内容", false, null); + changes.hardlight(Window.GREEN_COLOR); + changeInfos.add(changes); + + changes.addButton(new ChangeButton(new ItemSprite(ItemSpriteSheet.LANTERNB), ("灯火前路:v3.2"), + ("1.现在灯火在超过6挑后相当于一个强制挑战,\n\n" + + "2.你的灯火和提灯在开局就会有扣减,但并不会影响你在第一大层。\n\n" + + "3.修复了怪物不扣减灯火的严重问题,这是自灯火系统来一直尚未修复的问题"))); + + changes = new ChangeInfo("改动", false, null); + changes.hardlight(Window.CYELLOW); + changeInfos.add(changes); + + changes.addButton(new ChangeButton(new ItemSprite(ItemSpriteSheet.DG25), ("开发者模式v0.7"), + ("在开发模式中,支离破碎第1层是测试怪组。"))); + + changes.addButton(new ChangeButton(new ItemSprite(ItemSpriteSheet.BloodDied), "嗜血荆棘", + "1.修复在特殊情况下献祭的问题,现在最多献祭到+10\n\n" + + "2.如果仍然在卡荆棘的问题,你将会在+14以上后(不包括+14)看见0伤害,且力量x5的下水道版本荆棘的处罚机制。")); + changes = new ChangeInfo("v0.6.5.0-Alpha6-Patch5", true, ""); changes.hardlight(Window.TITLE_COLOR); diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/windows/WndInfoMob.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/windows/WndInfoMob.java index 5f54d1ad6..4c27b8657 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/windows/WndInfoMob.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/windows/WndInfoMob.java @@ -154,6 +154,8 @@ public class WndInfoMob extends WndTitledMessage { level = Messages.get(WndInfoMob.class,"boss"); } else if (mob.properties.contains(Char.Property.MINIBOSS)){ level = Messages.get(WndInfoMob.class,"miniboss"); + } else if (mob.properties.contains(Char.Property.HOLLOW)){ + level = Messages.get(WndInfoMob.class,"hollow"); } else if (mob.properties.contains(Char.Property.HUNTER)){ level = Messages.get(WndInfoMob.class,"hunter"); } else if (mob.properties.contains(Char.Property.ABYSS)){