Update P3-T4

This commit is contained in:
LingASDJ 2023-02-24 19:59:49 +08:00
parent 40cd0f8370
commit f960b0bf76
17 changed files with 225 additions and 45 deletions

1
.gitignore vendored
View File

@ -37,3 +37,4 @@ desktop/replay_pid17852.log
desktop/replay_pid21216.log
desktop/replay_pid7460.log
core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/hero/HeroClass$1.smali
core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/ColdChestBossLevel.smali

Binary file not shown.

After

Width:  |  Height:  |  Size: 706 B

View File

@ -14,6 +14,8 @@ actors.mobs.bosses.crivusfruits$diedblobs.csed=果实爆开后迸射出一些气
actors.mobs.bosses.crivusfruitslasher.name=魔化藤
actors.mobs.bosses.crivusfruitslasher.desc=藤蔓没有智慧,它们的存在价值就是保护果实。不论是不小心靠近果实的“小动物”,还是企图清理枯藤更进一步的冒险者,都被这些藤蔓绞死成孕育果实的肥料了。
actors.mobs.npcs.pinkling.name=紫凛
actors.mobs.npcs.pinkling.desc=紫凛究竟是谁,我们无从得知。\n\n但你能从周围的能量波动感受到她绝对不是人类。
###SPD1.3
text.herostat.item_wnd_depth = 层数:

Binary file not shown.

After

Width:  |  Height:  |  Size: 235 B

View File

@ -320,6 +320,9 @@ public class Assets {
public static final String COLDRAT = "sprites/coldrat.png";
public static final String REDSWARM = "sprites/RedSearm.png";
public static final String REN = "Ren/ren.png";
public static final String DKGirl = "Npcs/DKGirl.png";
public static final String WHITE = "Npcs/White.png";
public static final String BBAT = "sprites/bloodbat.png";

View File

@ -55,6 +55,7 @@ import com.shatteredpixel.shatteredpixeldungeon.items.wands.WandOfWarding;
import com.shatteredpixel.shatteredpixeldungeon.journal.Notes;
import com.shatteredpixel.shatteredpixeldungeon.levels.CavesLevel;
import com.shatteredpixel.shatteredpixeldungeon.levels.CityLevel;
import com.shatteredpixel.shatteredpixeldungeon.levels.ColdChestBossLevel;
import com.shatteredpixel.shatteredpixeldungeon.levels.DeadEndLevel;
import com.shatteredpixel.shatteredpixeldungeon.levels.ForestBossLevel;
import com.shatteredpixel.shatteredpixeldungeon.levels.HallsLevel;
@ -64,7 +65,6 @@ import com.shatteredpixel.shatteredpixeldungeon.levels.LinkLevel;
import com.shatteredpixel.shatteredpixeldungeon.levels.NewCavesBossLevel;
import com.shatteredpixel.shatteredpixeldungeon.levels.NewCityBossLevel;
import com.shatteredpixel.shatteredpixeldungeon.levels.NewHallsBossLevel;
import com.shatteredpixel.shatteredpixeldungeon.levels.PrisonBossLevel;
import com.shatteredpixel.shatteredpixeldungeon.levels.PrisonLevel;
import com.shatteredpixel.shatteredpixeldungeon.levels.SewerLevel;
import com.shatteredpixel.shatteredpixeldungeon.levels.ShopBossLevel;
@ -401,7 +401,7 @@ public class Dungeon {
// if((Statistics.boss_enhance & 0x2) != 0) level = new DimandKingLevel();
// else
level = new PrisonBossLevel();
level = new ColdChestBossLevel();
break;
case 11:
case 12:

View File

@ -2697,9 +2697,6 @@ public class Hero extends Char {
//TODO 灯火前行逻辑
public void damageLantern(int value){
lanterfire -= value;
// if(lanterfire <= 0){
// damage(HT,this);
// }
}
public void healLantern(int value){

View File

@ -0,0 +1,8 @@
package com.shatteredpixel.shatteredpixeldungeon.actors.mobs.npcs;
public class PinkLing extends NTNPC{
{
spriteClass = PinkLingSprite.class;
properties.add(Property.IMMOVABLE);
}
}

View File

@ -0,0 +1,19 @@
package com.shatteredpixel.shatteredpixeldungeon.actors.mobs.npcs;
import com.shatteredpixel.shatteredpixeldungeon.Assets;
import com.shatteredpixel.shatteredpixeldungeon.sprites.CharSprite;
import com.watabou.noosa.TextureFilm;
public class PinkLingSprite extends CharSprite {
public PinkLingSprite() {
texture( Assets.Sprites.DKGirl );
TextureFilm pinkling = new TextureFilm(this.texture, 16, 16);
this.idle = new Animation(1, true);
this.idle.frames(pinkling, 0, 1, 2, 3);
this.run = new Animation(10, true);
this.run.frames(pinkling, 0);
this.die = new Animation(10, false);
this.die.frames(pinkling, 0);
this.play(this.idle);
}
}

View File

@ -12,19 +12,25 @@ import com.watabou.utils.Bundle;
import com.watabou.utils.Callback;
import com.watabou.utils.Random;
public class REN extends NPC {
import java.util.ArrayList;
public class REN extends NTNPC {
private static final String[] TXT_RANDOM = {"今日、明日、昨日...日日都在担忧,日日都在惶恐...发狂的因陀罗在注视着你,觊觎着你的光辉...","在呕吐的灾难中渡过的日月,啊啊...那个残忍的机器,名为‘δ’的浩劫,就要到来了...","仍不能理解的你,最终会明白这份崇高的支言片语的..."};
{
spriteClass = RenSprite.class;
chat = new ArrayList<String>() {
{
add((Messages.get(REN.class, "message1")));
add((Messages.get(REN.class, "message2")));
add((Messages.get(REN.class, "message3")));
}
};
properties.add(Property.IMMOVABLE);
}
private boolean first=true;
private boolean secnod=true;
private boolean rd=true;
private static final String FIRST = "first";
private static final String SECNOD = "secnod";
@ -40,8 +46,6 @@ public class REN extends NPC {
public void restoreFromBundle(Bundle bundle) {
super.restoreFromBundle(bundle);
first = bundle.getBoolean(FIRST);
secnod = bundle.getBoolean(SECNOD);
rd = bundle.getBoolean(RD);
}
@Override
@ -73,16 +77,10 @@ public class REN extends NPC {
sprite.turnTo(pos, Dungeon.hero.pos);
if(first) {
if(first){
WndQuest.chating(this,chat);
first=false;
tell(Messages.get(REN.class, "message1"));
}else if(secnod) {
secnod=false;
tell(Messages.get(REN.class, "message2"));
} else if(rd) {
rd=false;
tell(Messages.get(REN.class, "message3"));
} else {
}else {
GLog.i(TXT_RANDOM[Random.Int(TXT_RANDOM.length)]);
}

View File

@ -0,0 +1,90 @@
package com.shatteredpixel.shatteredpixeldungeon.effects.particles;
import com.shatteredpixel.shatteredpixeldungeon.Dungeon;
import com.shatteredpixel.shatteredpixeldungeon.tiles.DungeonTilemap;
import com.watabou.noosa.Game;
import com.watabou.noosa.Group;
import com.watabou.noosa.particles.Emitter;
import com.watabou.noosa.particles.PixelParticle;
import com.watabou.utils.PointF;
import com.watabou.utils.Random;
public class ColdSnowParticles extends PixelParticle {
public static final Emitter.Factory FACTORY = new Emitter.Factory() {
@Override
public void emit( Emitter emitter, int index, float x, float y ) {
((ColdSnowParticles)emitter.recycle(ColdSnowParticles.class)).reset( x, y );
}
};
private static float angle = Random.Float(6.283185F);
private static PointF speed = (new PointF()).polar(angle, 10.0F);
private float size;
public ColdSnowParticles() {
texture("snowflake.png");
lifespan = Random.Float( 1,2);
scale.set( size = Random.Float() );
origin.set(width/4,height/4);
}
public void reset(float x, float y) {
revive();
left = lifespan;
super.speed.set(speed);
super.speed.scale( size );
this.x = x - super.speed.x * lifespan / 2;
this.y = y - super.speed.y * lifespan / 2;
origin.set(width/2,height/2);
angle = 0.85F;
angularSpeed=120;
speed = (new PointF()).polar(angle, 16.0F);
am=0;
color(0x8780FFFF);
}
//
@Override
public void update() {
super.update();
float p = left / lifespan;
am = (p < 0.5f ? p : 1 - p) * size * 1f;
}
public static class Snow extends Group {
private float delay;
private int pos;
private float x;
private float y;
public Snow(int pos) {
this.pos = pos;
PointF pointF = DungeonTilemap.tileToWorld(pos);
x = pointF.x;
y = pointF.y;
delay = Random.Float(3.0F);
}
public void update() {
super.update();
if (visible = (pos < Dungeon.level.heroFOV.length && Dungeon.level.heroFOV[pos])) {
float f = delay - Game.elapsed;
delay = f;
if (f <= 0.0F) {
delay = Random.Float(5.0F);
((ColdSnowParticles)recycle(ColdSnowParticles.class)).reset(this.x + Random.Float(16.0F), this.y + Random.Float(16.0F));
}
}
}
}
}

View File

@ -1,54 +1,109 @@
package com.shatteredpixel.shatteredpixeldungeon.levels;
import com.shatteredpixel.shatteredpixeldungeon.Assets;
import com.shatteredpixel.shatteredpixeldungeon.Dungeon;
import com.shatteredpixel.shatteredpixeldungeon.actors.mobs.Mob;
import com.shatteredpixel.shatteredpixeldungeon.actors.mobs.bosses.DimandKing;
//宝藏迷宫 10层
public class ColdChestBossLevel extends Level {
private State state;
//地图状态
public enum State {
START,
MAZE_START,
VSBOSS_START,
FIND_START,
WON
WIN
}
@Override
protected boolean build() {
setSize(9,7);
setSize(35,35);
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 E = Terrain.CHASM;
private static final short X = Terrain.EXIT;
private static final short R = Terrain.ENTRANCE;
private static final short J = Terrain.ENTRANCE;
private static final short O = Terrain.WATER;
private static final short P = Terrain.EMPTY_SP;
private static final short B = Terrain.EMPTY_SP;
private static final short K = Terrain.EMPTY;
private static final short D = Terrain.DOOR;
private static final short T = Terrain.PEDESTAL;
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,
W,W,W,W,W,W,W,W,W,W,W,W,W,W,W,W,W,W,W,W,W,W,W,W,W,W,W,W,W,W,W,W,W,W,W,
W,E,E,E,W,W,W,W,W,E,E,E,E,E,E,E,W,J,W,E,E,E,E,E,E,E,W,W,W,W,W,E,E,E,W,
W,E,E,E,O,O,O,O,O,E,E,E,E,E,E,E,W,P,W,E,E,E,E,E,E,E,O,O,O,O,O,E,E,E,W,
W,E,E,E,P,P,P,P,P,E,E,E,E,E,E,E,W,P,W,E,E,E,E,E,E,E,P,P,P,P,P,E,E,E,W,
W,E,E,E,P,E,E,E,P,E,E,E,E,E,E,E,W,K,W,E,E,E,E,E,E,E,P,E,E,E,P,E,E,E,W,
W,E,P,E,P,E,P,E,P,E,P,E,P,E,P,E,W,P,W,E,P,E,P,E,P,E,P,E,P,E,P,E,P,E,W,
W,E,E,E,P,E,E,E,P,E,E,E,E,E,E,E,W,P,W,E,E,E,E,E,E,E,P,E,E,E,P,E,E,E,W,
W,E,E,E,P,P,P,P,P,E,E,E,E,E,E,E,W,P,W,E,E,E,E,E,E,E,P,P,P,P,P,E,E,E,W,
W,E,E,E,E,E,P,E,E,E,E,E,E,E,E,E,W,K,W,E,E,E,E,E,E,E,E,E,P,E,E,E,E,E,W,
W,E,E,E,E,E,E,E,E,E,E,E,E,E,E,E,W,P,W,E,E,E,E,E,E,E,E,E,E,E,E,E,E,E,W,
W,E,E,E,E,E,P,E,W,W,W,W,E,E,E,E,W,P,W,E,E,E,E,W,W,W,W,E,P,E,E,E,E,E,W,
W,E,E,E,E,E,E,E,W,K,K,W,W,W,W,W,W,D,W,W,W,W,W,W,K,K,W,E,E,E,E,E,E,E,W,
W,E,E,E,E,E,P,E,W,K,K,K,K,K,K,K,K,K,K,K,K,K,K,K,K,K,W,E,P,E,E,E,E,E,W,
W,E,E,E,E,E,E,E,W,K,K,K,K,K,K,K,K,O,K,K,K,K,K,K,K,K,W,E,E,E,E,E,E,E,W,
W,W,W,W,W,W,W,W,W,K,K,K,K,K,K,K,O,O,O,K,K,K,K,K,K,K,W,W,W,W,W,W,W,W,W,
W,B,B,B,B,B,B,B,W,K,K,K,K,K,K,O,O,O,O,O,K,K,K,K,K,K,W,B,B,B,B,B,B,B,W,
W,B,K,K,K,K,K,B,W,K,K,K,K,K,O,O,O,K,O,O,O,K,K,K,K,K,W,B,K,K,K,K,K,B,W,
W,B,K,B,B,B,K,B,W,K,K,K,K,K,O,O,K,K,K,O,O,K,K,K,K,K,W,B,K,B,B,B,K,B,W,
W,B,B,B,T,B,B,B,W,K,K,K,K,O,O,K,O,O,O,K,O,O,K,K,K,K,W,B,B,B,T,B,B,B,W,
W,B,K,B,B,B,K,B,D,P,P,K,K,O,K,K,O,K,O,K,K,O,K,K,P,P,D,B,K,B,B,B,K,B,W,
W,B,K,K,K,K,K,B,W,K,K,K,K,O,O,K,O,O,O,K,O,O,K,K,K,K,W,B,K,K,K,K,K,B,W,
W,B,K,K,K,K,K,B,W,K,K,K,K,K,O,O,K,K,K,O,O,K,K,K,K,K,W,B,K,K,K,K,K,B,W,
W,B,B,B,B,B,B,B,W,K,K,K,K,K,O,O,O,K,O,O,O,K,K,K,K,K,W,B,B,B,B,B,B,B,W,
W,W,W,W,W,W,W,W,W,K,K,K,K,K,K,O,O,O,O,O,K,K,K,K,K,K,W,W,W,W,W,W,W,W,W,
W,E,E,W,T,W,E,E,W,K,K,K,K,K,K,K,O,O,O,K,K,K,K,K,K,K,W,E,W,T,W,E,E,E,W,
W,E,E,W,K,W,E,E,W,K,K,W,W,W,K,K,K,O,K,K,K,W,W,W,K,K,W,E,W,K,W,E,E,E,W,
W,E,E,W,K,W,E,E,W,K,K,W,E,W,K,K,K,K,K,K,K,W,E,W,K,K,W,E,W,K,W,E,E,E,W,
W,E,E,W,K,W,E,E,W,W,W,W,E,W,K,K,K,P,K,K,K,W,E,W,W,W,W,E,W,K,W,E,E,E,W,
W,E,E,W,K,W,E,E,E,E,E,E,E,W,K,K,K,K,K,K,K,W,E,E,E,E,E,E,W,K,W,E,E,E,W,
W,E,E,W,K,W,E,E,E,E,E,E,E,W,K,K,K,P,K,K,K,W,E,E,E,E,E,E,W,K,W,E,E,E,W,
W,E,E,W,K,W,W,W,W,W,W,W,W,W,K,K,P,P,P,K,K,W,W,W,W,W,W,W,W,K,W,E,E,E,W,
W,E,E,W,K,K,K,K,K,K,K,K,K,D,K,P,P,X,P,P,K,D,K,K,K,K,K,K,K,K,W,E,E,E,W,
W,E,E,W,W,W,W,W,W,W,W,W,W,W,K,K,P,P,P,K,K,W,W,W,W,W,W,W,W,W,W,E,E,E,W,
W,E,E,E,E,E,E,E,E,E,E,E,E,W,K,K,K,P,K,K,K,W,E,E,E,E,E,E,E,E,E,E,E,E,W,
W,W,W,W,W,W,W,W,W,W,W,W,W,W,W,W,W,W,W,W,W,W,W,W,W,W,W,W,W,W,W,W,W,W,W,
};
private void setMapStart() {
entrance = 0;
exit = 0;
entrance = 35*2+17;
//exit = 0;
map = WorldRoomShort.clone();
}
private void setMazeStart(Level level) {
}
public void progress(){
switch (state) {
case START:
for (Mob mob : (Iterable<Mob>) Dungeon.level.mobs.clone()) {
if (mob instanceof DimandKing) {
if(mob.HP <= 180){
state = State.MAZE_START;
}
}
}
}
}
@Override
protected void createMobs() {

View File

@ -52,6 +52,7 @@ import com.shatteredpixel.shatteredpixeldungeon.actors.mobs.Bestiary;
import com.shatteredpixel.shatteredpixeldungeon.actors.mobs.Mob;
import com.shatteredpixel.shatteredpixeldungeon.actors.mobs.YogFist;
import com.shatteredpixel.shatteredpixeldungeon.actors.mobs.npcs.Sheep;
import com.shatteredpixel.shatteredpixeldungeon.effects.particles.ColdSnowParticles;
import com.shatteredpixel.shatteredpixeldungeon.effects.particles.FlowParticle;
import com.shatteredpixel.shatteredpixeldungeon.effects.particles.WindParticle;
import com.shatteredpixel.shatteredpixeldungeon.items.Generator;
@ -546,6 +547,9 @@ public abstract class Level implements Bundlable {
visuals.add( new FlowParticle.Flow( i - width() ) );
}
}
if(Dungeon.depth >= 6){
visuals.add( new ColdSnowParticles.Snow(i));
}
}
return visuals;
}

View File

@ -24,7 +24,7 @@ package com.shatteredpixel.shatteredpixeldungeon.levels;
import com.shatteredpixel.shatteredpixeldungeon.Assets;
import com.shatteredpixel.shatteredpixeldungeon.Dungeon;
import com.shatteredpixel.shatteredpixeldungeon.actors.mobs.npcs.Wandmaker;
import com.shatteredpixel.shatteredpixeldungeon.effects.particles.FlameParticle;
import com.shatteredpixel.shatteredpixeldungeon.effects.particles.HalomethaneFlameParticle;
import com.shatteredpixel.shatteredpixeldungeon.levels.painters.Painter;
import com.shatteredpixel.shatteredpixeldungeon.levels.painters.PrisonPainter;
import com.shatteredpixel.shatteredpixeldungeon.levels.rooms.Room;
@ -170,7 +170,7 @@ public class PrisonLevel extends RegularLevel {
PointF p = DungeonTilemap.tileCenterToWorld( pos );
pos( p.x - 1, p.y + 2, 2, 0 );
pour( FlameParticle.FACTORY, 0.15f );
pour( HalomethaneFlameParticle.FACTORY, 0.15f );
add( new Halo( 12, 0xFFFFCC, 0.4f ).point( p.x, p.y + 1 ) );
}

View File

@ -28,6 +28,7 @@ import com.shatteredpixel.shatteredpixeldungeon.actors.Actor;
import com.shatteredpixel.shatteredpixeldungeon.actors.mobs.Mob;
import com.shatteredpixel.shatteredpixeldungeon.actors.mobs.npcs.NxhyNpc;
import com.shatteredpixel.shatteredpixeldungeon.actors.mobs.npcs.Nyz;
import com.shatteredpixel.shatteredpixeldungeon.actors.mobs.npcs.PinkLing;
import com.shatteredpixel.shatteredpixeldungeon.actors.mobs.npcs.REN;
import com.shatteredpixel.shatteredpixeldungeon.actors.mobs.npcs.Slyl;
import com.shatteredpixel.shatteredpixeldungeon.actors.mobs.npcs.obSir;
@ -159,9 +160,11 @@ public class ZeroLevel extends Level {
npc3.pos = (this.width * 18 + 20);
mobs.add(npc3);
PinkLing god1= new PinkLing();
god1.pos = (this.width * 28 + 30);
mobs.add(god1);
if (Badges.isUnlocked(Badges.Badge.NYZ_SHOP)){
if (!Badges.isUnlocked(Badges.Badge.NYZ_SHOP)){
Nyz npc4= new Nyz();
npc4.pos = (this.width * 28 + 7);
mobs.add(npc4);
@ -177,7 +180,7 @@ public class ZeroLevel extends Level {
}
public String tilesTex() {
return Assets.Environment.TILES_GOLD;
return Assets.Environment.TILES_COLD;
}
public String waterTex() {

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

@ -6,13 +6,13 @@ import com.watabou.noosa.TextureFilm;
public class RenSprite extends MobSprite {
public RenSprite() {
texture( Assets.Sprites.REN );
TextureFilm var1 = new TextureFilm(this.texture, 12, 14);
TextureFilm ren = new TextureFilm(this.texture, 12, 14);
this.idle = new Animation(2, true);
this.idle.frames(var1, new Object[]{0, 1, 2, 3});
this.idle.frames(ren, 0, 1, 2, 3);
this.run = new Animation(10, true);
this.run.frames(var1, new Object[]{0});
this.run.frames(ren, 0);
this.die = new Animation(10, false);
this.die.frames(var1, new Object[]{0});
this.die.frames(ren, 0);
this.play(this.idle);
}
}