From eff124cb7e91d5473a08eef2ef038994b93f0841 Mon Sep 17 00:00:00 2001 From: LingASDJ <2735951230@qq.com> Date: Tue, 6 Jun 2023 23:40:06 +0800 Subject: [PATCH] Update 0.6.3.0-Beta1-1.5 --- build.gradle | 4 +- .../interfaces/bosslogo/qliphoth-clear.png | Bin 0 -> 1241 bytes .../interfaces/bosslogo/qliphoth-title.png | Bin 0 -> 1260 bytes .../assets/messages/actors/actors.properties | 31 +++--- .../assets/messages/items/items.properties | 22 ++-- .../main/assets/messages/misc/misc.properties | 15 +-- .../assets/messages/scenes/scenes.properties | 22 ++-- .../src/main/assets/messages/ui/ui.properties | 10 +- .../shatteredpixeldungeon/Assets.java | 8 ++ .../actors/hero/HeroClass.java | 10 +- .../actors/mobs/IceGolem.java | 2 +- .../actors/mobs/bosses/CrivusFruits.java | 101 ++++++++++++++++-- .../mobs/bosses/CrivusFruitsLasher.java | 63 ++++++++++- .../actors/mobs/bosses/DwarfMaster.java | 1 + .../actors/mobs/bosses/TPDoor.java | 2 +- .../effects/BannerSprites.java | 6 +- .../shatteredpixeldungeon/items/Heap.java | 7 +- .../items/artifacts/TimekeepersHourglass.java | 18 ++-- .../items/food/FrozenCarpaccio.java | 4 - .../items/wands/WandOfLivingEarth.java | 12 ++- .../items/wands/WandOfTransfusion.java | 19 +++- .../levels/ForestBossLevel.java | 27 ++++- .../levels/rooms/special/SentryRoom.java | 34 +++--- .../scenes/GameScene.java | 56 ++++++++++ .../sprites/RotLasherSprite.java | 24 +++++ .../ui/RenderedTextBlock.java | 22 ++-- .../ui/changelist/S_Changes.java | 14 +-- .../ui/changelist/mlpd/vM0_6_7_X_Changes.java | 57 +++++++++- 28 files changed, 464 insertions(+), 127 deletions(-) create mode 100644 core/src/main/assets/interfaces/bosslogo/qliphoth-clear.png create mode 100644 core/src/main/assets/interfaces/bosslogo/qliphoth-title.png diff --git a/build.gradle b/build.gradle index 0bea13961..ade67fd85 100644 --- a/build.gradle +++ b/build.gradle @@ -17,8 +17,8 @@ allprojects { appName = 'Magic Ling Pixel Dungeon' appPackageName = 'com.ansdomagiclingpixeldungeon.ling' - appVersionCode =900876 - appVersionName = '0.6.2.0-Beta5.0' + appVersionCode =900901 + appVersionName = '0.6.3.0-Beta1.5' appJavaCompatibility = JavaVersion.VERSION_11 diff --git a/core/src/main/assets/interfaces/bosslogo/qliphoth-clear.png b/core/src/main/assets/interfaces/bosslogo/qliphoth-clear.png new file mode 100644 index 0000000000000000000000000000000000000000..87d4c63eca270395781b8508b6ead07bbdb391b4 GIT binary patch literal 1241 zcmV;~1Sb25P)$Y3uvsZ3DJ` zi2ujdxon%*gKal)Wf(eK#?7?QP>u@=W->k5+Fx4P&i8=8i9K63WPWpYJooW( zuASRu-Ksr`T-82s4t_m}j*N0noCCCdo_&kl z6@t8r&vqCXydF#Y{8aI)st{t&@sHh?EguaAIJc|8rI|5jGUV5U?KEb7Jx~~caDgIJ z-{odw`MYa5T|)w;mkJSsK}gFv>EnwpjC(U>yP(;5b1PBvTXYzxrwf`iW$yPoe zBynnGJ9md5)onlK+8q;>7D+BC2cz89h1Z(Xkp8t~Fd6rQ^xeqVY10>r5%|P>Pr6)G3fv+NnVccK7 zZv9Ho(fDD+9KgUDK+ReSH5hvabEn=$Y3h0YxTJX{c)tRA8E z3U>?MWC?Ab1!6G(fIO-KwbfMBt@B>0XzvBG41L%PI{(3^%F$8h0YIoG((QPJUL<$df2XQQ zJlnA6%nPNxV1OY2f|1BH_=^i$T`0x+E7Lz`9rL5!@bt%206Sh^+U{Qp0t7oRw!Uv3 z1O_n@-FAGRC^Ofu#PNNh%r~$5_Tl4;t%FzccH#m+Xgc&2q7HbY&=WfKRIOwT)%)dJqu2JNRErg^Le@z_)RH zX7)9fhb+&__5nGUe_P+4SJ{Isn#*pL9^_3=zeuJAO8((9KoL*`6ahs* z5l{pa0YxANfu0zrZuq=3rorXs7y^@Ip00NR|r#_h#r=<^zg6Ea@LlK!FjWxV~C|4TBs zK>3*{Pq>VU4uu6Ny3wAAovRx;_d3UcAOjJ>2L@Iu9TOmiU8$*~hWi&i60(XuVS|mZ zfV|Jt2dW!QhOxW#CeV|wW^>QwP&BUAYYj8I-gW~Ku-YHl>#e;@BATX04D)-Lww)QwuSmPcey0l^z3@Oh(+^DBES#2xtX<82&zR{QUsHM68egtnr-qB zq??*tq^|Q`Md6)+J<1JxEKu97*QgtPA7IBFh%tC<(7c~s*hLB|CMEJ=3p)rwwSXUD z(4urLJc^xn4<-YGxfq+5MB1*64I3XJq|aW<@(7t@g^bDVinmoahIYgL;p5G)zQR*( z6qrZ@A6%9UWNs3}wQIBo6zF)#fCQXrL#%Liuq#U{|1;Kwp*!h*5|Pl+-m* z1feYteYD0E`!bm@zojvS$#H)4wBa8u$-nF!#o=x3QlBwjesPrveL+k)I|LaI&$jvX zuVZAKstN+|%tyG8*UutCmX9Qe92Xi-`p3v109`TuRrp{Bq^oE=iKW~rC{C81?7q8q zX8`+XXW+s3Tk+U%>kBAuM_)dKw9`kVqAyX>|DemRqf;&ti6Omfpzyo~Wr+YRy=1^3 z+Kwn8p9JhU!{|*Ha%dw`^d8Oje8WuVSpP6}frBhQe?B4t*P)+P7dg%+7d|EsNRogD z2O+o|(_dZLcDnUj?I^pxJ4cmQR{i}((Rf&FxbiS`*+2p!LiwjJxHIrXAOt4hA_kvu z%uZ3OoieK{8$4aAPhU}k7&9qLF=420NDN#Ma<=IEG?MMvvAmv`w+p88#a74C=@Et; zKhhEAE&`CP6Dhn`=$MdUizKE8kiJFa`;H%xP<%QbK#H9rfy5X&?|Y6s!X+hk^LvUs z{OCD|6eOo68zDrIAtFzZ3w~a9{i=xLfk^P7^A93XWGvH@tUy~m>xtui*#B}9{ zp8LCG=&EW}k)W#iXdFdA5l{pa0YyL&Py`eKML-cy1QY>9KoL*`6ahs*5l{rO5%>qw WWth~C@yx;i0000 affectedCells; + //the cells to trace fire shots to, for visual effects. + private HashSet visualCells; //基本属性 { spriteClass = CrivusFruitsSprite.class; @@ -58,7 +71,7 @@ public class CrivusFruits extends Mob { EXP = 20; - state = PASSIVE; + state = WANDERING; properties.add(Property.IMMOVABLE); properties.add(Property.BOSS); @@ -99,7 +112,10 @@ public class CrivusFruits extends Mob { if (!BossHealthBar.isAssigned()) { BossHealthBar.assignBoss(this); GLog.n(Messages.get(this, "notice")); + GameScene.flash(0x8000cc00); + Camera.main.shake(1f,3f); this.sprite.showStatus(CharSprite.NEGATIVE, "!!!"); + GameScene.bossReady(); for (Char ch : Actor.chars()){ if (ch instanceof DriedRose.GhostHero){ ((DriedRose.GhostHero) ch).sayBoss(); @@ -111,7 +127,7 @@ public class CrivusFruits extends Mob { //回合 @Override public void damage(int dmg, Object src) { - LockedFloor lock = Dungeon.hero.buff(LockedFloor.class); + LockedFloor lock = hero.buff(LockedFloor.class); if (lock != null) lock.addTime(dmg * 2); super.damage(dmg, src); } @@ -123,12 +139,17 @@ public class CrivusFruits extends Mob { if(!crivusfruitslevel2){ GameScene.add(Blob.seed(pos, HP<65 ? 50 : 30, DiedBlobs.class)); } else { + if(Dungeon.isChallenged(Challenges.STRONGER_BOSSES)){ + sprite.attack( hero.pos ); + spend( 25f ); + shoot(this, hero.pos); + } GameScene.add(Blob.seed(pos, HP<36 ? 150 : 50, DiedBlobs.class)); } //判定是否第一次加进入游戏 - if( Dungeon.hero.buff(LockedFloor.class) != null){ + if( hero.buff(LockedFloor.class) != null){ notice(); } state = PASSIVE; @@ -143,6 +164,9 @@ public class CrivusFruits extends Mob { CrivusFruitsLasher csp = new CrivusFruitsLasher(); csp.pos = i; GameScene.add(csp); + if(Dungeon.isChallenged(Challenges.STRONGER_BOSSES)){ + Buff.affect(csp, Barrier.class).setShield((int) (2.4f * csp.HT + 10)); + } } Sample.INSTANCE.play( Assets.Sounds.CHALLENGE ); this.sprite.showStatus(CharSprite.NEGATIVE, "!!!"); @@ -163,16 +187,32 @@ public class CrivusFruits extends Mob { GameScene.updateMap( WIDTH*11+25 ); } + + if(Dungeon.isChallenged(Challenges.STRONGER_BOSSES)){ + sprite.attack( hero.pos ); + spend( 3f ); + shoot(this, hero.pos); + } + + } //三阶段 if(HP==36){ GameScene.flash(0x80009c9c); HP=HT=35; + if(Dungeon.isChallenged(Challenges.STRONGER_BOSSES)){ + Buff.affect(this, Barrier.class).setShield((int) (3f * this.HT + 10)); + } GLog.n(Messages.get(this,"died!!!")); GLog.w(Messages.get(this,"!!!")); Sample.INSTANCE.play( Assets.Sounds.CHALLENGE ); this.sprite.showStatus(CharSprite.NEGATIVE, "!!!"); + if(Dungeon.isChallenged(Challenges.STRONGER_BOSSES)){ + sprite.attack( hero.pos ); + spend( 3f ); + shoot(this, hero.pos); + } } return super.act(); @@ -184,7 +224,7 @@ public class CrivusFruits extends Mob { //Boss死亡后改变描述 @Override public String tileDesc() { - return Messages.get(this, Dungeon.hero.buff(LockedFloor.class) != null? "desc" : "csed" ); + return Messages.get(this, hero.buff(LockedFloor.class) != null? "desc" : "csed" ); } @Override protected void evolve() { @@ -200,9 +240,9 @@ public class CrivusFruits extends Mob { cell = i + j*Dungeon.level.width(); if (cur[cell] > 0 && (ch = Actor.findChar( cell )) != null) { if (!ch.isImmune(this.getClass())) { - if( Dungeon.hero.buff(LockedFloor.class) != null) { + if( hero.buff(LockedFloor.class) != null) { //不为空为4 否则就是0 - ch.damage(Dungeon.hero.buff(LockedFloor.class) != null ? damage : 0, this); + ch.damage(hero.buff(LockedFloor.class) != null ? damage : 0, this); Statistics.bossScores[0] -= 200; } } @@ -272,12 +312,51 @@ public class CrivusFruits extends Mob { if (Dungeon.isDLC(Conducts.Conduct.BOSSRUSH)) { GetBossLoot(); } - - - - } + public void shoot(Char ch, int pos){ + final Ballistica shot = new Ballistica( hero.pos, pos, Ballistica.MAGIC_BOLT); + fx(shot, ch); + } + ConeAOE cone; + + protected void fx(Ballistica bolt, Char ch ) { + //need to perform flame spread logic here so we can determine what cells to put flames in. + affectedCells = new HashSet<>(); + visualCells = new HashSet<>(); + + int maxDist = 2 + 4*4; + int dist = Math.min(bolt.dist, maxDist); + + for (int i = 0; i < PathFinder.CIRCLE8.length; i++){ + if (bolt.sourcePos+PathFinder.CIRCLE8[i] == bolt.path.get(1)){ + break; + } + } + + cone = new ConeAOE( bolt, + maxDist, + 80 + 40,Ballistica.MAGIC_BOLT); + + visualCells.remove(bolt.path.get(dist)); + + for (Ballistica ray : cone.rays){ + ((MagicMissile)ch.sprite.parent.recycle( MagicMissile.class )).reset( + MagicMissile.SHADOW_CONE, + ch.sprite, + ray.path.get(ray.dist), + null + ); + } + + GameScene.add(Blob.seed(hero.pos, 120, CorrosiveGas.class)); + + if(Dungeon.level.heroFOV[bolt.sourcePos] || Dungeon.level.heroFOV[bolt.collisionPos]){ + Sample.INSTANCE.play( Assets.Sounds.ZAP ); + } + } + + { immunities.add( Paralysis.class ); immunities.add( Amok.class ); diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/mobs/bosses/CrivusFruitsLasher.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/mobs/bosses/CrivusFruitsLasher.java index f61542083..503f27ab7 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/mobs/bosses/CrivusFruitsLasher.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/mobs/bosses/CrivusFruitsLasher.java @@ -2,6 +2,8 @@ package com.shatteredpixel.shatteredpixeldungeon.actors.mobs.bosses; 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.Statistics; import com.shatteredpixel.shatteredpixeldungeon.actors.Actor; @@ -21,9 +23,13 @@ import com.shatteredpixel.shatteredpixeldungeon.items.potions.Potion; import com.shatteredpixel.shatteredpixeldungeon.items.scrolls.ScrollOfTeleportation; import com.shatteredpixel.shatteredpixeldungeon.items.wands.Wand; import com.shatteredpixel.shatteredpixeldungeon.levels.ForestBossLevel; +import com.shatteredpixel.shatteredpixeldungeon.mechanics.Ballistica; +import com.shatteredpixel.shatteredpixeldungeon.messages.Messages; import com.shatteredpixel.shatteredpixeldungeon.scenes.GameScene; import com.shatteredpixel.shatteredpixeldungeon.sprites.CharSprite; import com.shatteredpixel.shatteredpixeldungeon.sprites.RotLasherSprite; +import com.shatteredpixel.shatteredpixeldungeon.utils.GLog; +import com.watabou.noosa.audio.Sample; import com.watabou.utils.Random; public class CrivusFruitsLasher extends Mob { @@ -36,15 +42,66 @@ public class CrivusFruitsLasher extends Mob { EXP = 1; -// loot = Generator.Category.SEED; -// lootChance = 0.35f; - state = WANDERING = new Waiting(); properties.add(Property.IMMOVABLE); properties.add(Property.MINIBOSS); } + @Override + protected boolean canAttack( Char enemy ) { + if(Dungeon.isChallenged(Challenges.STRONGER_BOSSES) && Statistics.crivusfruitslevel2){ + return new Ballistica( pos, enemy.pos, Ballistica.MAGIC_BOLT).collisionPos == enemy.pos; + } + return super.canAttack(enemy); + } + + protected boolean doAttack( Char enemy ) { + + if (Dungeon.level.adjacent( pos, enemy.pos )) { + + return super.doAttack( enemy ); + + } else { + + if (sprite != null && (sprite.visible || enemy.sprite.visible) && Dungeon.isChallenged(Challenges.STRONGER_BOSSES)) { + sprite.zap( enemy.pos ); + return false; + } else { + zap(); + return true; + } + } + } + + + + private void zap() { + spend( 3f ); + + if (hit( this, enemy, true )) { + //TODO would be nice for this to work on ghost/statues too + if (enemy == Dungeon.hero && Random.Int( 2 ) == 0) { + GameScene.add(Blob.seed(enemy.pos, 45, ToxicGas.class)); + Sample.INSTANCE.play( Assets.Sounds.DEBUFF ); + } + + enemy.damage( damageRoll(), enemy ); + + if (enemy == Dungeon.hero && !enemy.isAlive()) { + Dungeon.fail( getClass() ); + GLog.n( Messages.get(this, "frost_kill") ); + } + } else { + enemy.sprite.showStatus( CharSprite.NEUTRAL, enemy.defenseVerb() ); + } + } + + public void onZapComplete() { + zap(); + next(); + } + @Override protected boolean act() { //毒雾 都得死 啊哈哈哈哈 diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/mobs/bosses/DwarfMaster.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/mobs/bosses/DwarfMaster.java index b05adb2b8..64b74b276 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/mobs/bosses/DwarfMaster.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/mobs/bosses/DwarfMaster.java @@ -112,6 +112,7 @@ public class DwarfMaster extends Boss { initBaseStatus(3, 8, 14, 10, 800, 0, 2); initStatus(20); + properties.add(Property.BOSS); properties.add(Property.FIERY); properties.add(Property.DEMONIC); properties.add(Property.ACIDIC); diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/mobs/bosses/TPDoor.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/mobs/bosses/TPDoor.java index 1efad2cd7..d0b0e9851 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/mobs/bosses/TPDoor.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/mobs/bosses/TPDoor.java @@ -20,7 +20,7 @@ public class TPDoor extends Mob { HP = HT = 100; - properties.add(Property.MINIBOSS); + properties.add(Property.BOSS); properties.add(Property.INORGANIC); properties.add(Property.ELECTRIC); properties.add(Property.IMMOVABLE); diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/effects/BannerSprites.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/effects/BannerSprites.java index 10e0ff526..ab594a144 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/effects/BannerSprites.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/effects/BannerSprites.java @@ -35,7 +35,8 @@ public class BannerSprites { GAME_OVER, SELECT_YOUR_HERO, PIXEL_DUNGEON_SIGNS, - SWORD + SWORD, + NULL }; public static Image get( Type type ) { @@ -59,6 +60,9 @@ public class BannerSprites { case SWORD: icon.frame( icon.texture.uvRect( 0, 181 , 160, 206 ) ); break; + case NULL: + icon.frame( icon.texture.uvRect( 0, 300 , 0, 200 ) ); + break; } return icon; } diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/Heap.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/Heap.java index 645f5c950..5f4e8678b 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/Heap.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/Heap.java @@ -39,6 +39,7 @@ import com.shatteredpixel.shatteredpixeldungeon.items.food.MysteryMeat; import com.shatteredpixel.shatteredpixeldungeon.items.journal.DocumentPage; import com.shatteredpixel.shatteredpixeldungeon.items.journal.Guidebook; import com.shatteredpixel.shatteredpixeldungeon.items.potions.Potion; +import com.shatteredpixel.shatteredpixeldungeon.items.rings.Ring; import com.shatteredpixel.shatteredpixeldungeon.items.rings.RingOfWealth; import com.shatteredpixel.shatteredpixeldungeon.items.scrolls.Scroll; import com.shatteredpixel.shatteredpixeldungeon.items.wands.Wand; @@ -70,7 +71,7 @@ public class Heap implements Bundlable { public Type type = Type.HEAP; public int pos = 0; - + public ItemSprite sprite; public boolean seen = false; public boolean haunted = false; @@ -389,8 +390,10 @@ public class Heap implements Bundlable { return Messages.get(this, "crystal_chest_desc", Messages.get(this, "artifact") ); else if (peek() instanceof Wand) return Messages.get(this, "crystal_chest_desc", Messages.get(this, "wand") ); - else + else if (peek() instanceof Ring) return Messages.get(this, "crystal_chest_desc", Messages.get(this, "ring") ); + else + return Messages.get(this, "crystal_chest_desc", Messages.get(this, "unknow") ); case TOMB: return Messages.get(this, "tomb_desc"); case BLACK: diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/artifacts/TimekeepersHourglass.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/artifacts/TimekeepersHourglass.java index fd7486f41..cf0916e0e 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/artifacts/TimekeepersHourglass.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/artifacts/TimekeepersHourglass.java @@ -23,6 +23,7 @@ package com.shatteredpixel.shatteredpixeldungeon.items.artifacts; import com.shatteredpixel.shatteredpixeldungeon.Assets; import com.shatteredpixel.shatteredpixeldungeon.Dungeon; +import com.shatteredpixel.shatteredpixeldungeon.Statistics; import com.shatteredpixel.shatteredpixeldungeon.actors.Char; import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Buff; import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Hunger; @@ -101,13 +102,18 @@ public class TimekeepersHourglass extends Artifact { @Override protected void onSelect(int index) { if (index == 0) { - GLog.i( Messages.get(TimekeepersHourglass.class, "onstasis") ); - GameScene.flash(0x80FFFFFF); - Sample.INSTANCE.play(Assets.Sounds.TELEPORT); + if(!Statistics.deadshoppingdied && Dungeon.depth<0){ + GLog.n( Messages.get(TimekeepersHourglass.class, "onstasiss") ); + } else { + GLog.i( Messages.get(TimekeepersHourglass.class, "onstasis") ); + GameScene.flash(0x80FFFFFF); + Sample.INSTANCE.play(Assets.Sounds.TELEPORT); + + activeBuff = new timeStasis(); + Talent.onArtifactUsed(Dungeon.hero); + activeBuff.attachTo(Dungeon.hero); + } - activeBuff = new timeStasis(); - Talent.onArtifactUsed(Dungeon.hero); - activeBuff.attachTo(Dungeon.hero); } else if (index == 1) { GLog.i( Messages.get(TimekeepersHourglass.class, "onfreeze") ); GameScene.flash(0x80FFFFFF); diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/food/FrozenCarpaccio.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/food/FrozenCarpaccio.java index 2f6fac216..70ac41e83 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/food/FrozenCarpaccio.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/food/FrozenCarpaccio.java @@ -49,13 +49,9 @@ public class FrozenCarpaccio extends Food { @Override protected void satisfy(Hero hero) { if (Dungeon.isChallenged(Challenges.EXSG)) { - if (Dungeon.isChallenged(Challenges.NO_HEALING)){ - PotionOfHealing.pharmacophobiaProc(hero); - } else { //~75% of a potion of healing Buff.affect(hero, Barrier.class).setShield((int) (0.6f * hero.HT + 10)); Talent.onHealingPotionUsed( hero ); - } } super.satisfy(hero); diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/wands/WandOfLivingEarth.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/wands/WandOfLivingEarth.java index c1a09e05e..3f6d10d08 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/wands/WandOfLivingEarth.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/wands/WandOfLivingEarth.java @@ -298,6 +298,9 @@ public class WandOfLivingEarth extends DamageWand { alignment = Alignment.ALLY; state = HUNTING; intelligentAlly = true; + + properties.add(Property.INORGANIC); + WANDERING = new Wandering(); //before other mobs @@ -337,10 +340,11 @@ public class WandOfLivingEarth extends DamageWand { @Override public int drRoll() { + int dr = super.drRoll(); if (Dungeon.isChallenged(Challenges.NO_ARMOR)){ - return Random.NormalIntRange(wandLevel, 2 + wandLevel); + return dr + Random.NormalIntRange(wandLevel, 2 + wandLevel); } else { - return Random.NormalIntRange(wandLevel, 3 + 3 * wandLevel); + return dr + Random.NormalIntRange(wandLevel, 3 + 3 * wandLevel); } } @@ -351,9 +355,9 @@ public class WandOfLivingEarth extends DamageWand { } else { return Messages.get(this, "desc", wandLevel, 3 + 3*wandLevel); } - + } - + { immunities.add( AllyBuff.class ); } diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/wands/WandOfTransfusion.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/wands/WandOfTransfusion.java index 394c68a1e..64d13b99f 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/wands/WandOfTransfusion.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/wands/WandOfTransfusion.java @@ -74,7 +74,7 @@ public class WandOfTransfusion extends Wand { //this wand does different things depending on the target. //heals/shields an ally or a charmed enemy while damaging self - if (ch.alignment == Char.Alignment.ALLY || ch.buff(Charm.class) != null){ + if (ch.alignment == Char.Alignment.ALLY || ch.buff(Charm.class) != null ){ // 5% of max hp int selfDmg = Math.round(curUser.HT*0.05f); @@ -87,11 +87,20 @@ public class WandOfTransfusion extends Wand { } else { shielding = 0; } + + if(ch.properties().contains(Char.Property.BOSS)){ + ch.HP += 0; + ch.sprite.emitter().burst(Speck.factory(Speck.HEALING), 2 + buffedLvl() / 2); + ch.sprite.showStatus(CharSprite.WARNING, "+0HP", healing + shielding); + GLog.n("注魂法杖对Boss治疗是无效的!"); + } else { + ch.HP += healing; + ch.sprite.emitter().burst(Speck.factory(Speck.HEALING), 2 + buffedLvl() / 2); + ch.sprite.showStatus(CharSprite.POSITIVE, "+%dHP", healing + shielding); + } + - ch.HP += healing; - - ch.sprite.emitter().burst(Speck.factory(Speck.HEALING), 2 + buffedLvl() / 2); - ch.sprite.showStatus(CharSprite.POSITIVE, "+%dHP", healing + shielding); + if (!freeCharge) { damageHero(selfDmg); diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/ForestBossLevel.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/ForestBossLevel.java index a6a7b8c47..eb67f9d8a 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/ForestBossLevel.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/ForestBossLevel.java @@ -3,6 +3,7 @@ package com.shatteredpixel.shatteredpixeldungeon.levels; import static com.shatteredpixel.shatteredpixeldungeon.Dungeon.level; import com.shatteredpixel.shatteredpixeldungeon.Assets; +import com.shatteredpixel.shatteredpixeldungeon.Conducts; import com.shatteredpixel.shatteredpixeldungeon.Dungeon; import com.shatteredpixel.shatteredpixeldungeon.actors.Actor; import com.shatteredpixel.shatteredpixeldungeon.actors.Char; @@ -12,6 +13,8 @@ import com.shatteredpixel.shatteredpixeldungeon.actors.mobs.npcs.RatKing; import com.shatteredpixel.shatteredpixeldungeon.effects.Ripple; import com.shatteredpixel.shatteredpixeldungeon.items.Generator; import com.shatteredpixel.shatteredpixeldungeon.items.Gold; +import com.shatteredpixel.shatteredpixeldungeon.items.Heap; +import com.shatteredpixel.shatteredpixeldungeon.items.keys.CrystalKey; import com.shatteredpixel.shatteredpixeldungeon.items.potions.PotionOfPurity; import com.shatteredpixel.shatteredpixeldungeon.scenes.GameScene; import com.shatteredpixel.shatteredpixeldungeon.tiles.DungeonTilemap; @@ -214,19 +217,39 @@ public class ForestBossLevel extends Level { switch(Random.NormalIntRange(1,6)){ case 1:case 2:case 3: for (int i : RatKingRoomASpawn) { - drop(new Gold( Random.IntRange( 10, 25 )),i); + //drop(new Gold( Random.IntRange( 10, 25 )),i).type = Heap.Type.CHEST; + Heap droppedGold = Dungeon.level.drop( new Gold( Random.IntRange( 10, 25 )),i); + droppedGold.type = Heap.Type.CHEST; + //必须追加一个view处理才能让金币的类型申请给地牢view处理后变成箱子样子 + droppedGold.sprite.view( droppedGold ); } RatKing king = new RatKing(); king.pos = WIDTH*7+3; GameScene.add(king); + + drop( new CrystalKey(Dungeon.isDLC(Conducts.Conduct.BOSSRUSH) ? 2 : 5 ), WIDTH*7+29 ); + + Heap droppedA = Dungeon.level.drop( Generator.randomUsingDefaults( Generator.Category.STONE), + WIDTH*7+28 ); + droppedA.type = Heap.Type.CRYSTAL_CHEST; + droppedA.sprite.view( droppedA ); break; case 4: case 5: case 6: for (int i : RatKingRoomBSpawn) { - drop(new Gold( Random.IntRange( 10, 25 )),i); + Heap droppedGold = Dungeon.level.drop( new Gold( Random.IntRange( 10, 25 )),i); + droppedGold.type = Heap.Type.CHEST; + droppedGold.sprite.view( droppedGold ); } RatKing king2 = new RatKing(); king2.pos = WIDTH*7+28; GameScene.add(king2); + + drop( new CrystalKey(Dungeon.isDLC(Conducts.Conduct.BOSSRUSH) ? 2 : 5 ), WIDTH*7+4 ); + + Heap droppedB = Dungeon.level.drop( Generator.randomUsingDefaults( Generator.Category.WEAPON), + WIDTH*7+3 ); + droppedB.type = Heap.Type.CRYSTAL_CHEST; + droppedB.sprite.view( droppedB ); break; } diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/rooms/special/SentryRoom.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/rooms/special/SentryRoom.java index 7b9975ec2..bd0da384e 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/rooms/special/SentryRoom.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/rooms/special/SentryRoom.java @@ -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 @@ -26,7 +26,7 @@ import com.shatteredpixel.shatteredpixeldungeon.Challenges; import com.shatteredpixel.shatteredpixeldungeon.Dungeon; 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.LostInventory; import com.shatteredpixel.shatteredpixeldungeon.actors.mobs.Eye; import com.shatteredpixel.shatteredpixeldungeon.actors.mobs.npcs.NPC; import com.shatteredpixel.shatteredpixeldungeon.effects.Beam; @@ -40,6 +40,7 @@ import com.shatteredpixel.shatteredpixeldungeon.levels.Terrain; import com.shatteredpixel.shatteredpixeldungeon.levels.painters.Painter; import com.shatteredpixel.shatteredpixeldungeon.levels.rooms.standard.EmptyRoom; import com.shatteredpixel.shatteredpixeldungeon.messages.Messages; +import com.shatteredpixel.shatteredpixeldungeon.sprites.CharSprite; import com.shatteredpixel.shatteredpixeldungeon.sprites.MobSprite; import com.shatteredpixel.shatteredpixeldungeon.tiles.DungeonTilemap; import com.shatteredpixel.shatteredpixeldungeon.utils.GLog; @@ -131,7 +132,7 @@ public class SentryRoom extends SpecialRoom { } } dangerDist = 2*(height()-5); - } else if (entrance.y == bottom){ + } else if (entrance.y == bottom){ sentryPos.set(center.x, top+1); Painter.fill(level, left+1, bottom-1, width()-2, 1, Terrain.EMPTY); if (entrance.x > center.x){ @@ -156,7 +157,7 @@ public class SentryRoom extends SpecialRoom { sentry.pos = level.pointToCell(sentryPos); sentry.room = new EmptyRoom(); sentry.room.set((Rect)this); - sentry.initialChargeDelay = dangerDist / 3f + 0.1f; + sentry.initialChargeDelay = sentry.curChargeDelay = dangerDist / 3f + 0.1f; level.mobs.add( sentry ); Painter.set(level, treasurePos, Terrain.PEDESTAL); @@ -238,7 +239,8 @@ public class SentryRoom extends SpecialRoom { if (Dungeon.hero != null){ if (fieldOfView[Dungeon.hero.pos] && Dungeon.level.map[Dungeon.hero.pos] == Terrain.EMPTY_SP - && room.inside(Dungeon.level.cellToPoint(Dungeon.hero.pos))){ + && room.inside(Dungeon.level.cellToPoint(Dungeon.hero.pos)) + && Dungeon.hero.buff(LostInventory.class) == null){ if (curChargeDelay > 0.001f){ //helps prevent rounding errors if (curChargeDelay == initialChargeDelay) { @@ -273,13 +275,22 @@ public class SentryRoom extends SpecialRoom { } public void onZapComplete(){ - Dungeon.hero.damage(Random.NormalIntRange(2+Dungeon.depth/2, 4+Dungeon.depth), new Eye.DeathGaze()); - if (!Dungeon.hero.isAlive()){ - GLog.n( Messages.capitalize(Messages.get(Char.class, "kill", name())) ); - Dungeon.fail( getClass() ); + if (hit(this, Dungeon.hero, true)) { + Dungeon.hero.damage(Random.NormalIntRange(2 + Dungeon.depth / 2, 4 + Dungeon.depth), new Eye.DeathGaze()); + if (!Dungeon.hero.isAlive()) { + Dungeon.fail(getClass()); + GLog.n(Messages.capitalize(Messages.get(Char.class, "kill", name()))); + } + } else { + Dungeon.hero.sprite.showStatus( CharSprite.NEUTRAL, Dungeon.hero.defenseVerb() ); } } + @Override + public int attackSkill(Char target) { + return 20 + Dungeon.depth * 2; + } + @Override public int defenseSkill( Char enemy ) { return INFINITE_EVASION; @@ -287,10 +298,7 @@ public class SentryRoom extends SpecialRoom { @Override public void damage( int dmg, Object src ) { - } - - @Override - public void add( Buff buff ) { + //do nothing } @Override diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/scenes/GameScene.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/scenes/GameScene.java index 3597bad91..33f5b22b1 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/scenes/GameScene.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/scenes/GameScene.java @@ -1423,12 +1423,68 @@ public class GameScene extends PixelScene { Buff.detach( ch, MagicGirlSayTimeLast.class ); } + + public static void bossReady() { + if (Dungeon.hero.isAlive()) { + Banner bossSlain = new Banner( BannerSprites.get( BannerSprites.Type.NULL ) ); + + + //Boss开始后的处理Logo,不在Switch中就是默认的Logo。 + switch (Dungeon.depth){ + case 2: + if(Dungeon.isDLC(Conducts.Conduct.BOSSRUSH) ){ + bossSlain.texture( Assets.Interfaces.QliPhoth_Title ); + bossSlain.show( 0xFFFFFF, 0.3f, 5f ); + scene.showBanner( bossSlain ); + } + break; + case 5: + if(!Dungeon.isDLC(Conducts.Conduct.BOSSRUSH) ) { + bossSlain.texture(Assets.Interfaces.QliPhoth_Title); + bossSlain.show(0xFFFFFF, 0.3f, 5f); + scene.showBanner(bossSlain); + } + break; + } + + if(lanterfireactive){ + cure( Dungeon.hero ); + } + + if (Dungeon.hero.buff(LockedFloor.class) == null) { + BGMPlayer.playBGMWithDepth(); + } + + Sample.INSTANCE.play( Assets.Sounds.ALERT ); + } + } + + public static void bossSlain() { if (Dungeon.hero.isAlive()) { Banner bossSlain = new Banner( BannerSprites.get( BannerSprites.Type.BOSS_SLAIN ) ); bossSlain.show( 0xFFFFFF, 0.3f, 5f ); scene.showBanner( bossSlain ); + + //Boss死亡后的处理Logo,不在Switch中就是默认的Logo。 + switch (Dungeon.depth){ + case 2: + if(Dungeon.isDLC(Conducts.Conduct.BOSSRUSH) ){ + bossSlain.texture( Assets.Interfaces.QliPhoth_Clear ); + bossSlain.show( 0xFFFFFF, 0.3f, 5f ); + scene.showBanner( bossSlain ); + } + break; + case 5: + if(!Dungeon.isDLC(Conducts.Conduct.BOSSRUSH) ) { + bossSlain.texture(Assets.Interfaces.QliPhoth_Clear); + bossSlain.show(0xFFFFFF, 0.3f, 5f); + scene.showBanner(bossSlain); + } + break; + } + if(lanterfireactive){ cure( Dungeon.hero ); } diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/sprites/RotLasherSprite.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/sprites/RotLasherSprite.java index 2cbf959a5..a5fbbb136 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/sprites/RotLasherSprite.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/sprites/RotLasherSprite.java @@ -22,7 +22,11 @@ package com.shatteredpixel.shatteredpixeldungeon.sprites; import com.shatteredpixel.shatteredpixeldungeon.Assets; +import com.shatteredpixel.shatteredpixeldungeon.actors.mobs.bosses.CrivusFruitsLasher; +import com.shatteredpixel.shatteredpixeldungeon.effects.MagicMissile; import com.watabou.noosa.TextureFilm; +import com.watabou.noosa.audio.Sample; +import com.watabou.utils.Callback; public class RotLasherSprite extends MobSprite { @@ -45,9 +49,29 @@ public class RotLasherSprite extends MobSprite { die = new Animation( 12, false ); die.frames( frames, 3, 4, 5, 6 ); + zap = attack.clone(); + play( idle ); } + public void zap( int cell ) { + + turnTo( ch.pos , cell ); + play( zap ); + + MagicMissile.boltFromChar( parent, + MagicMissile.SHAMAN_BLUE, + this, + cell, + new Callback() { + @Override + public void call() { + ((CrivusFruitsLasher)ch).onZapComplete(); + } + } ); + Sample.INSTANCE.play( Assets.Sounds.ZAP ); + } + @Override public int blood() { return 0xFF88CC44; diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/ui/RenderedTextBlock.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/ui/RenderedTextBlock.java index 0fd813b9b..2ff9dcc0e 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/ui/RenderedTextBlock.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/ui/RenderedTextBlock.java @@ -124,27 +124,27 @@ public class RenderedTextBlock extends Component { /* - Γ = 红色 - Δ = 绿色 + { = 红色 + } = 绿色 Θ = 蓝色 - Ξ = 粉色 - Π = 紫色 - ✦ = 黑色 + [ = 粉色 + ] = 紫色 + | = 黑色 _ = 青色 */ if (str.equals("_") && highlightingEnabled){ highlighting = !highlighting; - } else if(str.equals("Γ") && RedEnabled){ + } else if(str.equals("{") && RedEnabled){ Redhighlighting = !Redhighlighting; - } else if(str.equals("Δ") && GreenEnabled){ + } else if(str.equals("}") && GreenEnabled){ Greenhighlighting = !Greenhighlighting; - } else if(str.equals("Θ") && BlueEnabled){ + } else if(str.equals("*") && BlueEnabled){ Bluehighlighting = !Bluehighlighting; - } else if(str.equals("Ξ") && PinkEnabled){ + } else if(str.equals("[") && PinkEnabled){ Pinkhighlighting = !Pinkhighlighting; - } else if(str.equals("Π") && DeepEnabled){ + } else if(str.equals("]") && DeepEnabled){ Deeppinkhighlighting = !Deeppinkhighlighting; - } else if(str.equals("✦") && BlackEnabled){ + } else if(str.equals("|") && BlackEnabled){ Blackhighlighting = !Blackhighlighting; } else if (str.equals("\n")){ words.add(NEWLINE); diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/ui/changelist/S_Changes.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/ui/changelist/S_Changes.java index ecd1ea267..47af09af5 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/ui/changelist/S_Changes.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/ui/changelist/S_Changes.java @@ -376,12 +376,6 @@ public class S_Changes { "_3._两袖清风&负债累累_\n"+ "_一个是禁止地牢的_金币生成_,另一个则是_移除金币_")); - changes.addButton( new ChangeButton(Icons.get(Icons.LANGS), "文本渲染", - "文本现在可以渲染成RGB各拉满的三种颜色\n\n红色:_红_ \n\n蓝色:∮蓝∮ \n\n绿色:_绿_")); - - changes.addButton( new ChangeButton(new ItemSprite(ItemSpriteSheet.DG8), "_红宝石魔袋_", - "矮人国王的宝贝,现在在_DM300_那里有可能获得!\n\n或者去_商人那里_也有可能获得!")); - changes.addButton( new ChangeButton(new ItemSprite(ItemSpriteSheet.DG7), "_食物袋_", "在_粘咕_那里有几率获得该物品\n\n或者在_商人那里_也可能得到")); @@ -461,22 +455,22 @@ public class S_Changes { ChangeInfo changeInfo6 = new ChangeInfo("v0.3.0.1b", true, ""); changeInfo6.hardlight(16711935); arrayList.add(changeInfo6); - ChangeInfo changeInfo7 = new ChangeInfo(Messages.get(ChangesScene.class, "new", new Object[0]), false, (String) null); + ChangeInfo changeInfo7 = new ChangeInfo(Messages.get(ChangesScene.class, "new"), false, (String) null); changeInfo7.hardlight(16711935); arrayList.add(changeInfo7); changeInfo7.addButton(new ChangeButton(new ItemSprite(ItemSpriteSheet.MAGIC_INFUSE, (ItemSprite.Glowing) null), "新怪物", "1.添加了一个怪物\n\n")); changeInfo7.addButton(new ChangeButton(new ItemSprite(ItemSpriteSheet.CURSE_INFUSE, (ItemSprite.Glowing) null), "新机制", "地牢的一些机制改变了\n\n")); - ChangeInfo changeInfo8 = new ChangeInfo(Messages.get(ChangesScene.class, "changes", new Object[0]), false, (String) null); + ChangeInfo changeInfo8 = new ChangeInfo(Messages.get(ChangesScene.class, "changes"), false, (String) null); changeInfo8.hardlight(16745258); arrayList.add(changeInfo8); changeInfo8.addButton(new ChangeButton(new ItemSprite(ItemSpriteSheet.CHEST, (ItemSprite.Glowing) null), "Bug修复", "修复了以下问题\n\n1.修复了上个版本楼层26层闪退问题\n\n2.修复了界面问题\n\n")); changeInfo8.addButton(new ChangeButton(new ItemSprite(ItemSpriteSheet.RING_OPAL, (ItemSprite.Glowing) null), "武器改动详情", "武器名称:_血红魔剑_\n-首个版本属于_5阶武器_,现在已经升级了_8阶武器_\n\n")); - ChangeInfo changeInfo9 = new ChangeInfo(Messages.get(ChangesScene.class, "buffs", new Object[0]), false, (String) null); + ChangeInfo changeInfo9 = new ChangeInfo(Messages.get(ChangesScene.class, "buffs"), false, (String) null); changeInfo9.hardlight(16711935); arrayList.add(changeInfo9); changeInfo9.addButton(new ChangeButton(new ItemSprite(ItemSpriteSheet.HOLSTER, (ItemSprite.Glowing) null), "游戏物品增强记录A", "0.2.7 加强蓝色剑\n\n0.2.8 加强蓝焰法杖\n\n")); changeInfo9.addButton(new ChangeButton(new ItemSprite(ItemSpriteSheet.ARTIFACT_HOURGLASS, (ItemSprite.Glowing) null), "游戏物品增强记录B", "Up\n\n")); - ChangeInfo changeInfo10 = new ChangeInfo(Messages.get(ChangesScene.class, "nerfs", new Object[0]), false, (String) null); + ChangeInfo changeInfo10 = new ChangeInfo(Messages.get(ChangesScene.class, "nerfs"), false, (String) null); changeInfo10.hardlight(16711680); arrayList.add(changeInfo10); changeInfo10.addButton(new ChangeButton(new ItemSprite(ItemSpriteSheet.WAND_FROST, (ItemSprite.Glowing) null), "武器削弱记录A", "1.蔚蓝审判之剑\n-此版本已削弱精准和伤害,现在它的伤害20-35伤害左右\n\n")); diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/ui/changelist/mlpd/vM0_6_7_X_Changes.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/ui/changelist/mlpd/vM0_6_7_X_Changes.java index 3a54375c9..ae23b6315 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 @@ -52,6 +52,8 @@ import java.util.ArrayList; public class vM0_6_7_X_Changes { public static void addAllChanges(ArrayList changeInfos) { + add_v0_6_44_Changes(changeInfos); + add_v0_6_43_Changes(changeInfos); add_v0_6_42_Changes(changeInfos); add_v0_6_41_Changes(changeInfos); add_v0_6_40_Changes(changeInfos); @@ -97,6 +99,57 @@ public class vM0_6_7_X_Changes { add_v0_6_0_Changes(changeInfos); } + public static void add_v0_6_44_Changes( ArrayList changeInfos ) { + ChangeInfo changes = new ChangeInfo("金榜题名,高考加油", true, null); + changes.hardlight(Window.CYELLOW); + changeInfos.add(changes); + + changes = new ChangeInfo("v0.6.3.0-Beta1.5", true, ""); + changes.hardlight(Window.TITLE_COLOR); + changeInfos.add(changes); + + changes = new ChangeInfo("新内容", false, null); + changes.hardlight(Window.GREEN_COLOR); + changeInfos.add(changes); + + changes.addButton(new ChangeButton(new ItemSprite(ItemSpriteSheet.CRYSTAL_CHEST), ("克里弗斯之果-二选一改进"), + ("对二选一问题进行了一些改进,在新存档生效。"))); + + 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_06X73"))); + + } + + public static void add_v0_6_43_Changes( ArrayList changeInfos ) { + + ChangeInfo changes = new ChangeInfo("v0.6.3.0-Beta1.0", true, ""); + changes.hardlight(Window.TITLE_COLOR); + changeInfos.add(changes); + + + changes = new ChangeInfo("新内容", false, null); + changes.hardlight(Window.GREEN_COLOR); + changeInfos.add(changes); + + changes.addButton(new ChangeButton(new ItemSprite(ItemSpriteSheet.CHALLANEESICON_13), ("梦魇领袖-测试版"), + ("现在追加了克里弗斯之果的梦魇领袖词条,欢迎挑战"))); + + changes.addButton(new ChangeButton(Icons.get(Icons.DISPLAY), ("Boss横幅"), + ("现在Boss会在战斗开始时显示大横幅,以便玩家更好地了解Boss\n\n同时在Boss死亡时也会有对应的Boss战败横幅\n\n由于该系统对于美工的工作量极大,因此如果尚未完成logo的Boss将会显示默认的。"))); + + 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_06X72"))); + + } + public static void add_v0_6_42_Changes( ArrayList changeInfos ) { ChangeInfo changes = new ChangeInfo("v0.6.2.0-Beta5.0", true, ""); @@ -509,7 +562,7 @@ public class vM0_6_7_X_Changes { ("由于机制较于复杂,且时间不太充足。将在后续更新进行完善,敬请期待。"))); changes.addButton(new ChangeButton(new ItemSprite(ItemSpriteSheet.DASlade), ("新武器:涤罪[捐赠物品]"), - ("感谢_落白_的投稿,该武器是一个5阶武器,初始19力量,20%生成概率。可以召唤✦未安息的亡魂✦助战,自身基准攻击力随着杀敌数追加,但有上限。"))); + ("感谢_落白_的投稿,该武器是一个5阶武器,初始19力量,20%生成概率。可以召唤|未安息的亡魂|助战,自身基准攻击力随着杀敌数追加,但有上限。"))); changes.addButton(new ChangeButton(new ItemSprite(ItemSpriteSheet.CHALLANEESICON_14), ("寒冷系统0.1测试版"), ("监狱层追加寒冷系统,最高阈值为25"))); @@ -585,7 +638,7 @@ public class vM0_6_7_X_Changes { changes.addButton(new ChangeButton(a, ("新BOSS:DMZERO"), ("DMZERO是死灵巫师为夺取前矮人国王的政权而用黑暗魔法仿造矮人科技所制造的试作型魔法机械。\n" + "由于水晶之心的影响,DMZERO被禁锢在另一个异次元空间内,无法影响地牢所在的时间线。\n" + - "Γ战斗回合过长将会释放_湮灭审判_,对玩家造成致死伤害。半血后伤害大幅度提升。\n\n" + + "{战斗回合过长将会释放_湮灭审判_,对玩家造成致死伤害。半血后伤害大幅度提升。\n\n" + "根据商人给出的情报,它的高智能辐射电波影响了这个地牢。封印,摧毁,抑或是遣返。让这里恢复原状吧。"))); changes = new ChangeInfo("改动", false, null);