update V0.6-Beta21-P3-Pre4.3

This commit is contained in:
LingASDJ 2023-02-12 19:51:26 +08:00
parent 4e59b6e29b
commit 40cd0f8370
14 changed files with 318 additions and 29 deletions

View File

@ -17,7 +17,7 @@ allprojects {
appPackageName = 'com.ansdomagiclingpixeldungeon.ling'
appVersionCode =700925
appVersionName = '0.6.0.0-Beta21-p3-PreTest4.2'
appVersionName = '0.6.0.0-Beta21-p3-PreTest4.3'
appJavaCompatibility = JavaVersion.VERSION_1_8

Binary file not shown.

After

Width:  |  Height:  |  Size: 45 KiB

View File

@ -12,7 +12,7 @@ actors.mobs.bosses.crivusfruits$diedblobs.desc=一团红色的毒雾从克里弗
actors.mobs.bosses.crivusfruits$diedblobs.csed=果实爆开后迸射出一些气味清新的红色气体,用来做空气清新剂似乎挺不错的。
actors.mobs.bosses.crivusfruitslasher.name=魔化藤
actors.mobs.bosses.crivusfruitslasher.desc=藤蔓没有智慧,它们的存在价值就是保护果实。不论是不小心靠近果实的“小动物”,还是企图清理枯藤更进一步的冒险者,都被这些藤蔓绞死成孕育果实的肥料了。\n\n受到来自英雄伤害时将给予英雄4点物理伤害如果护甲等级大于等于3则没有反伤。
actors.mobs.bosses.crivusfruitslasher.desc=藤蔓没有智慧,它们的存在价值就是保护果实。不论是不小心靠近果实的“小动物”,还是企图清理枯藤更进一步的冒险者,都被这些藤蔓绞死成孕育果实的肥料了。
###SPD1.3

View File

@ -1,6 +1,17 @@
####MLPD-P3文本
items.weapon.melee.lifetreesword.name=“倒悬的生命树”
items.weapon.melee.lifetreesword.desc=克里弗斯之果破碎时,四周的藤蔓缠结在暴露出的种子上,形成剑的形状。剑身触碰到生物时会汲取他们的生命力提供给种子,期待着它再一结出猩红的果实。\n\n特别说明克里弗斯之果Boss专武每击杀_100只怪物_掉落一颗克里弗斯幼果,并重置杀敌计数。\n\n杀敌数:
items.weapon.melee.lifetreesword.desc=克里弗斯之果破碎时,四周的藤蔓缠结在暴露出的种子上,形成剑的形状。剑身触碰到生物时会汲取他们的生命力提供给种子,期待着它再一结出猩红的果实。\n\n这是一个比较精准的武器。\n\n特别说明克里弗斯之果Boss专武每击杀_75只怪物_可以使用特殊武器技能,并重置杀敌计数。\n\n杀敌点数:
items.weapon.melee.lifetreesword.ac_summon=召唤幽蓝藤蔓
items.weapon.melee.lifetreesword$crivusfruitsfriend$1.crivusfruitslasher_title=要摧毁这个幽蓝藤蔓吗?
items.weapon.melee.lifetreesword$crivusfruitsfriend$1.crivusfruitslasher_body=一旦摧毁藤蔓它将会立刻死亡。但会返还你70杀怪点数。
items.weapon.melee.lifetreesword$crivusfruitsfriend$1.crivusfruitslasher_confirm=是的,我确定!
items.weapon.melee.lifetreesword$crivusfruitsfriend$1.crivusfruitslasher_cancel=不,我改变主意了。
items.weapon.melee.lifetreesword.not_chare=没有足够的杀怪点数以释放武器的特殊战技。
items.weapon.melee.lifetreesword$crivusfruitsfriend.name=幽蓝藤蔓
items.weapon.melee.lifetreesword$crivusfruitsfriend.desc=这一定是当初让你吃尽苦头的克里弗斯之果的幼苗,看起来它把你认为是它的父母了,它会帮你消灭一切坏东西。
items.weapon.melee.lifetreesword.badlocation=不能将藤蔓放在墙壁,裂缝,或者无意义的地块上!
items.weapon.melee.lifetreesword.nolongrange=无法召唤藤蔓,因为召唤的位置太远。
items.wands.wand.summon=选择要召唤的位置
items.food.crivusfruitsfood.name=克里弗斯幼果
items.food.crivusfruitsfood.desc=从“倒悬的生命树”中掉落的果实,吃上去有丝丝血腥味。

View File

@ -357,7 +357,9 @@ windows.wndstory.sewers=繁茂的林木构筑成了地牢的表层部分。尽
windows.wndstory.sewersboss=森林的底部并不像往常那样只有树根,而是遍布着翠绿的藤蔓。\n它们编织成一张大网将所有不慎跌落谷底的生命体供给给中间那粒鲜红的果实。\n这里是森林一切生命力的源泉这里是森林之肺。
windows.wndstory.prison=多年以前一座地下监狱为了收容危险的犯罪者而建立于此。由于其严格的监管和高安全性,地表各处的囚犯都被带到这里经受时间的折磨。 \n\n但不久之后下方充斥着黑暗的瘴气在这里弥漫开来扭曲了罪犯和狱卒的心智。\n\n监狱里充斥开来的混乱使其彻底失去了秩序于是城市封锁了整个监狱。现今已经没有人知道这些高墙之下经历过无数死亡的生物究竟会是什么样子...\n\n现在这里已经乱套你只能将所有东西全部杀掉。
#windows.wndstory.prison=多年以前一座地下监狱为了收容危险的犯罪者而建立于此。由于其严格的监管和高安全性,地表各处的囚犯都被带到这里经受时间的折磨。 \n\n但不久之后下方充斥着黑暗的瘴气在这里弥漫开来扭曲了罪犯和狱卒的心智。\n\n监狱里充斥开来的混乱使其彻底失去了秩序于是城市封锁了整个监狱。现今已经没有人知道这些高墙之下经历过无数死亡的生物究竟会是什么样子...\n\n现在这里已经乱套你只能将所有东西全部杀掉。
windows.wndstory.prison=后续场景尚未开发目前暂时为P2的内容。
windows.wndstory.prisonboss=如果你做了坏事,就会付出与之相匹配的代价。\n\n希望与绝望是一个相对量\n\n这是她曾经对天狗说过的话\n\n\
\n\n\n\n\n\n\

View File

@ -57,6 +57,8 @@ public class Assets {
public static final String TILES_SEWERS = "environment/tiles_sewers.png";
public static final String TILES_PRISON = "environment/tiles_prison.png";
public static final String TILES_COLDCHEST = "environment/tiles_coldchest.png";
public static final String TILES_CAVES = "environment/tiles_caves.png";
public static final String TILES_CITY = "environment/tiles_city.png";
public static final String TILES_HALLS = "environment/tiles_halls.png";

View File

@ -149,11 +149,6 @@ public class CrivusFruitsLasher extends Mob {
}
if(this.HT!=HP ) {
HP = Math.min(HT, HP + 1);
this.sprite.showStatus(CharSprite.POSITIVE, "+2");
}
return super.act();
}
@ -188,6 +183,12 @@ public class CrivusFruitsLasher extends Mob {
public int attackProc(Char enemy, int damage) {
damage = super.attackProc( enemy, damage );
Buff.affect( enemy, Cripple.class, 2f );
if(this.HT!=HP && enemy instanceof Hero ) {
HP = Math.min(HT, HP + 1);
this.sprite.showStatus(CharSprite.POSITIVE, "+2");
}
return super.attackProc(enemy, damage);
}

View File

@ -36,8 +36,13 @@ import com.shatteredpixel.shatteredpixeldungeon.effects.Speck;
import com.shatteredpixel.shatteredpixeldungeon.items.Generator;
import com.shatteredpixel.shatteredpixeldungeon.items.Item;
import com.shatteredpixel.shatteredpixeldungeon.items.armor.Armor;
import com.shatteredpixel.shatteredpixeldungeon.items.artifacts.AlchemistsToolkit;
import com.shatteredpixel.shatteredpixeldungeon.items.artifacts.Artifact;
import com.shatteredpixel.shatteredpixeldungeon.items.artifacts.CapeOfThorns;
import com.shatteredpixel.shatteredpixeldungeon.items.artifacts.ChaliceOfBlood;
import com.shatteredpixel.shatteredpixeldungeon.items.artifacts.DriedRose;
import com.shatteredpixel.shatteredpixeldungeon.items.artifacts.SandalsOfNature;
import com.shatteredpixel.shatteredpixeldungeon.items.artifacts.TimekeepersHourglass;
import com.shatteredpixel.shatteredpixeldungeon.items.potions.brews.BlizzardBrew;
import com.shatteredpixel.shatteredpixeldungeon.items.potions.brews.Brew;
import com.shatteredpixel.shatteredpixeldungeon.items.potions.brews.CausticBrew;
@ -363,14 +368,27 @@ public class RedDragon extends NPC {
Item item = randomArtifact();
if(item != null) {
armor = (Artifact) Generator.random(Generator.Category.ARTIFACT);
switch (Random.Int(6)){
case 1:
armor = new CapeOfThorns(); break;
case 2:
armor = new AlchemistsToolkit(); break;
case 3:
armor = new ChaliceOfBlood(); break;
case 4:
armor = new DriedRose(); break;
case 5:
armor = new SandalsOfNature(); break;
case 6:
armor = new TimekeepersHourglass(); break;
}
} else {
switch (Random.chances(new float[]{0, 0, 10, 6, 3, 1})){
default:
case 2: armor = new CapeOfThorns(); break;
case 2: armor = new CapeOfThorns();break;
case 3: armor = new CapeOfThorns();break;
case 4: armor = new CapeOfThorns(); break;
case 5: armor = new CapeOfThorns(); break;
case 4: armor = new CapeOfThorns();break;
case 5: armor = new CapeOfThorns();break;
}
}
RingT = (Wand) Generator.random(Generator.Category.WAND);

View File

@ -55,7 +55,7 @@ public class WandOfBlueFuck extends DamageWand {
{
image = ItemSpriteSheet.DG6;
collisionProperties = Ballistica.MAGIC_BOLT | Ballistica.MAGIC_BOLT;
collisionProperties = Ballistica.MAGIC_BOLT;
}
public static class Recipe extends com.shatteredpixel.shatteredpixeldungeon.items.Recipe.SimpleRecipe {

View File

@ -22,20 +22,101 @@
package com.shatteredpixel.shatteredpixeldungeon.items.weapon.melee;
import com.shatteredpixel.shatteredpixeldungeon.Dungeon;
import com.shatteredpixel.shatteredpixeldungeon.actors.Actor;
import com.shatteredpixel.shatteredpixeldungeon.actors.Char;
import com.shatteredpixel.shatteredpixeldungeon.items.food.CrivusFruitsFood;
import com.shatteredpixel.shatteredpixeldungeon.actors.blobs.ToxicGas;
import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Buff;
import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Cripple;
import com.shatteredpixel.shatteredpixeldungeon.actors.hero.Hero;
import com.shatteredpixel.shatteredpixeldungeon.actors.mobs.Mob;
import com.shatteredpixel.shatteredpixeldungeon.actors.mobs.Rat;
import com.shatteredpixel.shatteredpixeldungeon.effects.CellEmitter;
import com.shatteredpixel.shatteredpixeldungeon.effects.MagicMissile;
import com.shatteredpixel.shatteredpixeldungeon.effects.Speck;
import com.shatteredpixel.shatteredpixeldungeon.items.wands.Wand;
import com.shatteredpixel.shatteredpixeldungeon.messages.Messages;
import com.shatteredpixel.shatteredpixeldungeon.scenes.CellSelector;
import com.shatteredpixel.shatteredpixeldungeon.scenes.GameScene;
import com.shatteredpixel.shatteredpixeldungeon.sprites.ItemSpriteSheet;
import com.shatteredpixel.shatteredpixeldungeon.utils.GLog;
import com.shatteredpixel.shatteredpixeldungeon.windows.WndOptions;
import com.watabou.noosa.Game;
import com.watabou.utils.Bundle;
import com.watabou.utils.Callback;
import com.watabou.utils.Random;
import java.util.ArrayList;
public class LifeTreeSword extends MeleeWeapon {
{
image = ItemSpriteSheet.LifeTreeSword;
hitSoundPitch = 1f;
ACC = 1.28f; //28% boost to accuracy
tier = 3;
defaultAction=AC_SUMMON;
}
@Override
public ArrayList<String> actions(Hero hero ) {
ArrayList<String> actions = super.actions( hero );
actions.add(AC_SUMMON);
return actions;
}
@Override
public void execute( Hero hero, String action ) {
super.execute(hero, action);
if (action.equals( AC_SUMMON )) {
curUser = hero;
curItem = this;
if (getFood > 74){
GameScene.selectCell( summonpos );
} else {
GLog.w( Messages.get(LifeTreeSword.class, "not_chare") );
}
}
}
public void teleportToLocation(int pos){
if (Dungeon.level.avoid[pos] || !Dungeon.level.passable[pos]
|| Actor.findChar(pos) != null){
GLog.n( Messages.get(LifeTreeSword.class, "badlocation") );
return;
} else if (Dungeon.level.distance(pos, Dungeon.hero.pos) >= 3) {
GLog.n( Messages.get(LifeTreeSword.class, "nolongrange") );
return;
}
CrivusFruitsFriend ward = new CrivusFruitsFriend();
ward.pos = pos;
GameScene.add(ward, 1f);
getFood=0;
Dungeon.level.occupyCell(ward);
ward.HP = ward.HT = 3 + LifeTreeSword.curItem.buffedLvl()/3;
ward.defenseSkill = 4 + LifeTreeSword.curItem.buffedLvl()/3;
ward.sprite.emitter().burst(MagicMissile.WardParticle.UP,6);
Dungeon.level.pressCell(pos);
CellEmitter.get(ward.pos).burst(Speck.factory(Speck.EVOKE), 4);
}
protected CellSelector.Listener summonpos = new CellSelector.Listener() {
@Override
public void onSelect(Integer target) {
if (target != null) {
teleportToLocation(target);
}
}
@Override
public String prompt() {
return Messages.get(Wand.class, "summon");
}
};
public static final String AC_SUMMON = "summon";
public String desc() {
return Messages.get(this, "desc")+"_"+getFood+"_";
}
@ -46,17 +127,10 @@ public class LifeTreeSword extends MeleeWeapon {
getFood += 1;
}
if (defender.HP <= damage && getFood > 99){
Dungeon.level.drop( new CrivusFruitsFood(), defender.pos ).sprite.drop();
getFood=0;
}
return super.proc(attacker, defender, damage);
}
private int getFood = 0;
private int getFood;
public void restoreFromBundle(Bundle bundle) {
super.restoreFromBundle(bundle);
@ -70,11 +144,116 @@ public class LifeTreeSword extends MeleeWeapon {
@Override
public int max(int lvl) {
return 12+lvl;
return 12+lvl*2;
}
public int min(int lvl) {
return 9+lvl*2;
return 9+lvl;
}
public class CrivusFruitsFriend extends Rat {
{
spriteClass = CrivusFruitsRedSprites.class;
alignment = Alignment.ALLY;
state = WANDERING = new Waiting();
properties.add(Property.IMMOVABLE);
}
@Override
protected boolean getCloser(int target) {
return true;
}
@Override
public int damageRoll() {
return Random.NormalIntRange( 5, 8 );
}
@Override
public int attackSkill( Char target ) {
return 6;
}
@Override
public int drRoll() {
return Random.NormalIntRange(0, 4);
}
@Override
protected boolean getFurther(int target) {
return true;
}
private class Waiting extends Mob.Wandering{}
{
immunities.add( ToxicGas.class );
}
@Override
public int attackProc(Char enemy, int damage) {
damage = super.attackProc( enemy, damage );
Buff.affect( enemy, Cripple.class, 2f );
return super.attackProc(enemy, damage);
}
@Override
public void damage(int dmg, Object src) {
if (dmg >= 0){
//限伤1
dmg = 1;
}
super.damage(dmg, src);
}
@Override
public boolean interact( Char c ) {
if (c != Dungeon.hero){
return true;
}
Game.runOnRenderThread(new Callback() {
@Override
public void call() {
GameScene.show(new WndOptions( sprite(),
Messages.get(this, "crivusfruitslasher_title"),
Messages.get(this, "crivusfruitslasher_body"),
Messages.get(this, "crivusfruitslasher_confirm"),
Messages.get(this, "crivusfruitslasher_cancel") ){
@Override
protected void onSelect(int index) {
if (index == 0){
die(null);
getFood=70;
}
}
});
}
});
return true;
}
@Override
public void die(Object cause) {
super.die(cause);
}
}
public static class CrivusFruitsRedSprites extends com.shatteredpixel.shatteredpixeldungeon.sprites.RotLasherSprite {
public CrivusFruitsRedSprites(){
super();
tint(0, 1, 1, 0.4f);
}
@Override
public void resetColor() {
super.resetColor();
tint(0, 1, 1, 0.4f);
}
}
}

View File

@ -0,0 +1,70 @@
package com.shatteredpixel.shatteredpixeldungeon.levels;
import com.shatteredpixel.shatteredpixeldungeon.Assets;
//宝藏迷宫 10层
public class ColdChestBossLevel extends Level {
private State state;
//地图状态
public enum State {
START,
MAZE_START,
VSBOSS_START,
FIND_START,
WON
}
@Override
protected boolean build() {
setSize(9,7);
this.entrance = 0;
this.exit = 0;
state = State.START;
setMapStart();
return true;
}
private static final short W = Terrain.WALL;
private static final short E = Terrain.EMPTY;
private static final short X = Terrain.EXIT;
private static final short R = Terrain.ENTRANCE;
private static final int[] WorldRoomShort = {
W, W, W, W, W, W, W, W,W,
W, E, E, E, E, E, E, X,W,
W, E, E, E, E, E, E, E,W,
W, E, E, E, E, E, E, E,W,
W, E, E, E, E, E, E, E,W,
W, E, E, E, E, E, E, R,W,
W, W, W, W, W, W, W, W,W,
};
private void setMapStart() {
entrance = 0;
exit = 0;
map = WorldRoomShort.clone();
}
@Override
protected void createMobs() {
}
@Override
protected void createItems() {
}
public String tilesTex() {
return Assets.Environment.TILES_COLDCHEST;
}
public String waterTex() {
return Assets.Environment.WATER_PRISON;
}
}

View File

@ -187,6 +187,8 @@ public abstract class Level implements Bundlable {
private static final String BLOBS = "blobs";
private static final String FEELING = "feeling";
//自用的地块查找
public static int distancex(int a, int b) {
int ax = a % getWidth();
int ay = a / getWidth();

View File

@ -25,10 +25,14 @@ import java.util.Locale;
public enum Languages {
CHINESE("中文", "", Status.REVIEWED, null, null),
ENGLISH("English", "en", Status.INCOMPLETE, new String[]{"JDSALing","Noodlemire"}, null),
ENGLISH("English", "en", Status.INCOMPLETE, new String[]{"JDSALing","Noodlemire","Aeonius"}, null),
HARDCHINESE("繁體中文", "zh_TW", Status.INCOMPLETE, new String[]{"JDSALing"},
new String[]{"那些回忆","冷群"}),
JAPANESE("日本語", "ja", Status.INCOMPLETE, new String[]{"Gosamaru","FromBeyond"}, new String[]{"Gosamaru",
GREEK("ελληνικά", "el", Status.INCOMPLETE, new String[]{"JDSALing","Aeonius", "Saxy"}, new String[]{
"DU_Clouds",
"VasKyr", "YiorgosH", "fr3sh", "stefboi", "toumbo", "val.exe"}),
JAPANESE("日本語","ja", Status.INCOMPLETE, new String[]{"JDSALing","Gosamaru","FromBeyond"}, new String[]{
"Gosamaru",
"Otogiri",
"Siraore_Rou", "amama",
"daingewuvzeevisiddfddd", "kiyofumimanabe", "librada", "mocklike", "tomofumikitano"});

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.1f;
fadeTime = 0.75f;
}
SkinnedBlock bg = new SkinnedBlock(Camera.main.width, Camera.main.height, loadingAsset ){