update Beta4.9 P3

This commit is contained in:
LingASDJ 2023-03-24 21:57:35 +08:00
parent c3e4002bcf
commit aedf39e30c
29 changed files with 534 additions and 111 deletions

View File

@ -18,7 +18,7 @@ allprojects {
appPackageName = 'com.ansdomagiclingpixeldungeon.ling'
appVersionCode =800011
appVersionName = '0.6.1.0-Beta4.7(P3)'
appVersionName = '0.6.1.0-Beta4.9(P3)'
appJavaCompatibility = JavaVersion.VERSION_1_8

Binary file not shown.

After

Width:  |  Height:  |  Size: 132 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.5 KiB

After

Width:  |  Height:  |  Size: 4.6 KiB

View File

@ -3,6 +3,11 @@
actors.mobs.bosses.diamondknight.name=宝箱之王
actors.mobs.bosses.diamondknight.desc=拟态的最终结果就是无限接近人类。\n原本作用拟形的钻石宝箱外壳化作盔甲包裹住如王般的内在。\n衪是所有拟形怪的王——至少衪是这么认为的。\n王会战斗到最后一刻直到粉身碎骨。
actors.mobs.salamander.name=深蓝蝾螈
actors.mobs.salamander.desc=来自森林的小生物,由于下方的邪恶力量侵蚀,它们已经由温顺变得凶猛。\n它们锋利的尾巴能穿透敌人它们十分的聪明且极其灵活必须趁其不备将之杀掉。
actors.mobs.clearelemental.name=纯晶元素
actors.mobs.clearelemental.desc=来自森林自身的精华产物,但由于下方邪恶力量的不断侵犯,它们自身的力量已经消耗许多。虽然它们已经没有攻击能力,但为了保证森林最终不被完全侵蚀,它们会用剩余的力量驱赶每一个入侵森林的不速之客。
actors.mobs.bosses.crivusfruits.name=克里弗斯之果
actors.mobs.bosses.crivusfruits.desc=这颗鲜红的果实将周围一切生物都化作自身的养分。身旁的触手会将不慎走进的小动物们绞杀,腐化成缠绕在四周的瘴气。但当它们感受到你手上拿着的提灯时,却表现出畏惧火焰的样子。\n\n极少有冒险者能对这株植物作出描述在得到的只言片语中你唯一能确定的就是“它是森林至暗的中心”。
@ -646,11 +651,11 @@ actors.mobs.npcs.obsir.desc=穿着黑西装的神秘人,头上戴着有各种
actors.mobs.jdsdz.name=丛林守卫
actors.mobs.jdsdz.desc="枫林"的丛林守卫据说DM200就是他们制作的。\n\n他们偶尔会给敌人一次剧毒效果\n\n地牢楼层越深丛林守卫越强大。
actors.mobs.slime_red.name=史莱姆-血红守护者
actors.mobs.slime_red.desc=史莱姆七大守护者中的_血红使者_\n它发出的攻击有几率让入侵者受到_流血伤害_
actors.mobs.slime_red.name=血红史莱姆
actors.mobs.slime_red.desc=来自森林不明能量聚集起的高智能生物,据说曾经在诞生前模仿过白老鼠的攻击习性,所以自身也有一定概率造成目标流血。
actors.mobs.slime_orange.name=史莱姆-黄昏守护者
actors.mobs.slime_orange.desc=史莱姆七大守护者中的_黄昏使者_\n它发出的攻击有几率让入侵者受到_燃烧伤害_
actors.mobs.slime_orange.name=黄昏史莱姆
actors.mobs.slime_orange.desc=来自森林不明能量聚集起的高智能生物,据说曾经在诞生前汲取过烈焰花的精华,所以自身也有一定概率造成目标燃烧。
actors.mobs.slime_lt.name=史莱姆-雷霆守护者
actors.mobs.slime_lt.desc=史莱姆七大守护者中的_雷霆使者_\n它发出的攻击有几率让入侵者受到_麻痹效果_

View File

@ -3,7 +3,7 @@ scenes.heroselectscene.custom_seed_title=自定义种子
scenes.heroselectscene.custom_seed_desc=在相同的种子中,总是会生成相同的地牢。玩家可以通过此功能,重复游玩相同的种子存档。同时还可以分享地牢种子给别人。
scenes.heroselectscene.custom_seed_set=确认
scenes.heroselectscene.custom_seed_clear=清除
scenes.heroselectscene.custom_seed_duplicate=已有一个相同的种子正在进行中,请输入其他种子!
scenes.heroselectscene.custom_seed_duplicate=已有一个相同的种子存档局正在进行中,请输入其他种子以进行游玩
scenes.gamescene.go_here=前往这里
scenes.gamescene.examine=调查这里

View File

@ -499,4 +499,6 @@ ui.changelist.mlpd.vm0_6_7_x_changes.bug_06x53=-V0.6.1-Beta4\n1.修复克里弗
ui.changelist.mlpd.vm0_6_7_x_changes.bug_06x54=-V0.6.1-Beta4.5\n1.修复奈亚子的购买存储问题\n2.修复种子会导致挑战失效的问题\n3.优化少量赘余代码\n4.修复幸福结局的显示问题
ui.changelist.mlpd.vm0_6_7_x_changes.bug_06x55=-V0.6.1-Beta4.9\n1.修复一些小型错误\n2.修复玫瑰秘卷的错误回合
//ui.changelist.mlpd.vm0_5_x_changes.xxx//

View File

@ -165,6 +165,14 @@ windows.wndgame.menu=主菜单
windows.wndgame.exit=退出游戏
windows.wndgame.return=继续冒险
windows.wndgameinprogress.gameversion=游戏版本:
windows.wndgameinprogress.gameseed=地牢种子:
windows.wndgameinprogress.gamegold=游戏金币:
windows.wndgameinprogress.gamenayzi=奈亚大亨:
windows.wndgameinprogress.gamenayzis=\n一局游戏内购买7次终端的物品即可永久让奈亚入驻0层。
windows.wndgameinprogress.gamemimic=拟态猎杀:
windows.wndgameinprogress.gameinof=注:类型不同的种子所生成的地牢物品规则将有所不同。\n-_B类_为开启_独挡一面_挑战后的种子。
windows.wndgameinprogress.title=%1$d级%2$s
windows.wndgameinprogress.challenges=挑战
windows.wndgameinprogress.gameinfo=信息
@ -275,6 +283,7 @@ windows.wndquickbag.title=快速使用一件物品
windows.wndranking.error=无法载入更多信息。
windows.wndranking.stats=属性
windows.wndranking.items=物品
windows.wndranking$statstab.seed=种子
windows.wndranking.badges=徽章
windows.wndranking$statstab.title=%1$d级%2$s
windows.wndranking$statstab.talents=天赋

Binary file not shown.

After

Width:  |  Height:  |  Size: 429 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 347 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 596 B

View File

@ -162,7 +162,7 @@ public class Assets {
public static final String THEME = "music/theme.ogg";
public static final String GO = "music/Open.ogg";
public static final String SHOP = "music/shop.ogg";
public static final String THEME_1 = "music/newtheme.ogg";
public static final String THEME_1 = "music/theme.ogg";
public static final String THEME_2 = "music/theme.ogg";
public static final String SEWERS_1 = "music/Level1.ogg";
@ -332,10 +332,13 @@ public class Assets {
public static final String DKGirl = "Npcs/DKGirl.png";
public static final String SAESD = "sprites/bluedragon.png";
public static final String WHITE = "Npcs/White.png";
public static final String BBAT = "sprites/bloodbat.png";
public static final String RAT = "sprites/rat.png";
public static final String CLEAR = "sprites/clearelemt.png";
public static final String BRUTE = "sprites/brute.png";
public static final String SPINNER = "sprites/spinner.png";
public static final String ASDW = "sprites/Viaw.png";

View File

@ -174,15 +174,15 @@ public class Bestiary {
case 2:
return new ArrayList<>(Arrays.asList(Rat.class,
Rat.class, Rat.class, Gnoll.class, Gnoll.class,
Gnoll.class, OGPDLLS.class, OGPDNQHZ.class));
Gnoll.class, Gnoll.class, Albino.class));
case 3:
return new ArrayList<>(Arrays.asList(Rat.class,
Rat.class, OGPDNQHZ.class,
OGPDZSLS.class, Rat.class, Rat.class,
Snake.class,Crab.class,Swarm.class));
Rat.class, Salamander.class,
Salamander.class, Rat.class, Rat.class,
ClearElemental.class,Crab.class,Swarm.class));
case 4:
return new ArrayList<>(Arrays.asList(OGPDZSLS.class,
OGPDLLS.class, Snake.class,
return new ArrayList<>(Arrays.asList(Salamander.class,
ClearElemental.class, Slime_Red.class,
Slime_Orange.class, Swarm.class,Crab.class));
case 5:
return new ArrayList<>(Arrays.asList(Rat.class, Rat.class,Slime.class,Slime.class,Swarm.class,Crab.class));

View File

@ -0,0 +1,98 @@
package com.shatteredpixel.shatteredpixeldungeon.actors.mobs;
import com.shatteredpixel.shatteredpixeldungeon.Dungeon;
import com.shatteredpixel.shatteredpixeldungeon.actors.Char;
import com.shatteredpixel.shatteredpixeldungeon.actors.blobs.Blob;
import com.shatteredpixel.shatteredpixeldungeon.actors.blobs.ConfusionGas;
import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Burning;
import com.shatteredpixel.shatteredpixeldungeon.items.Item;
import com.shatteredpixel.shatteredpixeldungeon.items.weapon.missiles.MissileWeapon;
import com.shatteredpixel.shatteredpixeldungeon.mechanics.Ballistica;
import com.shatteredpixel.shatteredpixeldungeon.scenes.GameScene;
import com.shatteredpixel.shatteredpixeldungeon.sprites.ClearElementalSprites;
import com.watabou.utils.Bundle;
import com.watabou.utils.Random;
public class ClearElemental extends Mob {
public void onZapComplete() {
zap();
next();
}
private int combo = 0;
{
spriteClass = ClearElementalSprites.class;
EXP = 8;
HP = HT = 16;
defenseSkill = 2;
maxLvl = 7;
flying =true;
}
@Override
public int attackSkill( Char target ) {
return 7;
}
@Override
protected boolean canAttack( Char enemy ) {
Ballistica attack = new Ballistica( pos, enemy.pos, Ballistica.PROJECTILE);
return !Dungeon.level.adjacent(pos, enemy.pos) && attack.collisionPos == enemy.pos;
}
private void zap() {
spend(3f);
combo++;
int effect = Random.Int(4)+combo;
if (effect > 2) {
if (effect >= 4 && enemy.buff(Burning.class) == null) {
GameScene.add(Blob.seed(enemy.pos, 45, ConfusionGas.class));
}
}
}
@Override
protected boolean getCloser( int target ) {
combo = 0; //if he's moving, he isn't attacking, reset combo.
if (state == HUNTING) {
return enemySeen && getFurther( target );
} else {
return super.getCloser( target );
}
}
@Override
public void aggro(Char ch) {
//cannot be aggroed to something it can't see
if (ch == null || fieldOfView == null || fieldOfView[ch.pos]) {
super.aggro(ch);
}
}
@Override
public Item createLoot() {
MissileWeapon drop = (MissileWeapon)super.createLoot();
//half quantity, rounded up
drop.quantity((drop.quantity()+1)/2);
return drop;
}
private static final String COMBO = "combo";
@Override
public void storeInBundle( Bundle bundle ) {
super.storeInBundle(bundle);
bundle.put(COMBO, combo);
}
@Override
public void restoreFromBundle( Bundle bundle ) {
super.restoreFromBundle( bundle );
combo = bundle.getInt( COMBO );
}
}

View File

@ -0,0 +1,135 @@
package com.shatteredpixel.shatteredpixeldungeon.actors.mobs;
import com.shatteredpixel.shatteredpixeldungeon.Dungeon;
import com.shatteredpixel.shatteredpixeldungeon.actors.Char;
import com.shatteredpixel.shatteredpixeldungeon.actors.blobs.Blob;
import com.shatteredpixel.shatteredpixeldungeon.actors.blobs.Fire;
import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Buff;
import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Burning;
import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Poison;
import com.shatteredpixel.shatteredpixeldungeon.actors.mobs.npcs.Ghost;
import com.shatteredpixel.shatteredpixeldungeon.items.Generator;
import com.shatteredpixel.shatteredpixeldungeon.items.Item;
import com.shatteredpixel.shatteredpixeldungeon.items.weapon.missiles.MissileWeapon;
import com.shatteredpixel.shatteredpixeldungeon.mechanics.Ballistica;
import com.shatteredpixel.shatteredpixeldungeon.scenes.GameScene;
import com.shatteredpixel.shatteredpixeldungeon.sprites.CharSprite;
import com.shatteredpixel.shatteredpixeldungeon.sprites.SalamanderSprites;
import com.watabou.utils.Bundle;
import com.watabou.utils.Random;
public class Salamander extends Mob {
{
spriteClass = SalamanderSprites.class;
EXP = 5;
HP = HT = 5;
defenseSkill = 24;
loot = Generator.Category.SEED;
lootChance = 0.05f;
maxLvl = 12;
}
public static class DarkBolt{}
private void zap() {
spend( 1f );
if (hit( this, enemy, true )) {
int dmg = Random.NormalIntRange(2, 4);
enemy.damage( dmg, new DarkBolt() );
} else {
enemy.sprite.showStatus( CharSprite.NEUTRAL, enemy.defenseVerb() );
}
}
public void onZapComplete() {
zap();
next();
}
private int combo = 0;
@Override
public int attackSkill( Char target ) {
return 16;
}
@Override
protected boolean canAttack( Char enemy ) {
Ballistica attack = new Ballistica( pos, enemy.pos, Ballistica.PROJECTILE);
return !Dungeon.level.adjacent(pos, enemy.pos) && attack.collisionPos == enemy.pos;
}
//todo Ghost Quest Mob-2
@Override
public int attackProc( Char enemy, int damage ) {
damage = super.attackProc( enemy, damage );
//The gnoll's attacks get more severe the more the player lets it hit them
combo++;
int effect = Random.Int(4)+combo;
if (effect > 2) {
if (effect >=6 && enemy.buff(Burning.class) == null){
if (Dungeon.level.flamable[enemy.pos])
GameScene.add(Blob.seed(enemy.pos, 4, Fire.class));
Buff.affect(enemy, Burning.class).reignite( enemy );
} else
Buff.affect( enemy, Poison.class).set((effect-2) );
}
return damage;
}
@Override
protected boolean getCloser( int target ) {
combo = 0; //if he's moving, he isn't attacking, reset combo.
if (state == HUNTING) {
return enemySeen && getFurther( target );
} else {
return super.getCloser( target );
}
}
@Override
public void aggro(Char ch) {
//cannot be aggroed to something it can't see
if (ch == null || fieldOfView == null || fieldOfView[ch.pos]) {
super.aggro(ch);
}
}
@Override
public Item createLoot() {
MissileWeapon drop = (MissileWeapon)super.createLoot();
//half quantity, rounded up
drop.quantity((drop.quantity()+1)/2);
return drop;
}
@Override
public void die( Object cause ) {
super.die( cause );
Ghost.Quest.process();
}
private static final String COMBO = "combo";
@Override
public void storeInBundle( Bundle bundle ) {
super.storeInBundle(bundle);
bundle.put(COMBO, combo);
}
@Override
public void restoreFromBundle( Bundle bundle ) {
super.restoreFromBundle( bundle );
combo = bundle.getInt( COMBO );
}
}

View File

@ -31,7 +31,7 @@ import com.shatteredpixel.shatteredpixeldungeon.items.potions.PotionOfLiquidFlam
import com.shatteredpixel.shatteredpixeldungeon.scenes.GameScene;
import com.shatteredpixel.shatteredpixeldungeon.sprites.OrangeSprites;
import com.watabou.utils.Random;
/*史莱姆烈焰审判现在移除*/
public class Slime_Orange extends Slime {
{
spriteClass = OrangeSprites.class;

View File

@ -21,21 +21,20 @@
package com.shatteredpixel.shatteredpixeldungeon.actors.mobs;
import com.shatteredpixel.shatteredpixeldungeon.Dungeon;
import com.shatteredpixel.shatteredpixeldungeon.actors.Char;
import com.shatteredpixel.shatteredpixeldungeon.actors.blobs.Blob;
import com.shatteredpixel.shatteredpixeldungeon.actors.blobs.Fire;
import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Bleeding;
import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Buff;
import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Burning;
import com.shatteredpixel.shatteredpixeldungeon.scenes.GameScene;
import com.shatteredpixel.shatteredpixeldungeon.items.potions.PotionOfHealing;
import com.shatteredpixel.shatteredpixeldungeon.sprites.RedSprites;
import com.watabou.utils.Random;
public class Slime_Red extends Slime {
{
spriteClass = RedSprites.class;
maxLvl = -200;
maxLvl = 16;
lootChance = 0.15f;
loot = PotionOfHealing.class;
properties.add(Property.ACIDIC);
}
@ -43,16 +42,10 @@ public class Slime_Red extends Slime {
@Override
public int attackProc(Char enemy, int damage) {
if (Random.Int(0, 6) > 7) {
if (Random.Int(0, 6) > 4) {
Buff.affect( enemy, Bleeding.class ).set( 3 );
}
int damage2 = Slime_Red.super.attackProc(enemy, this.combo + damage);
if (Dungeon.level.flamable[enemy.pos]) {
GameScene.add(Blob.seed(enemy.pos, 1, Fire.class));
}
if (enemy.buff(Burning.class) == null) {
Buff.affect(enemy, Bleeding.class);
}
return damage2;
return Slime_Red.super.attackProc(enemy, this.combo + damage);
}
}

View File

@ -62,7 +62,7 @@ public class ScrollOfRoseShiled extends Scroll {
@Override
public void doRead() {
Buff.prolong(hero, RoseShiled.class, 5f);
Buff.prolong(hero, RoseShiled.class, 10f);
setKnown();
new Flare( 5, 32 ).color( 0xFF00FF, true ).show( curUser.sprite, 2f );

View File

@ -8,12 +8,14 @@ package com.shatteredpixel.shatteredpixeldungeon.items.weapon.melee;
import com.shatteredpixel.shatteredpixeldungeon.actors.Char;
import com.shatteredpixel.shatteredpixeldungeon.items.weapon.enchantments.Blazing;
import com.shatteredpixel.shatteredpixeldungeon.items.weapon.enchantments.Grim;
import com.shatteredpixel.shatteredpixeldungeon.items.weapon.enchantments.HaloBlazing;
import com.shatteredpixel.shatteredpixeldungeon.items.weapon.enchantments.Kinetic;
import com.shatteredpixel.shatteredpixeldungeon.items.weapon.enchantments.Shocking;
import com.shatteredpixel.shatteredpixeldungeon.items.weapon.enchantments.Unstable;
import com.shatteredpixel.shatteredpixeldungeon.messages.Messages;
import com.shatteredpixel.shatteredpixeldungeon.sprites.ItemSpriteSheet;
import com.watabou.utils.Bundle;
import com.watabou.utils.Random;
public class LockSword extends MeleeWeapon {
private int lvl = 0;
@ -25,20 +27,24 @@ public class LockSword extends MeleeWeapon {
@Override
public int level() {
return lvl/100;
}
@Override
public int min(int lvl) {
return Math.round(1.0f*(tier+1)) +
lvl*Math.round(1.5f*(tier+1));
if(lvl <=1000){
return lvl/100;
} else {
return 10;
}
}
@Override
public int max(int lvl) {
return Math.round(2.5f*(tier+1)) +
return Math.round(1.9f*(tier+1)) +
lvl*Math.round(1.5f*(tier+1));
}
@Override
public int min(int lvl) {
return Math.round(1.5f*(tier+1)) +
lvl*Math.round(0.5f*(tier+1));
}
@ -63,39 +69,55 @@ public class LockSword extends MeleeWeapon {
}
public int proc(Char attacker, Char defender, int damage ) {
if (level >= 10) {
lvl = 1000;
} else {
++lvl;
}
int dmg;
if (level >= 10) {
lvl += 0;
} else if (defender.properties().contains(Char.Property.BOSS) && defender.HP <= damage && level <= 10) {
if (lvl >= 1000) {
lvl += 1;
} else if (defender.properties().contains(Char.Property.BOSS) && defender.HP <= damage && lvl <= 1000) {
//目标Boss血量小于实际伤害判定为死亡,+100
lvl += 100;
} else if (defender.properties().contains(Char.Property.MINIBOSS) && defender.HP <= damage && level <= 10) {
} else if (defender.properties().contains(Char.Property.MINIBOSS) && defender.HP <= damage && lvl <= 1000) {
//目标迷你Boss血量小于实际伤害判定为死亡,+30
lvl += 50;
} else if (defender.HP <= damage && level <= 10) {
} else if (defender.HP <= damage && lvl <= 1000) {
//目标血量小于实际伤害判定为死亡,+15
lvl += 15;
}
if (level>= 9) {
dmg = (new Grim()).proc(this, attacker, defender, damage) + 8;
damage = dmg;
} else if (level>= 8) {
if (lvl>= 900) {
switch (Random.NormalIntRange(1,4)){
case 1:
dmg = (new Grim()).proc(this, attacker, defender, damage) + 8;
damage = dmg;
break;
case 2:
dmg = (new Shocking()).proc(this, attacker, defender, damage) + 8;
damage = dmg;
break;
case 3:
dmg = (new Blazing()).proc(this, attacker, defender, damage) + 8;
damage = dmg;
break;
case 4:
dmg = (new Kinetic()).proc(this, attacker, defender, damage) + 8;
damage = dmg;
break;
default:
dmg = (new HaloBlazing()).proc(this, attacker, defender, damage) + 8;
damage = dmg;
break;
}
} else if (lvl>= 800) {
dmg = (new Unstable()).proc(this, attacker, defender, damage) + 4;
damage = dmg;
} else if (level>= 6){
} else if (lvl>= 600){
dmg = (new Shocking()).proc(this, attacker, defender, damage) + 3;
damage = dmg;
} else if (level>= 4){
} else if (lvl>= 400){
dmg = (new Blazing()).proc(this, attacker, defender, damage) + 2;
damage = dmg;
} else if (level>= 2){
} else if (lvl>= 200){
dmg = (new Kinetic()).proc(this, attacker, defender, damage) + 1;
damage = dmg;
}

View File

@ -5,11 +5,9 @@ import static com.shatteredpixel.shatteredpixeldungeon.levels.ColdChestBossLevel
import com.shatteredpixel.shatteredpixeldungeon.Assets;
import com.shatteredpixel.shatteredpixeldungeon.Dungeon;
import com.shatteredpixel.shatteredpixeldungeon.actors.Char;
import com.shatteredpixel.shatteredpixeldungeon.actors.blobs.Blob;
import com.shatteredpixel.shatteredpixeldungeon.actors.mobs.Mob;
import com.shatteredpixel.shatteredpixeldungeon.actors.mobs.bosses.DiamondKnight;
import com.shatteredpixel.shatteredpixeldungeon.scenes.GameScene;
import com.shatteredpixel.shatteredpixeldungeon.utils.BArray;
import com.shatteredpixel.shatteredpixeldungeon.utils.GLog;
import com.watabou.utils.Bundle;
@ -176,6 +174,7 @@ public class ColdChestBossLevel extends Level {
}
}
for (Mob mob : Dungeon.level.mobs.toArray(new Mob[0])){
if(mob instanceof DiamondKnight && mob.HP >400){
GLog.n("ColdChestBoss");
@ -185,23 +184,6 @@ public class ColdChestBossLevel extends Level {
}
private void cleanMapState(){
buildFlagMaps();
cleanWalls();
BArray.setFalse(visited);
BArray.setFalse(mapped);
for (Blob blob: blobs.values()){
blob.fullyClear();
}
addVisuals(); //this also resets existing visuals
traps.clear();
GameScene.resetMap();
Dungeon.observe();
}
public void progress(){
switch (pro) {
case START:

View File

@ -397,16 +397,6 @@ public class HeroSelectScene extends PixelScene {
long seed = DungeonSeed.convertFromText(text);
if (positive && seed != -1) {
for (GamesInProgress.Info info : GamesInProgress.checkAll()) {
if (info.seed == seed) {
SPDSettings.customSeed("");
icon.resetColor();
ShatteredPixelDungeon.scene().addToFront(new WndMessage(Messages.get(HeroSelectScene.class, "custom_seed_duplicate")));
return;
}
}
SPDSettings.customSeed(text);
icon.hardlight(1f, 1.5f, 0.67f);
} else {

View File

@ -182,7 +182,7 @@ public class InterlevelScene extends PixelScene {
fadeTime += 0.9f; //adds 1 second total
//speed up transition when debugging
} else if (DeviceCompat.isDebug()){
fadeTime = 0.75f;
fadeTime = 0.1f;
}
SkinnedBlock bg = new SkinnedBlock(Camera.main.width, Camera.main.height, loadingAsset ){

View File

@ -38,7 +38,7 @@ public class TitleScene extends PixelScene {
@Override
public void create() {
super.create();
SPDSettings.systemFont(false);
// SPDSettings.systemFont(false);
Music.INSTANCE.play(Assets.Music.THEME_1, true);

View File

@ -0,0 +1,61 @@
package com.shatteredpixel.shatteredpixeldungeon.sprites;
import com.shatteredpixel.shatteredpixeldungeon.Assets;
import com.shatteredpixel.shatteredpixeldungeon.Dungeon;
import com.shatteredpixel.shatteredpixeldungeon.actors.mobs.ClearElemental;
import com.shatteredpixel.shatteredpixeldungeon.effects.MagicMissile;
import com.watabou.noosa.TextureFilm;
import com.watabou.noosa.audio.Sample;
import com.watabou.utils.Callback;
public class ClearElementalSprites extends MobSprite {
private Animation cast;
public ClearElementalSprites() {
super();
texture( Assets.Sprites.CLEAR );
TextureFilm frames = new TextureFilm( texture, 16, 16 );
idle = new Animation( 10, true );
idle.frames( frames, 0, 1, 2 );
run = new Animation( 10, true );
run.frames( frames, 0, 0, 0, 1 );
attack = new Animation( 15, false );
attack.frames( frames, 1, 1, 2, 2 );
die = new Animation( 10, false );
die.frames( frames, 3, 4, 5, 6, 7, 8 ,9 );
play( idle );
}
@Override
public void attack( int cell ) {
if (!Dungeon.level.adjacent(cell, ch.pos)) {
MagicMissile.boltFromChar( parent,
MagicMissile.RAINBOW,
this,
cell,
new Callback() {
@Override
public void call() {
((ClearElemental)ch).onZapComplete();
}
} );
Sample.INSTANCE.play( Assets.Sounds.ZAP );
turnTo( ch.pos , cell );
} else {
super.attack( cell );
}
}
}

View File

@ -12,7 +12,7 @@ public class DimandKingSprite extends MobSprite {
TextureFilm frames = new TextureFilm( texture, 24, 24 );
idle = new Animation( 2, true );
idle = new Animation( 7, true );
idle.frames( frames, 0, 0, 0, 1 );
run = new Animation( 10, true );

View File

@ -0,0 +1,63 @@
package com.shatteredpixel.shatteredpixeldungeon.sprites;
import com.shatteredpixel.shatteredpixeldungeon.Assets;
import com.shatteredpixel.shatteredpixeldungeon.Dungeon;
import com.shatteredpixel.shatteredpixeldungeon.actors.mobs.Salamander;
import com.shatteredpixel.shatteredpixeldungeon.effects.MagicMissile;
import com.watabou.noosa.MovieClip;
import com.watabou.noosa.TextureFilm;
import com.watabou.noosa.audio.Sample;
import com.watabou.utils.Callback;
public class SalamanderSprites extends MobSprite {
private Animation cast;
public SalamanderSprites() {
super();
texture( Assets.Sprites.SAESD );
TextureFilm frames = new TextureFilm( texture, 16, 16 );
idle = new MovieClip.Animation( 2, true );
idle.frames( frames, 0,1 );
run = new MovieClip.Animation( 12, true );
run.frames( frames, 2,3,4 );
attack = new MovieClip.Animation( 12, false );
attack.frames( frames, 5,6 );
cast = attack.clone();
die = new MovieClip.Animation( 12, false );
die.frames( frames, 7 );
play( idle );
}
@Override
public void attack( int cell ) {
if (!Dungeon.level.adjacent(cell, ch.pos)) {
MagicMissile.boltFromChar( parent,
MagicMissile.SHAMAN_BLUE,
this,
cell,
new Callback() {
@Override
public void call() {
((Salamander)ch).onZapComplete();
}
} );
Sample.INSTANCE.play( Assets.Sounds.ZAP );
turnTo( ch.pos , cell );
play( cast );
} else {
super.attack( cell );
}
}
}

View File

@ -277,6 +277,8 @@ public class Toolbar extends Component {
float startX, startY;
switch(Mode.valueOf(SPDSettings.toolbarMode())){
case SPLIT:
case GROUP:
case CENTER:
btnWait.setPos(x, y);
btnSearch.setPos(btnWait.right(), y);
@ -285,25 +287,40 @@ public class Toolbar extends Component {
startX = btnInventory.left() - btnQuick[0].width();
for (int i = 0; i < maxHorizontalQuickslots; i++) {
QuickslotTool tool = btnQuick[i];
tool.setPos(startX, y);
tool.setPos(startX, y+2);
if (i + 1 < btnQuick.length) {
startX = btnQuick[i].left() - btnQuick[i+1].width();
}
}
startY = 40;
startY = 60;
for (int i = maxHorizontalQuickslots; i < btnQuick.length; i++) {
QuickslotTool tool = btnQuick[i];
tool.setPos(width - (tool.width() + 2), startY);
if (i + 1 < btnQuick.length) {
startY = btnQuick[i].bottom();
if(i +1 < 7) {
startY = btnQuick[i].bottom();
} else if (i == 7) {
startY = btnQuick[i].top();
tool.setPos(width - (tool.width() + 24), startY);
} else if (i == 8) {
startY = btnQuick[i].top() - 24;
tool.setPos(width - (tool.width() + 24), startY);
} else if (i == 9) {
startY = btnQuick[i].top() - 48;
tool.setPos(width - (tool.width() + 24), startY);
} else if (i == 10) {
startY = btnQuick[i].top() - 24;
tool.setPos(width - (tool.width() + 24), startY);
}
}
}
//center the quickslots if they
if (btnQuick[btnQuick.length-1].left() < btnSearch.right()){
float diff = Math.round(btnSearch.right() - btnQuick[btnQuick.length-1].left())/2;
for( int i = 0; i < Constants.MAX_QUICKSLOTS; i++){
float diff = Math.round(btnSearch.right() - btnQuick[btnQuick.length-1].left())/2f;
for( int i = 0; i < maxHorizontalQuickslots; i++){
btnQuick[i].setPos( btnQuick[i].left()+diff, btnQuick[i].top() );
}
}
@ -374,8 +391,6 @@ public class Toolbar extends Component {
private Image base;
public Tool( int x, int y, int width, int height ) {
super();

View File

@ -7,6 +7,7 @@ import com.shatteredpixel.shatteredpixeldungeon.scenes.ChangesScene;
import com.shatteredpixel.shatteredpixeldungeon.scenes.PixelScene;
import com.shatteredpixel.shatteredpixeldungeon.sprites.AutoShopRoBotSprite;
import com.shatteredpixel.shatteredpixeldungeon.sprites.BlueBatSprite;
import com.shatteredpixel.shatteredpixeldungeon.sprites.ClearElementalSprites;
import com.shatteredpixel.shatteredpixeldungeon.sprites.ColdGuardSprite;
import com.shatteredpixel.shatteredpixeldungeon.sprites.ColdRatSprite;
import com.shatteredpixel.shatteredpixeldungeon.sprites.CrivusFruitsSprite;
@ -22,10 +23,13 @@ import com.shatteredpixel.shatteredpixeldungeon.sprites.MagicGirlSprite;
import com.shatteredpixel.shatteredpixeldungeon.sprites.MimicSprite;
import com.shatteredpixel.shatteredpixeldungeon.sprites.MolotovHuntsmanSprite;
import com.shatteredpixel.shatteredpixeldungeon.sprites.MurdererSprite;
import com.shatteredpixel.shatteredpixeldungeon.sprites.OGPDNQHZTT;
import com.shatteredpixel.shatteredpixeldungeon.sprites.RedSwarmSprite;
import com.shatteredpixel.shatteredpixeldungeon.sprites.SRPDHBLRTT;
import com.shatteredpixel.shatteredpixeldungeon.sprites.SalamanderSprites;
import com.shatteredpixel.shatteredpixeldungeon.sprites.ShopkKingSprite;
import com.shatteredpixel.shatteredpixeldungeon.sprites.SlimeKingSprite;
import com.shatteredpixel.shatteredpixeldungeon.sprites.SnakeSprite;
import com.shatteredpixel.shatteredpixeldungeon.sprites.WFSprite;
import com.shatteredpixel.shatteredpixeldungeon.ui.BuffIcon;
import com.shatteredpixel.shatteredpixeldungeon.ui.BuffIndicator;
@ -40,6 +44,7 @@ import java.util.ArrayList;
public class vM0_6_7_X_Changes {
public static void addAllChanges(ArrayList<ChangeInfo> changeInfos) {
add_v0_6_26_Changes(changeInfos);
add_v0_6_25_Changes(changeInfos);
add_v0_6_24_Changes(changeInfos);
add_v0_6_23_Changes(changeInfos);
@ -68,6 +73,45 @@ public class vM0_6_7_X_Changes {
add_v0_6_0_Changes(changeInfos);
}
public static void add_v0_6_26_Changes( ArrayList<ChangeInfo> changeInfos ) {
ChangeInfo changes = new ChangeInfo("v0.6.1.0-Beta4.9(P3)", 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 SalamanderSprites(), ("新生物:深蓝蝾螈"),
("森林中的小生物,但早已不再温顺\n它们的锋利尾巴可以刺穿每一个敌人。")));
changes.addButton(new ChangeButton(new ClearElementalSprites(), ("新怪物:纯晶元素"),
("森林曾经的守护者,如今只能使用残剩的力量试图驱赶森林的入侵者")));
changes = new ChangeInfo("改动", false, null);
changes.hardlight(Window.CYELLOW);
changeInfos.add(changes);
changes.addButton(new ChangeButton(Icons.get(Icons.PREFS), ("杂项改动"),
("1.快捷栏进行了少量优化\n2.部分代码优化")));
changes.addButton(new ChangeButton(new ItemSprite(ItemSpriteSheet.PBlade), ("归溯钥剑"),
("修复一系列问题,并且重新调整成长面板" )));
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_06X55")));
changes = new ChangeInfo("移除", false, null);
changes.hardlight(Window.RED_COLOR);
changeInfos.add(changes);
changes.addButton(new ChangeButton(new OGPDNQHZTT(), ("OGPD老鼠组"),
("曾经的魔绫代表怪物如今也正式退出魔绫的舞台。2021.2.21--2023.3.24R.I.P.)")));
changes.addButton(new ChangeButton(new SnakeSprite(), ("下水道巨蛇"),
("破碎的代表怪物,由于不符合魔绫的世界观,故而被移除。")));
}
public static void add_v0_6_25_Changes( ArrayList<ChangeInfo> changeInfos ) {
ChangeInfo changes = new ChangeInfo("v0.6.1.0-Beta4.5(P3)", true, "");
changes.hardlight(Window.TITLE_COLOR);
@ -81,7 +125,7 @@ public class vM0_6_7_X_Changes {
("现在已正式接入破碎地牢的种子系统")));
changes = new ChangeInfo("改动", false, null);
changes.hardlight(Window.GREEN_COLOR);
changes.hardlight(Window.CYELLOW);
changeInfos.add(changes);
changes.addButton(new ChangeButton(new ItemSprite(ItemSpriteSheet.PBlade), ("归溯钥剑"),
@ -102,7 +146,7 @@ public class vM0_6_7_X_Changes {
}
public static void add_v0_6_24_Changes( ArrayList<ChangeInfo> changeInfos ) {
ChangeInfo changes = new ChangeInfo("v0.6.1.0-Beta2(P3)", true, "");
ChangeInfo changes = new ChangeInfo("v0.6.1.0-Beta4(P3)", true, "");
changes.hardlight(Window.TITLE_COLOR);
changeInfos.add(changes);

View File

@ -58,7 +58,7 @@ public class WndGameInProgress extends Window {
public WndGameInProgress(final int slot){
final GamesInProgress.Info info = GamesInProgress.check(slot);
String className = null;
String className;
assert info != null;
if (info.subClass != HeroSubClass.NONE){
className = info.subClass.title();
@ -72,11 +72,10 @@ public class WndGameInProgress extends Window {
if (info.name.equals("")) {
title.label(Messages.get(this, "title", info.level, className.toUpperCase(Locale.ENGLISH)));
} else {
StringBuilder csname = new StringBuilder();
csname.append(info.name);
csname.append("\n");
csname.append(Messages.get(this, "title",info.level, className));
title.label(csname.toString().toUpperCase(Locale.ENGLISH));
String csname = info.name +
"\n" +
Messages.get(this, "title", info.level, className);
title.label(csname.toUpperCase(Locale.ENGLISH));
}
@ -111,12 +110,13 @@ public class WndGameInProgress extends Window {
try {
Bundle bundle = FileUtils.bundleFromFile(GamesInProgress.gameFile(slot));
String ing =
"游戏版本:" + Game.version+"\n\n"+
"地牢种子:" + DungeonSeed.convertToCode(bundle.getLong("seed"))+"\n\n"+
"现有金币:" + bundle.getInt("gold") +"\n\n"+
"奈亚大亨:" + bundle.getInt("naiyaziCollected")+"\n一场游戏累计在终端购买7次奈亚即可永久入驻0层" +"\n\n"+
"拟态猎杀:" + bundle.getInt("goldchest") +"\n\n"+
"注:类型不同的种子所生成的地牢物品规则将有所不同。\n-_B类_为开启_独当一面_挑战后的种子";
Messages.get(WndGameInProgress.class,"gameversion") + Game.version+"\n\n"+
Messages.get(WndGameInProgress.class,"gameseed")+ DungeonSeed.convertToCode(bundle.getLong("seed"))+"\n\n"+
Messages.get(WndGameInProgress.class,"gamegold") + bundle.getInt("gold") +"\n\n"+
Messages.get(WndGameInProgress.class,"gamenayzi") + bundle.getInt("naiyaziCollected")+
Messages.get(WndGameInProgress.class,"gamenayzis") +"\n\n"+
Messages.get(WndGameInProgress.class,"gamemimic") + bundle.getInt("goldchest") +"\n\n"+
Messages.get(WndGameInProgress.class,"gameinof");
ShatteredPixelDungeon.scene().addToFront(new WndMessage(ing));
} catch (IOException ignored) {
}
@ -205,11 +205,11 @@ public class WndGameInProgress extends Window {
};
cont.icon(Icons.get(Icons.ENTER));
cont.setRect(0, pos, WIDTH/2 -1, 20);
cont.setRect(0, pos, WIDTH/2f -1, 20);
add(cont);
erase.icon(Icons.get(Icons.CLOSE));
erase.setRect(WIDTH/2 + 1, pos, WIDTH/2 - 1, 20);
erase.setRect(WIDTH/2f + 1, pos, WIDTH/2f - 1, 20);
add(erase);
resize(WIDTH, (int)cont.bottom()+1);

View File

@ -254,6 +254,7 @@ public class WndRanking extends WndTabbed {
pos = statSlot( this, Messages.get(this, "food"), Integer.toString( Statistics.foodEaten ), pos );
pos = statSlot( this, Messages.get(this, "alchemy"), Integer.toString( Statistics.itemsCrafted ), pos );
pos = statSlot( this, Messages.get(this, "ankhs"), Integer.toString( Statistics.ankhsUsed ), pos );
}