diff --git a/build.gradle b/build.gradle index bdc7148a9..9649095aa 100644 --- a/build.gradle +++ b/build.gradle @@ -18,8 +18,8 @@ allprojects { appName = 'Magic Ling Pixel Dungeon' appPackageName = 'com.ansdomagiclingpixeldungeon.ling' - appVersionCode =908500 - appVersionName = '0.6.5.0-Alpha6.5' + appVersionCode =908800 + appVersionName = '0.6.5.0-Alpha6.8' appJavaCompatibility = JavaVersion.VERSION_11 diff --git a/core/src/main/assets/interfaces/chrome.png b/core/src/main/assets/interfaces/chrome.png index 8d65b5c64..8f361309a 100644 Binary files a/core/src/main/assets/interfaces/chrome.png and b/core/src/main/assets/interfaces/chrome.png differ diff --git a/core/src/main/assets/interfaces/status_pane.png b/core/src/main/assets/interfaces/status_pane.png index c7afeede2..9bbd51def 100644 Binary files a/core/src/main/assets/interfaces/status_pane.png and b/core/src/main/assets/interfaces/status_pane.png differ diff --git a/core/src/main/assets/messages/misc/misc.properties b/core/src/main/assets/messages/misc/misc.properties index 796f6c55b..4dd9cb4bb 100644 --- a/core/src/main/assets/messages/misc/misc.properties +++ b/core/src/main/assets/messages/misc/misc.properties @@ -347,7 +347,7 @@ challenges.icedied = 雪虐风饕(未完成) challenges.icedied_desc=很显然,地牢的雪越下越大了,在这严寒里面,生存的法则将进一步让我们活得更久。\n篝火房间一旦被激活不再无限,变成40回合的寒冷抑制,商人会贩卖更多特殊物品。 challenges.morelevel=变幻莫测 -challenges.morelevel_desc=地牢在时间的长河中渐渐的诞生了更多地形,这次探索地牢谁知道能遇到什么?\n\nA.新增2种全新地形感知,1种特定地形感知。\n\nB.2场迷你Boss遭遇战,未来会更多。\n\nC.地牢怪物生成更多\n\n_地牢环境已发生改变,请小心应对!!!_\n\n(除Boss层,每层必定触发地形感知,且全部均为大型地形)。 +challenges.morelevel_desc=地牢在时间的长河中渐渐的诞生了更多地形,这次探索地牢谁知道能遇到什么?\n\nA.新增3种全新地形感知,1种特定地形感知。\n\nB.2场迷你Boss遭遇战,未来会更多。\n\nC.地牢怪物生成更多\n\n_地牢环境已发生改变,请小心应对!!!_\n\n(除Boss层,每层必定触发地形感知,且全部均为大型地形)。 challenges.dhxd =灯火前路 challenges.dhxd_desc= 灯火指引着前进的道路,提灯引路,灯火前行! \n\n此为三挑以上的特殊机制,但你也可以直接开启它!\n\n1.追加灯火祝福和魔女诅咒机制,灯火会随着深入楼层进行降低\n2.在较低的灯火下死亡会精神崩溃,诞生自己的暗影。\n3.追加提灯和灯油,合理使用这些道具,让自己能在灯火祝福中活下去!如果不幸遭到魔女的诅咒,也不会让你陷入绝境。\n\n灯火不灭,希望仍在,提灯引路,灯火前行! diff --git a/core/src/main/assets/messages/windows/windows.properties b/core/src/main/assets/messages/windows/windows.properties index 960590d40..cd8e1b121 100644 --- a/core/src/main/assets/messages/windows/windows.properties +++ b/core/src/main/assets/messages/windows/windows.properties @@ -208,7 +208,7 @@ windows.wndgameinprogress.gamegold=游戏金币: windows.wndgameinprogress.gamenayzi=奈亚大亨: windows.wndgameinprogress.gamenayzis=\n一局游戏内购买7次终端的物品,即可永久让奈亚入驻0层。 windows.wndgameinprogress.gamemimic=拟态猎杀: -windows.wndgameinprogress.gameinof=注:类型不同的种子所生成的地牢物品规则将有所不同。\n_B类_为开启_独挡一面_挑战后的种子。\n_C类_:支离破碎&基因突变\n_D类_:BossRush\n\n(种子判定优先级:D>B>C>A) +windows.wndgameinprogress.gameinof=注:类型不同的种子所生成的地牢物品规则将有所不同。A类就是没有开启_变幻莫测_的种子\n_B类_为开启_变幻莫测_挑战后的种子。\n特别类:BossRush\n\n(种子判定优先级:BossRush>B>A) windows.wndgameinprogress.title=%1$d级%2$s windows.wndgameinprogress.challenges=挑战 diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/Badges.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/Badges.java index 109b2c02a..8fe412a3a 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/Badges.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/Badges.java @@ -394,7 +394,7 @@ public class Badges { badge = Badge.HIGH_SCORE_4; local.add( badge ); } - if (score >= SSSP_SCORE * chalMultiplier * (amuletObtained ? 0.7 : 5)) { + if (score >= SSSP_SCORE * chalMultiplier * (amuletObtained ? 0.7 : 4.5)) { badge = Badge.HIGH_SCORE_5; local.add( badge ); } diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/mobs/OldDM300.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/mobs/OldDM300.java index d7e3a955d..c93212185 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/mobs/OldDM300.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/mobs/OldDM300.java @@ -22,6 +22,7 @@ package com.shatteredpixel.shatteredpixeldungeon.actors.mobs; import static com.shatteredpixel.shatteredpixeldungeon.BGMPlayer.playBGM; +import static com.shatteredpixel.shatteredpixeldungeon.Challenges.MOREROOM; import com.shatteredpixel.shatteredpixeldungeon.Assets; import com.shatteredpixel.shatteredpixeldungeon.Dungeon; @@ -39,6 +40,7 @@ import com.shatteredpixel.shatteredpixeldungeon.effects.particles.ElmoParticle; import com.shatteredpixel.shatteredpixeldungeon.items.Generator; import com.shatteredpixel.shatteredpixeldungeon.levels.Level; import com.shatteredpixel.shatteredpixeldungeon.levels.Terrain; +import com.shatteredpixel.shatteredpixeldungeon.levels.traps.AlarmTrap; import com.shatteredpixel.shatteredpixeldungeon.messages.Messages; import com.shatteredpixel.shatteredpixeldungeon.scenes.GameScene; import com.shatteredpixel.shatteredpixeldungeon.sprites.CharSprite; @@ -86,6 +88,11 @@ public class OldDM300 extends DM200 { LockedFloor lock = Dungeon.hero.buff(LockedFloor.class); if(lock == null && !seenBefore && Dungeon.level.heroFOV[pos]){ Dungeon.level.seal(); + if(Dungeon.isChallenged(MOREROOM)) { + AlarmTrap alarmTrap = new AlarmTrap(); + alarmTrap.pos = pos; + alarmTrap.activate(); + } } GameScene.add( Blob.seed( pos, 30, ToxicGas.class ) ); @@ -176,6 +183,7 @@ public class OldDM300 extends DM200 { super.damage(dmg, src); if (state == PASSIVE) { state = HUNTING; + notice(); } LockedFloor lock = Dungeon.hero.buff(LockedFloor.class); if (lock != null && !isImmune(src.getClass())) lock.addTime(dmg*1.5f); 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 1c59974e9..7e7b2e992 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 @@ -13,6 +13,7 @@ import com.shatteredpixel.shatteredpixeldungeon.actors.mobs.Goo; import com.shatteredpixel.shatteredpixeldungeon.actors.mobs.Mob; import com.shatteredpixel.shatteredpixeldungeon.effects.Speck; import com.shatteredpixel.shatteredpixeldungeon.items.quest.GooBlob; +import com.shatteredpixel.shatteredpixeldungeon.levels.traps.AlarmTrap; import com.shatteredpixel.shatteredpixeldungeon.mechanics.Ballistica; import com.shatteredpixel.shatteredpixeldungeon.messages.Messages; import com.shatteredpixel.shatteredpixeldungeon.scenes.GameScene; @@ -83,6 +84,11 @@ public class GooMob extends Mob { if(lock == null && !seenBefore && Dungeon.level.heroFOV[pos]){ Dungeon.level.seal(); seenBefore = false; + if(Dungeon.isChallenged(MOREROOM)) { + AlarmTrap alarmTrap = new AlarmTrap(); + alarmTrap.pos = pos; + alarmTrap.activate(); + } } if (Dungeon.level.water[pos] && HP < HT) { @@ -212,6 +218,7 @@ public class GooMob extends Mob { if (state == PASSIVE) { state = HUNTING; + notice(); } if ((HP*2 <= HT) && !bleeding){ diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/CavesLevel.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/CavesLevel.java index a48b67abe..e5cbc8f73 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/CavesLevel.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/CavesLevel.java @@ -120,12 +120,12 @@ public class CavesLevel extends RegularLevel { for (int i = 0; i < map.length; i++) { if (map[i] == Terrain.EMBERS) { // 将 EMPTY_DECO 地块改为新地形 - set(i, Terrain.STATUE); + set(i, Terrain.LOCKED_EXIT); GameScene.updateMap(i); // 更新地图显示 Camera.main.shake(4f,7f); - } else if(hero.buff(LockedFloor.class) == null && map[i] == Terrain.STATUE) { + } else if(hero.buff(LockedFloor.class) == null && map[i] == Terrain.LOCKED_EXIT) { // 将 CHASM 地块改为新地形 - set(i, Terrain.EMPTY); + set(i, Terrain.EMBERS); GameScene.updateMap(i); // 更新地图显示 GameScene.flash(Window.WATA_COLOR); } diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/RegularLevel.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/RegularLevel.java index a5bae94b9..88735f2c7 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/RegularLevel.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/RegularLevel.java @@ -61,14 +61,15 @@ 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.HealWellRoom; +import com.shatteredpixel.shatteredpixeldungeon.levels.rooms.special.IdenityRoom; 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; import com.shatteredpixel.shatteredpixeldungeon.levels.rooms.special.PitRoom; +import com.shatteredpixel.shatteredpixeldungeon.levels.rooms.special.RandomRoom; import com.shatteredpixel.shatteredpixeldungeon.levels.rooms.special.ShopRoom; import com.shatteredpixel.shatteredpixeldungeon.levels.rooms.special.SpecialRoom; import com.shatteredpixel.shatteredpixeldungeon.levels.rooms.standard.AquariumRoom; @@ -309,9 +310,9 @@ public abstract class RegularLevel extends Level { specials++; } if(feeling == Feeling.THREEWELL){ - initRooms.add(new MagicWellRoom()); - initRooms.add(new SecretWellRoom()); - initRooms.add(new MagicWellRoom()); + initRooms.add(new HealWellRoom()); + initRooms.add(new RandomRoom()); + initRooms.add(new IdenityRoom()); } if(feeling == Feeling.LINKROOM){ diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/SewerLevel.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/SewerLevel.java index e968bf526..4cd86be72 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/SewerLevel.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/SewerLevel.java @@ -102,14 +102,15 @@ public class SewerLevel extends RegularLevel { public void updateChasmTerrain() { for (int i = 0; i < map.length; i++) { - if (map[i] == Terrain.EMPTY_DECO) { + if (map[i] == Terrain.EMBERS) { // 将 EMPTY_DECO 地块改为新地形 - set(i, Terrain.STATUE); + set(i, Terrain.LOCKED_EXIT); GameScene.updateMap(i); // 更新地图显示 Camera.main.shake(3f,6f); - } else if(hero.buff(LockedFloor.class) == null && map[i] == Terrain.STATUE) { + + } else if(hero.buff(LockedFloor.class) == null && map[i] == Terrain.LOCKED_EXIT) { // 将 CHASM 地块改为新地形 - set(i, Terrain.WATER); + set(i, Terrain.EMBERS); GameScene.updateMap(i); // 更新地图显示 } for (Mob m : Dungeon.level.mobs){ @@ -120,7 +121,7 @@ public class SewerLevel extends RegularLevel { playBGM(Assets.BGM_BOSSA, true); } } - GameScene.flash(Window.CBLACK); + GameScene.flash(Window.ANSDO_COLOR); } } diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/rooms/secret/SecretWellRoom.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/rooms/secret/SecretWellRoom.java index 1541305d9..fb57ee121 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/rooms/secret/SecretWellRoom.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/rooms/secret/SecretWellRoom.java @@ -23,7 +23,6 @@ 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; @@ -34,7 +33,7 @@ import com.watabou.utils.Random; public class SecretWellRoom extends SecretRoom { private static final Class[] WATERS = - {WaterOfAwareness.class, WaterOfHealth.class, WaterOfTransmutation.class}; + {WaterOfAwareness.class, WaterOfHealth.class}; @Override public boolean canConnect(Point p) { diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/rooms/special/HealWellRoom.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/rooms/special/HealWellRoom.java new file mode 100644 index 000000000..4caba9e13 --- /dev/null +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/rooms/special/HealWellRoom.java @@ -0,0 +1,37 @@ +package com.shatteredpixel.shatteredpixeldungeon.levels.rooms.special; + +import com.shatteredpixel.shatteredpixeldungeon.actors.blobs.WaterOfHealth; +import com.shatteredpixel.shatteredpixeldungeon.actors.blobs.WellWater; +import com.shatteredpixel.shatteredpixeldungeon.levels.Level; +import com.shatteredpixel.shatteredpixeldungeon.levels.Terrain; +import com.shatteredpixel.shatteredpixeldungeon.levels.painters.Painter; +import com.watabou.utils.Point; +import com.watabou.utils.Random; + +public class HealWellRoom extends SpecialRoom { + + private static final Class[] WATERS = + {WaterOfHealth.class}; + + public Class overrideWater = null; + + public void paint( Level level ) { + + Painter.fill( level, this, Terrain.WALL ); + Painter.fill( level, this, 1, Terrain.EMPTY ); + + Point c = center(); + Painter.set( level, c.x, c.y, Terrain.WELL ); + + @SuppressWarnings("unchecked") + Class waterClass = + overrideWater != null ? + overrideWater : + (Class) Random.element( WATERS ); + + + WellWater.seed(c.x + level.width() * c.y, 1, waterClass, level); + + entrance().set( Door.Type.REGULAR ); + } +} diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/rooms/special/IdenityRoom.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/rooms/special/IdenityRoom.java new file mode 100644 index 000000000..59d060bd1 --- /dev/null +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/rooms/special/IdenityRoom.java @@ -0,0 +1,40 @@ +package com.shatteredpixel.shatteredpixeldungeon.levels.rooms.special; + +import com.shatteredpixel.shatteredpixeldungeon.actors.blobs.WaterOfAwareness; +import com.shatteredpixel.shatteredpixeldungeon.actors.blobs.WellWater; +import com.shatteredpixel.shatteredpixeldungeon.levels.Level; +import com.shatteredpixel.shatteredpixeldungeon.levels.Terrain; +import com.shatteredpixel.shatteredpixeldungeon.levels.painters.Painter; +import com.shatteredpixel.shatteredpixeldungeon.levels.rooms.Room; +import com.watabou.utils.Point; +import com.watabou.utils.Random; + +public class IdenityRoom extends SpecialRoom { + + private static final Class[] WATERS = + {WaterOfAwareness.class}; + + public Class overrideWater = null; + + public void paint( Level level ) { + + Painter.fill( level, this, Terrain.WALL ); + Painter.fill( level, this, 1, Terrain.EMPTY ); + + Point c = center(); + Painter.set( level, c.x, c.y, Terrain.WELL ); + + @SuppressWarnings("unchecked") + Class waterClass = + overrideWater != null ? + overrideWater : + (Class) Random.element( WATERS ); + + + WellWater.seed(c.x + level.width() * c.y, 1, waterClass, level); + + entrance().set( Room.Door.Type.REGULAR ); + } +} + + diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/rooms/special/MagicWellRoom.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/rooms/special/MagicWellRoom.java index 3ab660704..384fc5fe7 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/rooms/special/MagicWellRoom.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/rooms/special/MagicWellRoom.java @@ -23,7 +23,6 @@ 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; @@ -34,7 +33,7 @@ import com.watabou.utils.Random; public class MagicWellRoom extends SpecialRoom { private static final Class[] WATERS = - {WaterOfAwareness.class, WaterOfHealth.class, WaterOfTransmutation.class}; + {WaterOfAwareness.class, WaterOfHealth.class}; public Class overrideWater = null; diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/rooms/special/RandomRoom.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/rooms/special/RandomRoom.java new file mode 100644 index 000000000..486b41997 --- /dev/null +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/rooms/special/RandomRoom.java @@ -0,0 +1,39 @@ +package com.shatteredpixel.shatteredpixeldungeon.levels.rooms.special; + +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; +import com.shatteredpixel.shatteredpixeldungeon.levels.painters.Painter; +import com.shatteredpixel.shatteredpixeldungeon.levels.rooms.Room; +import com.watabou.utils.Point; +import com.watabou.utils.Random; + +public class RandomRoom extends SpecialRoom { + + private static final Class[] WATERS = + {WaterOfTransmutation.class}; + + public Class overrideWater = null; + + public void paint( Level level ) { + + Painter.fill( level, this, Terrain.WALL ); + Painter.fill( level, this, 1, Terrain.EMPTY ); + + Point c = center(); + Painter.set( level, c.x, c.y, Terrain.WELL ); + + @SuppressWarnings("unchecked") + Class waterClass = + overrideWater != null ? + overrideWater : + (Class) Random.element( WATERS ); + + + WellWater.seed(c.x + level.width() * c.y, 1, waterClass, level); + + entrance().set( Room.Door.Type.REGULAR ); + } +} + diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/rooms/standard/GooRoom.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/rooms/standard/GooRoom.java index 410a06b49..2a4678439 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/rooms/standard/GooRoom.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/rooms/standard/GooRoom.java @@ -53,7 +53,7 @@ public class GooRoom extends StandardRoom { public void paint( Level level ) { Painter.fill( level, this, Terrain.WALL ); - Painter.fill( level, this, 1, Terrain.TRAP ); + Painter.fill( level, this, 1, Terrain.EMBERS ); Painter.fill( level, this, 2, Terrain.WATER ); Point c = center(); @@ -62,7 +62,6 @@ public class GooRoom extends StandardRoom { for (Door door : connected.values()) { door.set( Door.Type.REGULAR ); - Painter.drawInside( level, this, door, 1, Terrain.EMPTY ); } for(Point p : getPoints()) { @@ -72,7 +71,7 @@ public class GooRoom extends StandardRoom { } } - Painter.drawCircle(level, c, 7, Terrain.EMPTY_DECO); + Painter.drawCircle(level, c, 7, Terrain.WATER); Painter.drawCircle(level, c, 5, Terrain.EMPTY_SP); Painter.drawCircle(level, c, 2, Terrain.WATER); diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/rooms/standard/NukeRoom.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/rooms/standard/NukeRoom.java new file mode 100644 index 000000000..ffa8ea5d1 --- /dev/null +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/rooms/standard/NukeRoom.java @@ -0,0 +1,84 @@ +package com.shatteredpixel.shatteredpixeldungeon.levels.rooms.standard; + +import com.shatteredpixel.shatteredpixeldungeon.items.Heap; +import com.shatteredpixel.shatteredpixeldungeon.items.Item; +import com.shatteredpixel.shatteredpixeldungeon.items.bombs.Firebomb; +import com.shatteredpixel.shatteredpixeldungeon.items.bombs.ShrapnelBomb; +import com.shatteredpixel.shatteredpixeldungeon.levels.Level; +import com.shatteredpixel.shatteredpixeldungeon.levels.Terrain; +import com.shatteredpixel.shatteredpixeldungeon.levels.features.Maze; +import com.shatteredpixel.shatteredpixeldungeon.levels.painters.Painter; +import com.shatteredpixel.shatteredpixeldungeon.levels.traps.ExplosiveTrap; +import com.watabou.utils.PathFinder; +import com.watabou.utils.Point; +import com.watabou.utils.Random; + +public class NukeRoom extends StandardRoom { + + @Override + public int minWidth() { + return 28; + } + + @Override + public int minHeight() { + return 28; + } + + @Override + public int maxWidth() { + return 28; + } + + @Override + public int maxHeight() { + return 28; + } + + @Override + public boolean canMerge(Level l, Point p, int mergeTerrain) { + return false; + } + + @Override + public void paint(Level level) { + + Painter.fill(level, this, Terrain.WALL); + Painter.fill(level, this, 1, Terrain.EMBERS); + + //true = space, false = wall + Maze.allowDiagonals = false; + boolean[][] maze = Maze.generate(this); + boolean[] passable = new boolean[width()*height()]; + + Painter.fill(level, this, 1, Terrain.EMPTY); + Painter.fill(level, this, 2, Terrain.HIGH_GRASS); + for (int x = 0; x < maze.length; x++) { + for (int y = 0; y < maze[0].length; y++) { + if (maze[x][y] == Maze.FILLED) { + Painter.fill(level, x + left, y + top, 1, 1, Terrain.WALL_DECO); + } + passable[x + width()*y] = maze[x][y] == Maze.EMPTY; + } + } + + PathFinder.setMapSize(width(), height()); + Point entrance = connected.values().iterator().next(); + int entrancePos = (entrance.x - left) + width()*(entrance.y - top); + + PathFinder.buildDistanceMap( entrancePos, passable ); + + for (int i = 0; i < 20; i++) { + int dropPos; + do { + dropPos = level.pointToCell(random()); + } while (level.map[dropPos] != Terrain.HIGH_GRASS || level.heaps.get( dropPos ) != null); + Item prize = Random.Int(8) == 0 ? new ShrapnelBomb() : new Firebomb(); + level.drop(prize, dropPos).type = Heap.Type.HEAP; + level.map[dropPos] = Terrain.TRAP; + level.setTrap(new ExplosiveTrap(), dropPos); + } + + PathFinder.setMapSize(level.width(), level.height()); + } +} \ No newline at end of file diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/scenes/GameNewsScene.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/scenes/GameNewsScene.java index 5f632cfe4..61b99d38c 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/scenes/GameNewsScene.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/scenes/GameNewsScene.java @@ -17,7 +17,6 @@ import com.shatteredpixel.shatteredpixeldungeon.ui.StyledButton; import com.shatteredpixel.shatteredpixeldungeon.ui.Window; import com.shatteredpixel.shatteredpixeldungeon.windows.WndHardNotification; import com.shatteredpixel.shatteredpixeldungeon.windows.WndMessage; -import com.shatteredpixel.shatteredpixeldungeon.windows.WndOptions; import com.watabou.noosa.BitmapText; import com.watabou.noosa.Camera; import com.watabou.noosa.Game; @@ -266,59 +265,36 @@ public class GameNewsScene extends PixelScene { //定义GameNewsScene类,继 if (article.ling > Game.versionCode) { // 向用户展示新文章可用的选项:下载或退出游戏 - ShatteredPixelDungeon.scene().add(new WndOptions(Icons.get(Icons.CHANGES), + ShatteredPixelDungeon.scene().add(new WndHardNotification(Icons.get(Icons.CHANGES), article.title, article.summary, - Messages.get(this, "download"),Messages.get(this, "stop_download")) { + Messages.get(this, "download"), + 0){ @Override - protected void onSelect(int index) { - if (index == 0) { - // 如果是桌面版就打开桌面版的下载链接,否则打开安卓版的下载链接 - if (DeviceCompat.isDesktop()) { - ShatteredPixelDungeon.scene().add(new WndOptions(Icons.get(Icons.CHANGES), - article.title, - article.summary, - "JAR版下载","NoJVM-版本下载") { - @Override - protected void onSelect(int index) { - if (index == 0) { - ShatteredPixelDungeon.platform.openURI(article.DesktopURL); - } else { - ShatteredPixelDungeon.platform.openURI("https://lingasdj.lanzouo.com/b05rqansf"); - } - Gdx.app.exit(); - } - - @Override - public void onBackPressed() { - // - } - }); - } else { - ShatteredPixelDungeon.platform.openURI(article.URL); - Gdx.app.exit(); - } - + public void hide() { + // 如果是桌面版就打开桌面版的下载链接,否则打开安卓版的下载链接 + if (DeviceCompat.isDesktop()) { + ShatteredPixelDungeon.platform.openURI(article.DesktopURL); } else { - ShatteredPixelDungeon.switchNoFade(TitleScene.class); + ShatteredPixelDungeon.platform.openURI(article.URL); } + Gdx.app.exit(); } @Override public void onBackPressed() { - // + ShatteredPixelDungeon.switchNoFade(TitleScene.class); } }); } else { // 向用户展示新版本可用的选项:强制下载或退出游戏 - ShatteredPixelDungeon.scene().add(new WndOptions(Icons.get(article.ling < Game.versionCode ? - Icons.WARNING : Icons.CHANGES), + ShatteredPixelDungeon.scene().add(new WndHardNotification(Icons.get(Icons.CHANGES), article.title, article.summary, - Messages.get(this, "force_download")) { + Messages.get(this, "force_download"), + 0){ @Override - protected void onSelect(int index) { - if (index == 0) { + public void hide() { // 如果是桌面版就打开桌面版的下载链接,否则打开安卓版的下载链接 if (DeviceCompat.isDesktop()) { ShatteredPixelDungeon.platform.openURI(article.DesktopURL); @@ -326,7 +302,6 @@ public class GameNewsScene extends PixelScene { //定义GameNewsScene类,继 ShatteredPixelDungeon.platform.openURI(article.URL); } Gdx.app.exit(); - } } @Override @@ -338,15 +313,14 @@ public class GameNewsScene extends PixelScene { //定义GameNewsScene类,继 } else { // 显示天赋图标并提示用户已经更新完成 icon(UpdateNews.parseArticleIcon(article)); - ShatteredPixelDungeon.scene().add(new WndOptions(Icons.get(Icons.TALENT), - Messages.get(this, "update"), - Messages.get(this, "desc")+"\n\n"+article.summary, - Messages.get(this, "okay")) { + ShatteredPixelDungeon.scene().add(new WndHardNotification(Icons.get(Icons.CHANGES), + article.title, + article.summary, + Messages.get(this, "okay"), + 0){ @Override - protected void onSelect(int index) { - if (index == 0) { + public void hide() { ShatteredPixelDungeon.switchNoFade(TitleScene.class); - } } public void onBackPressed() { diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/scenes/NewsScene.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/scenes/NewsScene.java index f8bb0f30f..c56995bd8 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/scenes/NewsScene.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/scenes/NewsScene.java @@ -145,11 +145,7 @@ public class NewsScene extends PixelScene { @Override protected void onClick() { super.onClick(); - String link = "https://ShatteredPixel.com"; - //tracking codes, so that the website knows where this pageview came from - link += "?utm_source=shatteredpd"; - link += "&utm_medium=news_page"; - link += "&utm_campaign=ingame_link"; + String link = "http://www.pd.qinyueqwq.top/"; ShatteredPixelDungeon.platform.openURI(link); } }; diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/ui/changelist/mlpd/vM0_6_7_X_Changes.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/ui/changelist/mlpd/vM0_6_7_X_Changes.java index 10c0e1d37..e296c2070 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/ui/changelist/mlpd/vM0_6_7_X_Changes.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/ui/changelist/mlpd/vM0_6_7_X_Changes.java @@ -144,7 +144,7 @@ public class vM0_6_7_X_Changes { changes.addButton(new ChangeButton(i, ("熔岩火龙"), ("丛林暴乱的真相"))); - changes = new ChangeInfo("v0.6.5.0-Alpha6-6.5-国庆", true, ""); + changes = new ChangeInfo("v0.6.5.0-Alpha6-6.8-国庆", true, ""); changes.hardlight(Window.TITLE_COLOR); changeInfos.add(changes); @@ -155,6 +155,13 @@ public class vM0_6_7_X_Changes { changes.addButton(new ChangeButton(Icons.get(Icons.CHALLENGE_ON), ("新挑战:变幻莫测V0.1"), ("追加两个随机地形感觉,整体战斗全面处于大地型,怪物生成变多,追加两个迷你Boss战。"))); + changes.addButton(new ChangeButton(Icons.get(Icons.PREFS), ("杂项修改2"), + ("1.修复三井协定的三井重复生成问题\n" + + "2.改善变幻莫测迷你Boss地形以及战利品\n" + + "3.种子现在分为A类,B类,BossRush类\n" + + "4.部分界面UI迭代,变幻莫测挑战平衡"))); + + changes.addButton(new ChangeButton(Icons.get(Icons.PREFS), ("杂项修改"), ("1.迭代了UI材质\n\n2.优化了一些代码"))); diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/windows/WndHero.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/windows/WndHero.java index e1c29dffa..57aa652fc 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/windows/WndHero.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/windows/WndHero.java @@ -21,10 +21,8 @@ package com.shatteredpixel.shatteredpixeldungeon.windows; -import static com.shatteredpixel.shatteredpixeldungeon.Challenges.NO_ARMOR; +import static com.shatteredpixel.shatteredpixeldungeon.Challenges.MOREROOM; import static com.shatteredpixel.shatteredpixeldungeon.Challenges.PRO; -import static com.shatteredpixel.shatteredpixeldungeon.Challenges.RLPT; -import static com.shatteredpixel.shatteredpixeldungeon.Challenges.SBSG; import static com.shatteredpixel.shatteredpixeldungeon.Dungeon.hero; import static com.shatteredpixel.shatteredpixeldungeon.SPDSettings.HelpSettings; import static com.shatteredpixel.shatteredpixeldungeon.Statistics.lanterfireactive; @@ -292,10 +290,8 @@ public class WndHero extends WndTabbed { String seed; if (Dungeon.isDLC(Conducts.Conduct.BOSSRUSH)) { seed = "BossRush"; - }else if(Dungeon.isChallenged(NO_ARMOR)){ + }else if(Dungeon.isChallenged(MOREROOM)){ seed = "B"; - } else if (Dungeon.isChallenged(RLPT)&&Dungeon.isChallenged(SBSG)) { - seed = "C"; } else { seed = "A"; } diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/windows/WndRanking.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/windows/WndRanking.java index e077fecdf..eb1d8adcd 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/windows/WndRanking.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/windows/WndRanking.java @@ -21,8 +21,11 @@ package com.shatteredpixel.shatteredpixeldungeon.windows; +import static com.shatteredpixel.shatteredpixeldungeon.Challenges.MOREROOM; + import com.shatteredpixel.shatteredpixeldungeon.Assets; import com.shatteredpixel.shatteredpixeldungeon.Badges; +import com.shatteredpixel.shatteredpixeldungeon.Conducts; import com.shatteredpixel.shatteredpixeldungeon.Dungeon; import com.shatteredpixel.shatteredpixeldungeon.QuickSlot; import com.shatteredpixel.shatteredpixeldungeon.Rankings; @@ -37,6 +40,7 @@ import com.shatteredpixel.shatteredpixeldungeon.scenes.PixelScene; import com.shatteredpixel.shatteredpixeldungeon.sprites.HeroSprite; import com.shatteredpixel.shatteredpixeldungeon.sprites.ItemSprite; import com.shatteredpixel.shatteredpixeldungeon.sprites.ItemSpriteSheet; +import com.shatteredpixel.shatteredpixeldungeon.text.HeroStat; import com.shatteredpixel.shatteredpixeldungeon.ui.BadgesGrid; import com.shatteredpixel.shatteredpixeldungeon.ui.BadgesList; import com.shatteredpixel.shatteredpixeldungeon.ui.Button; @@ -166,6 +170,18 @@ public class WndRanking extends WndTabbed { } } + private String seedType(){ + String seed; + if (Dungeon.isDLC(Conducts.Conduct.BOSSRUSH)) { + seed = "BossRush"; + }else if(Dungeon.isChallenged(MOREROOM)){ + seed = "B"; + } else { + seed = "A"; + } + return seed; + } + private class StatsTab extends Group { private int GAP = 4; @@ -302,7 +318,7 @@ public class WndRanking extends WndTabbed { } pos += GAP; - + pos = statSlot(this, Messages.get(HeroStat.class, "seed_type"), seedType(), pos); pos = statSlot(this, Messages.get(this, "enemies"), num.format(Statistics.enemiesSlain), pos); pos = statSlot(this, Messages.get(this, "gold"), num.format(Statistics.goldCollected), pos); pos = statSlot(this, Messages.get(this, "food"), num.format(Statistics.foodEaten), pos); diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/windows/WndScoreBreakdown.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/windows/WndScoreBreakdown.java index 683cc8ddc..7da21bdfa 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/windows/WndScoreBreakdown.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/windows/WndScoreBreakdown.java @@ -1,6 +1,8 @@ package com.shatteredpixel.shatteredpixeldungeon.windows; -import static com.shatteredpixel.shatteredpixeldungeon.Challenges.STRONGER_BOSSES; +import static com.shatteredpixel.shatteredpixeldungeon.Challenges.DHXD; +import static com.shatteredpixel.shatteredpixeldungeon.Challenges.MOREROOM; +import static com.shatteredpixel.shatteredpixeldungeon.Challenges.PRO; import com.shatteredpixel.shatteredpixeldungeon.Challenges; import com.shatteredpixel.shatteredpixeldungeon.Dungeon; @@ -60,7 +62,9 @@ public class WndScoreBreakdown extends Window { int chCount = 0; for (int ch : Challenges.MASKS){ - if ((Dungeon.challenges & ch) != 0 && ch <= STRONGER_BOSSES) chCount++; + if ((Dungeon.challenges & ch) != 0 && ch <= MOREROOM && ch != PRO && ch != DHXD) { + chCount++; + } } //评分系统