Update Lantern Fire V2.5 Preview
This commit is contained in:
parent
18d24f86ca
commit
0f7ccfa862
|
@ -6,6 +6,7 @@ buildscript {
|
|||
dependencies {
|
||||
classpath 'com.android.tools.build:gradle:7.0.4'
|
||||
classpath 'com.google.gms:google-services:4.3.15'
|
||||
//noinspection GradleDependency
|
||||
classpath 'com.google.firebase:firebase-crashlytics-gradle:2.9.2'
|
||||
}
|
||||
}
|
||||
|
@ -16,8 +17,8 @@ allprojects {
|
|||
appName = 'Magic Ling Pixel Dungeon'
|
||||
appPackageName = 'com.ansdomagiclingpixeldungeon.ling'
|
||||
|
||||
appVersionCode =800000
|
||||
appVersionName = '0.6.1.0-Beta3(P4)'
|
||||
appVersionCode =800009
|
||||
appVersionName = '0.6.1.0-Beta3(P4.1)'
|
||||
|
||||
appJavaCompatibility = JavaVersion.VERSION_1_8
|
||||
|
||||
|
|
|
@ -1,4 +1,9 @@
|
|||
#####MLPD-P3文本
|
||||
|
||||
actors.mobs.bosses.diamondknight.name=宝箱之王
|
||||
actors.mobs.bosses.diamondknight.desc=拟态的最终结果就是无限接近人类。\n原本作用拟形的钻石宝箱外壳化作盔甲,包裹住如王般的内在。\n衪是所有拟形怪的王——至少衪是这么认为的。\n王会战斗到最后一刻,直到粉身碎骨。
|
||||
|
||||
|
||||
actors.mobs.bosses.crivusfruits.name=克里弗斯之果
|
||||
actors.mobs.bosses.crivusfruits.desc=这颗鲜红的果实将周围一切生物都化作自身的养分。身旁的触手会将不慎走进的小动物们绞杀,腐化成缠绕在四周的瘴气。但当它们感受到你手上拿着的提灯时,却表现出畏惧火焰的样子。\n\n极少有冒险者能对这株植物作出描述,在得到的只言片语中,你唯一能确定的就是“它是森林至暗的中心”。
|
||||
|
||||
|
|
|
@ -1,9 +1,7 @@
|
|||
####MLPD-P3文本
|
||||
|
||||
items.quest.starwar.name=StarWAR
|
||||
items.quest.starwar.desc=描述……
|
||||
items.quest.starwar.ac_ac_rainbowegg=彩蛋
|
||||
|
||||
items.weapon.melee.sdbsword.name=钻石大剑
|
||||
items.weapon.melee.sdbsword.desc=钻石制成的奇特大剑,现在它已经给予了足够多的能量,它回到了巅峰时刻\n剑身残留着钻石宝箱王的魔力,因此对其他魔力有着莫名的亲和性。相比于其他武器,这把武器会随着等级的提升增加更多伤害。\n这把武器攻击速度极慢,但精准极高。\n该武器已经重回巅峰,可以发射剑气。
|
||||
|
||||
items.weapon.melee.lifetreesword.name=“倒悬的生命树”
|
||||
items.weapon.melee.lifetreesword.desc=克里弗斯之果破碎时,四周的藤蔓缠结在暴露出的种子上,形成剑的形状。剑身触碰到生物时会汲取他们的生命力提供给种子,期待着它再一结出猩红的果实。\n\n这是一个比较精准的武器。\n\n特别说明:克里弗斯之果Boss专武,每击杀_75只怪物_可以使用特殊武器技能,并重置杀敌计数。\n\n杀敌点数:
|
||||
|
@ -54,6 +52,7 @@ items.lightblack.oillantern.lanteron=你点亮了提灯。
|
|||
items.lightblack.oillantern.lanterreload=你把提灯的灯油再次加满了。
|
||||
items.lightblack.oillantern.lanterneed=你没多的油瓶给提灯加油了。
|
||||
items.lightblack.oillantern.lanterneeds=你需要一个备用的油瓶给提灯加油。
|
||||
items.lightblack.oillantern.black=你的提灯已经完全熄灭,必须需要新的火种才能重新点燃……
|
||||
|
||||
items.artifacts.goldiron.name=镀金铁锤
|
||||
items.artifacts.goldiron.desc=这曾是巨魔铁匠的锤子,其中蕴含了神奇的力量。\n\n因为你一不小心把巨魔镐子给搞丢了,巨魔委托你去杀死他的阴暗面。\n\n如今,你已完成巨魔的委托,这镀金铁锤便是巨魔给予你的礼物……
|
||||
|
|
Binary file not shown.
Binary file not shown.
Before Width: | Height: | Size: 75 KiB After Width: | Height: | Size: 76 KiB |
|
@ -59,6 +59,7 @@ import com.shatteredpixel.shatteredpixeldungeon.levels.CaveTwoBossLevel;
|
|||
import com.shatteredpixel.shatteredpixeldungeon.levels.CavesGirlDeadLevel;
|
||||
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.DimandKingLevel;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.levels.DwarfMasterBossLevel;
|
||||
|
@ -407,7 +408,7 @@ public class Dungeon {
|
|||
case 10:
|
||||
if((Statistics.boss_enhance & 0x2) != 0) level = new DimandKingLevel();
|
||||
else
|
||||
level = new PrisonBossLevel();
|
||||
level = new ColdChestBossLevel();
|
||||
break;
|
||||
case 11:
|
||||
case 12:
|
||||
|
|
|
@ -22,7 +22,6 @@
|
|||
package com.shatteredpixel.shatteredpixeldungeon;
|
||||
|
||||
import com.watabou.utils.Bundle;
|
||||
import com.watabou.utils.SparseArray;
|
||||
|
||||
public class Statistics {
|
||||
public static int realdeepestFloor;
|
||||
|
@ -64,7 +63,6 @@ public class Statistics {
|
|||
//克里弗斯之果
|
||||
public static boolean crivusfruitslevel2 = false;
|
||||
|
||||
|
||||
//修复同步
|
||||
public static boolean bugsyncfixed = false;
|
||||
|
||||
|
@ -83,8 +81,6 @@ public class Statistics {
|
|||
public static float second_elapsed = 0;
|
||||
public static float turnsPassed = 0f;
|
||||
|
||||
public static SparseArray<Boolean> floorsExplored = new SparseArray<>();
|
||||
|
||||
public static void reset() {
|
||||
|
||||
goldCollected = 0;
|
||||
|
@ -123,9 +119,6 @@ public class Statistics {
|
|||
second_elapsed = 0f;
|
||||
real_seconds = 0;
|
||||
turnsPassed = 0f;
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
||||
private static final String GOLD = "score";
|
||||
|
|
|
@ -1281,7 +1281,7 @@ public class Hero extends Char {
|
|||
//there can be multiple entrance tiles, so descend on any of them
|
||||
//TODO this is slightly brittle, it assumes there are no disjointed sets of entrance tiles
|
||||
} else if (Dungeon.level.map[pos] == Terrain.ENTRANCE) {
|
||||
|
||||
|
||||
if (Dungeon.depth == 0) {
|
||||
|
||||
if (belongings.getItem(Amulet.class) == null) {
|
||||
|
@ -1300,11 +1300,11 @@ public class Hero extends Char {
|
|||
}
|
||||
} else if (Dungeon.depth == 1) {
|
||||
|
||||
if (belongings.getItem( Amulet.class ) == null) {
|
||||
if (belongings.getItem(Amulet.class) == null) {
|
||||
Game.runOnRenderThread(new Callback() {
|
||||
@Override
|
||||
public void call() {
|
||||
GameScene.show( new WndMessage( Messages.get(Hero.this, "leave2") ) );
|
||||
GameScene.show(new WndMessage(Messages.get(Hero.this, "leave2")));
|
||||
}
|
||||
});
|
||||
ready();
|
||||
|
@ -1317,19 +1317,8 @@ public class Hero extends Char {
|
|||
if (timeBubble != null) timeBubble.disarmPressedTraps();
|
||||
|
||||
InterlevelScene.mode = InterlevelScene.Mode.ASCEND;
|
||||
Game.switchScene( InterlevelScene.class );
|
||||
Game.switchScene(InterlevelScene.class);
|
||||
}
|
||||
} else {
|
||||
|
||||
curAction = null;
|
||||
|
||||
TimekeepersHourglass.timeFreeze timeFreeze = buff(TimekeepersHourglass.timeFreeze.class);
|
||||
if (timeFreeze != null) timeFreeze.disarmPressedTraps();
|
||||
Swiftthistle.TimeBubble timeBubble = buff(Swiftthistle.TimeBubble.class);
|
||||
if (timeBubble != null) timeBubble.disarmPressedTraps();
|
||||
|
||||
InterlevelScene.mode = InterlevelScene.Mode.ASCEND;
|
||||
Game.switchScene( InterlevelScene.class );
|
||||
}
|
||||
|
||||
return false;
|
||||
|
@ -2701,10 +2690,12 @@ public class Hero extends Char {
|
|||
//TODO 灯火前行逻辑
|
||||
public void damageLantern(int value){
|
||||
lanterfire -= value;
|
||||
hero.sprite.showStatus(0x808080, String.valueOf(value));
|
||||
}
|
||||
|
||||
public void healLantern(int value){
|
||||
lanterfire = Math.min(lanterfire+value,100);
|
||||
hero.sprite.showStatus(0x00ff00, String.valueOf(value));
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -26,7 +26,6 @@ import com.shatteredpixel.shatteredpixeldungeon.Badges;
|
|||
import com.shatteredpixel.shatteredpixeldungeon.Challenges;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.Dungeon;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.QuickSlot;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.SPDSettings;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Buff;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.ChampionHero;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.RandomBuff;
|
||||
|
@ -120,6 +119,7 @@ import com.shatteredpixel.shatteredpixeldungeon.items.weapon.melee.IceFishSword;
|
|||
import com.shatteredpixel.shatteredpixeldungeon.items.weapon.melee.LifeTreeSword;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.items.weapon.melee.MagesStaff;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.items.weapon.melee.RedBloodMoon;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.items.weapon.melee.SDBSword;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.items.weapon.melee.SkyShield;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.items.weapon.melee.WarHammer;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.items.weapon.melee.WornShortsword;
|
||||
|
@ -172,14 +172,9 @@ public enum HeroClass {
|
|||
new FireFishSword().quantity(1).identify().collect();
|
||||
new PotionOfInvisibility().quantity(45).identify().collect();
|
||||
new PotionOfLevitation().quantity(100).identify().collect();
|
||||
new SDBSword().quantity(1).identify().collect();
|
||||
Buff.affect(hero, ChampionHero.AntiMagic.class, 50000f);
|
||||
// Buff.affect(hero, ChampionHero.Blazing.class, ChampionHero.DURATION);
|
||||
// Buff.affect(hero, ChampionHero.Halo.class, ChampionHero.DURATION);
|
||||
// Buff.affect(hero, ChampionHero.Light.class, ChampionHero.DURATION);
|
||||
// Buff.affect(hero, ChampionHero.Blessed.class, ChampionHero.DURATION);
|
||||
// Buff.affect(hero, ChampionHero.Projecting.class, ChampionHero.DURATION);
|
||||
// Buff.affect(hero, ChampionHero.Giant.class, ChampionHero.DURATION);
|
||||
// Buff.affect(hero, ChampionHero.Growing.class, ChampionHero.DURATION);
|
||||
|
||||
new Gauntlet().quantity(1).identify().collect();
|
||||
|
||||
new Cake().quantity(100).identify().collect();
|
||||
|
@ -257,6 +252,7 @@ public enum HeroClass {
|
|||
}
|
||||
|
||||
hero.heroClass = this;
|
||||
|
||||
Talent.initClassTalents(hero);
|
||||
|
||||
Item i = new ClothArmor().identify();
|
||||
|
@ -418,26 +414,6 @@ public enum HeroClass {
|
|||
}
|
||||
}
|
||||
|
||||
public String spritesheet2() {
|
||||
|
||||
if (SPDSettings.ClassSkin()) {
|
||||
return Assets.Sprites.COMINGSOON;
|
||||
}
|
||||
|
||||
switch (this) {
|
||||
case WARRIOR: default:
|
||||
return Assets.Sprites.WARRIOR;
|
||||
case MAGE:
|
||||
return Assets.Sprites.MAGE;
|
||||
case ROGUE:
|
||||
return Assets.Sprites.ROGUE;
|
||||
case HUNTRESS:
|
||||
return Assets.Sprites.HUNTRESS;
|
||||
// case COMINGSOON:
|
||||
// return Assets.Sprites.COMINGSOON;
|
||||
}
|
||||
}
|
||||
|
||||
public String spritesheet() {
|
||||
|
||||
switch (this) {
|
||||
|
@ -453,19 +429,6 @@ public enum HeroClass {
|
|||
// return Assets.Sprites.COMINGSOON;
|
||||
}
|
||||
}
|
||||
|
||||
public String splashArt(){
|
||||
switch (this) {
|
||||
case WARRIOR: default:
|
||||
return Assets.Splashes.WARRIOR;
|
||||
case MAGE:
|
||||
return Assets.Splashes.MAGE;
|
||||
case ROGUE:
|
||||
return Assets.Splashes.ROGUE;
|
||||
case HUNTRESS:
|
||||
return Assets.Splashes.HUNTRESS;
|
||||
}
|
||||
}
|
||||
|
||||
public String[] perks() {
|
||||
switch (this) {
|
||||
|
|
|
@ -5,14 +5,10 @@
|
|||
|
||||
package com.shatteredpixel.shatteredpixeldungeon.actors.mobs;
|
||||
|
||||
import static com.shatteredpixel.shatteredpixeldungeon.Dungeon.hero;
|
||||
import static com.shatteredpixel.shatteredpixeldungeon.Statistics.lanterfireactive;
|
||||
|
||||
import com.shatteredpixel.shatteredpixeldungeon.actors.Char;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Bleeding;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Buff;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Poison;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.actors.hero.Hero;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.sprites.PoltergeistSprite;
|
||||
import com.watabou.utils.Random;
|
||||
|
||||
|
@ -30,18 +26,8 @@ public class BlackHost extends Mob {
|
|||
public int attackProc(Char var1, int var2) {
|
||||
var2 = super.attackProc(var1, var2 / 2);
|
||||
if (Random.Int(2) == 0) {
|
||||
if(lanterfireactive) {
|
||||
if (Random.Float() <= 0.04f && enemy instanceof Hero && hero.lanterfire < 55) {
|
||||
((Hero) enemy).damageLantern(2);
|
||||
hero.sprite.showStatus(0x808080, "2");
|
||||
Buff.affect(var1, Bleeding.class).set((float)(var2));
|
||||
Buff.affect(var1, Poison.class).set((float)(var2));
|
||||
die(true);
|
||||
}
|
||||
}else{
|
||||
Buff.affect(var1, Bleeding.class).set((float)(var2));
|
||||
Buff.affect(var1, Poison.class).set((float)(var2));
|
||||
}
|
||||
}
|
||||
|
||||
return var2;
|
||||
|
|
|
@ -21,9 +21,7 @@
|
|||
|
||||
package com.shatteredpixel.shatteredpixeldungeon.actors.mobs;
|
||||
|
||||
import static com.shatteredpixel.shatteredpixeldungeon.Dungeon.hero;
|
||||
import static com.shatteredpixel.shatteredpixeldungeon.Dungeon.level;
|
||||
import static com.shatteredpixel.shatteredpixeldungeon.Statistics.lanterfireactive;
|
||||
|
||||
import com.shatteredpixel.shatteredpixeldungeon.Assets;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.Badges;
|
||||
|
@ -34,7 +32,6 @@ import com.shatteredpixel.shatteredpixeldungeon.actors.blobs.Freezing;
|
|||
import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Blindness;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Buff;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Burning;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.actors.hero.Hero;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.effects.Lightning;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.effects.Splash;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.items.Gold;
|
||||
|
@ -272,12 +269,6 @@ public abstract class Elemental extends Mob {
|
|||
if (Random.Int( 2 ) == 0 && !level.water[enemy.pos]) {
|
||||
Buff.affect( enemy, Burning.class ).reignite( enemy );
|
||||
if (enemy.sprite.visible) Splash.at( enemy.sprite.center(), sprite.blood(), 5);
|
||||
if(lanterfireactive) {
|
||||
if (Random.Float() <= 0.06f && enemy instanceof Hero && hero.lanterfire < 80) {
|
||||
((Hero) enemy).damageLantern(2);
|
||||
hero.sprite.showStatus(0x808080, "2");
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -21,15 +21,11 @@
|
|||
|
||||
package com.shatteredpixel.shatteredpixeldungeon.actors.mobs;
|
||||
|
||||
import static com.shatteredpixel.shatteredpixeldungeon.Dungeon.hero;
|
||||
import static com.shatteredpixel.shatteredpixeldungeon.Statistics.lanterfireactive;
|
||||
|
||||
import com.shatteredpixel.shatteredpixeldungeon.actors.Char;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.actors.blobs.Blob;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.actors.blobs.StenchGas;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Buff;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Ooze;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.actors.hero.Hero;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.actors.mobs.npcs.Ghost;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.scenes.GameScene;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.sprites.FetidRatSprite;
|
||||
|
@ -66,16 +62,7 @@ public class FetidRat extends Rat {
|
|||
public int attackProc( Char enemy, int damage ) {
|
||||
damage = super.attackProc( enemy, damage );
|
||||
if (Random.Int(3) == 0) {
|
||||
if(lanterfireactive) {
|
||||
if (Random.Float() <= 0.2f && enemy instanceof Hero && hero.lanterfire < 100) {
|
||||
((Hero) enemy).damageLantern(7);
|
||||
hero.sprite.showStatus(0x808080, "7");
|
||||
Buff.affect(enemy, Ooze.class).set( Ooze.DURATION );
|
||||
die(true);
|
||||
}
|
||||
} else {
|
||||
Buff.affect(enemy, Ooze.class).set( Ooze.DURATION );
|
||||
}
|
||||
}
|
||||
|
||||
return damage;
|
||||
|
|
|
@ -21,9 +21,6 @@
|
|||
|
||||
package com.shatteredpixel.shatteredpixeldungeon.actors.mobs;
|
||||
|
||||
import static com.shatteredpixel.shatteredpixeldungeon.Dungeon.hero;
|
||||
import static com.shatteredpixel.shatteredpixeldungeon.Statistics.lanterfireactive;
|
||||
|
||||
import com.shatteredpixel.shatteredpixeldungeon.Dungeon;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.actors.Char;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.actors.blobs.Blob;
|
||||
|
@ -31,7 +28,6 @@ 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.hero.Hero;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.actors.mobs.npcs.Ghost;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.items.Generator;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.items.Item;
|
||||
|
@ -92,14 +88,6 @@ public class GnollTrickster extends Gnoll {
|
|||
|
||||
} else
|
||||
Buff.affect( enemy, Poison.class).set((effect-2) );
|
||||
|
||||
if(lanterfireactive) {
|
||||
if (Random.Float() <= 0.2f && enemy instanceof Hero && hero.lanterfire < 100) {
|
||||
((Hero) enemy).damageLantern(7);
|
||||
hero.sprite.showStatus(0x808080, "7");
|
||||
die(true);
|
||||
}
|
||||
}
|
||||
}
|
||||
return damage;
|
||||
}
|
||||
|
|
|
@ -88,7 +88,6 @@ public class GreatCrab extends Crab {
|
|||
if(lanterfireactive) {
|
||||
if (Random.Float() <= 0.06f && enemy instanceof Hero && hero.lanterfire < 90) {
|
||||
((Hero) enemy).damageLantern(1);
|
||||
hero.sprite.showStatus(0x808080, "1");
|
||||
}
|
||||
}
|
||||
} else {
|
||||
|
|
|
@ -21,15 +21,11 @@
|
|||
|
||||
package com.shatteredpixel.shatteredpixeldungeon.actors.mobs;
|
||||
|
||||
import static com.shatteredpixel.shatteredpixeldungeon.Dungeon.hero;
|
||||
import static com.shatteredpixel.shatteredpixeldungeon.Statistics.lanterfireactive;
|
||||
|
||||
import com.shatteredpixel.shatteredpixeldungeon.Assets;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.Dungeon;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.actors.Actor;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.actors.Char;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Cripple;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.actors.hero.Hero;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.effects.Chains;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.effects.Pushing;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.items.Generator;
|
||||
|
@ -65,20 +61,6 @@ public class Guard extends Mob {
|
|||
HUNTING = new Hunting();
|
||||
}
|
||||
|
||||
@Override
|
||||
public int attackProc( Char enemy, int damage ) {
|
||||
damage = super.attackProc( enemy, damage );
|
||||
if(lanterfireactive){
|
||||
if (Random.Float()<=0.1f && enemy instanceof Hero && hero.lanterfire < 85) {
|
||||
((Hero) enemy).damageLantern(1);
|
||||
hero.sprite.showStatus( 0x808080, "1");
|
||||
}
|
||||
} else {
|
||||
super.attackProc( enemy, damage );
|
||||
}
|
||||
return damage;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int damageRoll() {
|
||||
return Random.NormalIntRange(4, 12);
|
||||
|
|
|
@ -21,6 +21,7 @@
|
|||
|
||||
package com.shatteredpixel.shatteredpixeldungeon.actors.mobs;
|
||||
|
||||
import static com.shatteredpixel.shatteredpixeldungeon.Challenges.DHXD;
|
||||
import static com.shatteredpixel.shatteredpixeldungeon.Challenges.SBSG;
|
||||
import static com.shatteredpixel.shatteredpixeldungeon.Dungeon.hero;
|
||||
|
||||
|
@ -554,10 +555,49 @@ public abstract class Mob extends Char {
|
|||
|
||||
@Override
|
||||
public int attackProc(Char enemy, int damage) {
|
||||
if(Dungeon.isChallenged(DHXD)){
|
||||
damageAttackProcLanterMob();
|
||||
}
|
||||
return super.attackProc(enemy,
|
||||
(int) (damage*(Dungeon.isChallenged(SBSG) ? (0.6f * scaleFactor) : 1)));
|
||||
}
|
||||
|
||||
|
||||
//写在Mob主类,从而方便后续维护
|
||||
private void damageAttackProcLanterMob() {
|
||||
//近战判定
|
||||
boolean isHero = enemy instanceof Hero;
|
||||
//15%
|
||||
boolean one = Random.Float() <= 0.15f;
|
||||
//25%
|
||||
boolean two = Random.Float() <= 0.25f;
|
||||
//75%
|
||||
boolean three = Random.Float() <= 0.75f;
|
||||
//50%
|
||||
boolean four = Random.Float() <= 0.50f;
|
||||
//85%
|
||||
boolean five = Random.Float() <= 0.85f;
|
||||
//
|
||||
boolean GhostQuestMob = this instanceof GreatCrab ||this instanceof GnollTrickster || this instanceof FetidRat;
|
||||
|
||||
//15%的老鼠 (-1) <85
|
||||
if (isHero && this instanceof Rat && one && hero.lanterfire < 85) ((Hero) enemy).damageLantern(1);
|
||||
//25%的监狱守卫 (-1) <85
|
||||
if (isHero && this instanceof Guard && two && hero.lanterfire < 85) ((Hero) enemy).damageLantern(1);
|
||||
//15%的豺狼萨满 (-2) <70
|
||||
if (isHero && this instanceof Shaman && one && hero.lanterfire < 70) ((Hero) enemy).damageLantern(2);
|
||||
//50%的幽灵任务怪 (-5) <95 NZND
|
||||
if (isHero && GhostQuestMob && four && hero.lanterfire < 95) ((Hero) enemy).damageLantern(5);
|
||||
//怨灵 75%的概率-6灯火 FINAL
|
||||
if (isHero && this instanceof Wraith && three ) ((Hero) enemy).damageLantern(6); die(true);
|
||||
//新生火元素 25%的概率-6灯火 <80
|
||||
if (isHero && this instanceof Elemental.NewbornFireElemental && two && hero.lanterfire < 80 ) ((Hero) enemy).damageLantern(2);
|
||||
//矿洞蜘蛛 15%的概率-3灯火 <70
|
||||
if (isHero && this instanceof Wraith && one && hero.lanterfire < 70 ) ((Hero) enemy).damageLantern(3);
|
||||
//矮人术士 85%的概率-5灯火 <70
|
||||
if (isHero && this instanceof Warlock && five && hero.lanterfire < 50 ) ((Hero) enemy).damageLantern(5);
|
||||
}
|
||||
|
||||
|
||||
protected boolean doAttack( Char enemy ) {
|
||||
|
||||
if (sprite != null && (sprite.visible || enemy.sprite.visible)) {
|
||||
|
|
|
@ -5,14 +5,10 @@
|
|||
|
||||
package com.shatteredpixel.shatteredpixeldungeon.actors.mobs;
|
||||
|
||||
import static com.shatteredpixel.shatteredpixeldungeon.Dungeon.hero;
|
||||
import static com.shatteredpixel.shatteredpixeldungeon.Statistics.lanterfireactive;
|
||||
|
||||
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.hero.Hero;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.effects.CellEmitter;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.effects.particles.BlastParticle;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.items.weapon.melee.RedBloodMoon;
|
||||
|
@ -63,14 +59,6 @@ public class MolotovHuntsman extends Mob {
|
|||
int var8 = var7[var2];
|
||||
if (!Dungeon.level.solid[var4 + var8]) {
|
||||
GameScene.add(Blob.seed(var4 + var8, 2, Fire.class));
|
||||
|
||||
//TODO 血月矿洞炸弹猎人 低于75灯火 35%概率扣减1灯火
|
||||
if(lanterfireactive) {
|
||||
if (Random.Float() <= 0.35f && enemy instanceof Hero && hero.lanterfire < 75) {
|
||||
((Hero) enemy).damageLantern(1);
|
||||
hero.sprite.showStatus(0x808080, "1");
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -22,11 +22,9 @@
|
|||
package com.shatteredpixel.shatteredpixeldungeon.actors.mobs;
|
||||
|
||||
import static com.shatteredpixel.shatteredpixeldungeon.Dungeon.hero;
|
||||
import static com.shatteredpixel.shatteredpixeldungeon.Statistics.lanterfireactive;
|
||||
|
||||
import com.shatteredpixel.shatteredpixeldungeon.Dungeon;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.actors.Char;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.actors.hero.Hero;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.actors.hero.abilities.Ratmogrify;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.sprites.RatSprite;
|
||||
import com.watabou.utils.Bundle;
|
||||
|
@ -43,21 +41,6 @@ public class Rat extends Mob {
|
|||
maxLvl = 5;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int attackProc( Char enemy, int damage ) {
|
||||
damage = super.attackProc( enemy, damage );
|
||||
if(lanterfireactive){
|
||||
if (Random.Float()<=0.05f && enemy instanceof Hero && hero.lanterfire < 85) {
|
||||
((Hero) enemy).damageLantern(1);
|
||||
hero.sprite.showStatus( 0x808080, "1");
|
||||
}
|
||||
} else {
|
||||
super.attackProc( enemy, damage );
|
||||
}
|
||||
return damage;
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
protected boolean act() {
|
||||
if (Dungeon.level.heroFOV[pos] && hero.armorAbility instanceof Ratmogrify){
|
||||
|
|
|
@ -54,21 +54,6 @@ public abstract class Shaman extends Mob {
|
|||
loot = Generator.Category.WAND;
|
||||
lootChance = 0.03f; //initially, see lootChance()
|
||||
}
|
||||
|
||||
//TODO 豺狼萨满近战攻击,低于70灯火扣减1灯火
|
||||
@Override
|
||||
public int attackProc( Char enemy, int damage ) {
|
||||
damage = super.attackProc( enemy, damage );
|
||||
if(lanterfireactive){
|
||||
if (Random.Float()<=0.1f && enemy instanceof Hero && hero.lanterfire < 70) {
|
||||
((Hero) enemy).damageLantern(2);
|
||||
hero.sprite.showStatus( 0x808080, "2");
|
||||
}
|
||||
} else {
|
||||
super.attackProc( enemy, damage );
|
||||
}
|
||||
return damage;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int damageRoll() {
|
||||
|
@ -131,11 +116,10 @@ public abstract class Shaman extends Mob {
|
|||
|
||||
if (Random.Int( 2 ) == 0) {
|
||||
if (enemy == Dungeon.hero) Sample.INSTANCE.play( Assets.Sounds.DEBUFF );
|
||||
//TODO 低于70灯火 7%概率扣减1灯火(远程攻击)
|
||||
//TODO 低于70灯火 15%概率扣减1灯火(远程攻击)
|
||||
if(lanterfireactive){
|
||||
if (Random.Float()<=0.07f && enemy instanceof Hero && hero.lanterfire < 70) {
|
||||
if (Random.Float()<=0.15f && enemy instanceof Hero && hero.lanterfire < 70) {
|
||||
((Hero) enemy).damageLantern(1);
|
||||
hero.sprite.showStatus( 0x808080, "1");
|
||||
}
|
||||
} else {
|
||||
debuff( enemy );
|
||||
|
|
|
@ -21,9 +21,6 @@
|
|||
|
||||
package com.shatteredpixel.shatteredpixeldungeon.actors.mobs;
|
||||
|
||||
import static com.shatteredpixel.shatteredpixeldungeon.Dungeon.hero;
|
||||
import static com.shatteredpixel.shatteredpixeldungeon.Statistics.lanterfireactive;
|
||||
|
||||
import com.shatteredpixel.shatteredpixeldungeon.Dungeon;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.actors.Char;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.actors.blobs.Blob;
|
||||
|
@ -32,7 +29,6 @@ import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Buff;
|
|||
import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Dread;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Poison;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Terror;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.actors.hero.Hero;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.items.food.MysteryMeat;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.mechanics.Ballistica;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.scenes.GameScene;
|
||||
|
@ -125,14 +121,6 @@ public class Spinner extends Mob {
|
|||
if (Random.Int(2) == 0) {
|
||||
Buff.affect(enemy, Poison.class).set(Random.Int(7, 9) );
|
||||
|
||||
//TODO 矿洞蜘蛛 低于70灯火 15%概率扣减1灯火
|
||||
if(lanterfireactive) {
|
||||
if (Random.Float() <= 0.15f && enemy instanceof Hero && hero.lanterfire < 70) {
|
||||
((Hero) enemy).damageLantern(1);
|
||||
hero.sprite.showStatus(0x808080, "1");
|
||||
}
|
||||
}
|
||||
|
||||
webCoolDown = 0;
|
||||
state = FLEEING;
|
||||
}
|
||||
|
|
|
@ -136,7 +136,7 @@ public class Warlock extends Mob implements Callback {
|
|||
zap();
|
||||
next();
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public void call() {
|
||||
next();
|
||||
|
|
|
@ -21,13 +21,9 @@
|
|||
|
||||
package com.shatteredpixel.shatteredpixeldungeon.actors.mobs;
|
||||
|
||||
import static com.shatteredpixel.shatteredpixeldungeon.Dungeon.hero;
|
||||
import static com.shatteredpixel.shatteredpixeldungeon.Statistics.lanterfireactive;
|
||||
|
||||
import com.shatteredpixel.shatteredpixeldungeon.Dungeon;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.actors.Actor;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.actors.Char;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.actors.hero.Hero;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.effects.particles.ShadowParticle;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.scenes.GameScene;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.sprites.WraithSprite;
|
||||
|
@ -56,23 +52,6 @@ public class Wraith extends Mob {
|
|||
properties.add(Property.UNDEAD);
|
||||
}
|
||||
|
||||
@Override
|
||||
public int attackProc( Char enemy, int damage ) {
|
||||
damage = super.attackProc( enemy, damage );
|
||||
|
||||
//TODO 40%概率扣减8灯火,但扣减完成后立刻死亡
|
||||
if(lanterfireactive){
|
||||
if (Random.Float()<=0.4f && enemy instanceof Hero) {
|
||||
((Hero) enemy).damageLantern(8);
|
||||
hero.sprite.showStatus( 0x808080, "8");
|
||||
die(true);
|
||||
}
|
||||
} else {
|
||||
super.attackProc( enemy, damage );
|
||||
}
|
||||
return damage;
|
||||
}
|
||||
|
||||
private static final String LEVEL = "level";
|
||||
|
||||
@Override
|
||||
|
|
|
@ -0,0 +1,268 @@
|
|||
package com.shatteredpixel.shatteredpixeldungeon.actors.mobs.bosses;
|
||||
|
||||
import com.shatteredpixel.shatteredpixeldungeon.Assets;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.Dungeon;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.actors.Actor;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.actors.Boss;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.actors.Char;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.LockedFloor;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.effects.MagicMissile;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.levels.ColdChestBossLevel;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.mechanics.Ballistica;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.messages.Messages;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.sprites.DimandKingSprite;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.ui.BossHealthBar;
|
||||
import com.watabou.noosa.audio.Sample;
|
||||
import com.watabou.utils.Bundle;
|
||||
import com.watabou.utils.Callback;
|
||||
import com.watabou.utils.PathFinder;
|
||||
import com.watabou.utils.Random;
|
||||
|
||||
import java.util.HashSet;
|
||||
|
||||
public class DiamondKnight extends Boss {
|
||||
private int ventCooldown = 0;
|
||||
private int phase = 1;
|
||||
|
||||
private final int OneHP = 179;
|
||||
private final int TwoHP = 99;
|
||||
private final int ThreeHP = 49;
|
||||
|
||||
private static final float TIME_TO_ZAP = 5f;
|
||||
|
||||
{
|
||||
spriteClass = DimandKingSprite.class;
|
||||
|
||||
HP = HT = 240;
|
||||
defenseSkill = 12;
|
||||
|
||||
initProperty();
|
||||
initBaseStatus(14, 23, 33, 22, 200, 5, 12);
|
||||
initStatus(50);
|
||||
|
||||
maxLvl = 30;
|
||||
|
||||
properties.add(Property.IMMOVABLE);
|
||||
properties.add(Property.BOSS);
|
||||
}
|
||||
|
||||
private static final String PHASE = "phase";
|
||||
|
||||
@Override
|
||||
public void storeInBundle(Bundle bundle) {
|
||||
super.storeInBundle(bundle);
|
||||
bundle.put(PHASE, phase);
|
||||
bundle.put(VENT_COOLDOWN, ventCooldown);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void restoreFromBundle(Bundle bundle) {
|
||||
super.restoreFromBundle(bundle);
|
||||
phase = bundle.getInt(PHASE);
|
||||
ventCooldown = bundle.getInt( VENT_COOLDOWN );
|
||||
}
|
||||
|
||||
private static final float ATTACSWORD_DELAY = 5f;
|
||||
|
||||
private static final String VENT_COOLDOWN = "vent_cooldown";
|
||||
|
||||
@Override
|
||||
protected boolean act() {
|
||||
switch (phase){
|
||||
case 1:
|
||||
if(Random.Float()>0.64f){
|
||||
|
||||
} else {
|
||||
super.act();
|
||||
}
|
||||
break;
|
||||
case 2:
|
||||
break;
|
||||
case 3:
|
||||
break;
|
||||
case 4:
|
||||
break;
|
||||
}
|
||||
|
||||
return super.act();
|
||||
}
|
||||
public static class DarkBolt{}
|
||||
|
||||
//the actual affected cells
|
||||
private HashSet<Integer> affectedCells;
|
||||
//the cells to trace fire shots to, for visual effects.
|
||||
private HashSet<Integer> visualCells;
|
||||
private int direction = 0;
|
||||
private int left(int direction){
|
||||
return direction == 0 ? 2 : direction-1;
|
||||
}
|
||||
|
||||
protected void fx(Ballistica bolt, Callback callback, 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 = 4 + 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)){
|
||||
direction = i;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
float strength = maxDist;
|
||||
for (int c : bolt.subPath(1, dist)) {
|
||||
strength--; //as we start at dist 1, not 0.
|
||||
affectedCells.add(c);
|
||||
if (strength > 1) {
|
||||
spreadFlames(c + PathFinder.CIRCLE8[direction], strength - 1);
|
||||
} else {
|
||||
visualCells.add(c);
|
||||
}
|
||||
}
|
||||
|
||||
//going to call this one manually
|
||||
visualCells.remove(bolt.path.get(dist));
|
||||
|
||||
for (int cell : visualCells){
|
||||
//this way we only get the cells at the tip, much better performance.
|
||||
((MagicMissile)ch.sprite.parent.recycle( MagicMissile.class )).reset(
|
||||
MagicMissile.FIRE,
|
||||
ch.sprite,
|
||||
cell,
|
||||
null
|
||||
);
|
||||
}
|
||||
MagicMissile.boltFromChar( ch.sprite.parent,
|
||||
MagicMissile.FIRE,
|
||||
ch.sprite,
|
||||
bolt.path.get(dist/2),
|
||||
callback );
|
||||
if(Dungeon.level.heroFOV[bolt.sourcePos] || Dungeon.level.heroFOV[bolt.collisionPos]){
|
||||
Sample.INSTANCE.play( Assets.Sounds.ZAP );
|
||||
}
|
||||
}
|
||||
|
||||
private int right(int direction){
|
||||
return direction == 2 ? 0 : direction+1;
|
||||
}
|
||||
private void spreadFlames(int cell, float strength){
|
||||
if (strength >= 0 && (Dungeon.level.passable[cell] || Dungeon.level.flamable[cell])){
|
||||
affectedCells.add(cell);
|
||||
if (strength >= 1.5f) {
|
||||
visualCells.remove(cell);
|
||||
spreadFlames(cell + PathFinder.CIRCLE8[direction], strength - 1.5f);
|
||||
} else {
|
||||
visualCells.add(cell);
|
||||
}
|
||||
} else if (!Dungeon.level.passable[cell])
|
||||
visualCells.add(cell);
|
||||
}
|
||||
|
||||
@Override
|
||||
public int damageRoll() {
|
||||
return Random.NormalIntRange( 10,20 );
|
||||
}
|
||||
|
||||
@Override
|
||||
protected boolean canAttack( Char enemy ) {
|
||||
return new Ballistica( pos, enemy.pos, Ballistica.MAGIC_BOLT).collisionPos == enemy.pos;
|
||||
}
|
||||
|
||||
protected boolean doAttack( Char enemy ) {
|
||||
|
||||
if (Dungeon.level.distance(pos, enemy.pos) <= 1) {
|
||||
|
||||
return super.doAttack(enemy);
|
||||
|
||||
} else {
|
||||
|
||||
boolean visible = fieldOfView[pos] || fieldOfView[enemy.pos];
|
||||
if (visible) {
|
||||
sprite.attack(enemy.pos);
|
||||
spend(TIME_TO_ZAP);
|
||||
shoot(this, enemy.pos);
|
||||
}
|
||||
|
||||
return !visible;
|
||||
}
|
||||
}
|
||||
|
||||
public void damage(int dmg, Object src) {
|
||||
if (!Dungeon.level.mobs.contains(this)){
|
||||
return;
|
||||
}
|
||||
|
||||
ColdChestBossLevel.State state = ((ColdChestBossLevel)Dungeon.level).pro();
|
||||
|
||||
int hpBracket = HT / 8;
|
||||
|
||||
int beforeHitHP = HP;
|
||||
super.damage(dmg, src);
|
||||
dmg = beforeHitHP - HP;
|
||||
|
||||
if ((beforeHitHP/hpBracket - HP/hpBracket) >= 2){
|
||||
HP = hpBracket * ((beforeHitHP/hpBracket)-1) + 1;
|
||||
}
|
||||
|
||||
LockedFloor lock = Dungeon.hero.buff(LockedFloor.class);
|
||||
if (lock != null) {
|
||||
int multiple = state == ColdChestBossLevel.State.MAZE_START ? 1 : 4;
|
||||
lock.addTime(dmg*multiple);
|
||||
}
|
||||
|
||||
if (HP == 0 && state == ColdChestBossLevel.State.VSBOSS_START) {
|
||||
Actor.add(new Actor() {
|
||||
|
||||
{
|
||||
actPriority = VFX_PRIO;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected boolean act() {
|
||||
Actor.remove(this);
|
||||
((ColdChestBossLevel)Dungeon.level).progress();
|
||||
return true;
|
||||
}
|
||||
});
|
||||
return;
|
||||
}
|
||||
|
||||
if (state == ColdChestBossLevel.State.MAZE_START && HP <= OneHP) {
|
||||
HP = OneHP;
|
||||
yell(Messages.get(this, "interesting"));
|
||||
((ColdChestBossLevel) Dungeon.level).progress();
|
||||
BossHealthBar.bleed(true);
|
||||
}
|
||||
}
|
||||
|
||||
protected void onZap( Ballistica bolt ) {
|
||||
|
||||
for( int cell : affectedCells){
|
||||
|
||||
//ignore caster cell
|
||||
if (cell == bolt.sourcePos){
|
||||
continue;
|
||||
}
|
||||
|
||||
//only ignite cells directly near caster if they are flammable
|
||||
if (!Dungeon.level.adjacent(bolt.sourcePos, cell)
|
||||
|| Dungeon.level.flamable[cell]){
|
||||
//GameScene.add( Blob.seed( cell, 1+2, Fire.class ) );
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public void shoot(Char ch, int pos){
|
||||
final Ballistica shot = new Ballistica( ch.pos, pos, Ballistica.PROJECTILE);
|
||||
fx(shot, new Callback() {
|
||||
@Override
|
||||
public void call() {
|
||||
onZap(shot);
|
||||
}
|
||||
}, ch);
|
||||
}
|
||||
|
||||
}
|
|
@ -1,77 +0,0 @@
|
|||
package com.shatteredpixel.shatteredpixeldungeon.actors.mobs.bosses;
|
||||
import static com.shatteredpixel.shatteredpixeldungeon.Dungeon.hero;
|
||||
import static com.shatteredpixel.shatteredpixeldungeon.Statistics.lanterfireactive;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.Dungeon;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.actors.Char;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.actors.hero.Hero;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.actors.hero.abilities.Ratmogrify;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.actors.mobs.Mob;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.sprites.RatSprite;
|
||||
import com.watabou.utils.Bundle;
|
||||
import com.watabou.utils.Random;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.sprites.DimandKingSprite;
|
||||
|
||||
public class DimandKing extends Mob {
|
||||
|
||||
{
|
||||
spriteClass = DimandKingSprite.class;
|
||||
|
||||
HP = HT = 8;
|
||||
defenseSkill = 2;
|
||||
|
||||
maxLvl = 5;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int attackProc( Char enemy, int damage ) {
|
||||
damage = super.attackProc( enemy, damage );
|
||||
if (lanterfireactive) {
|
||||
if (Random.Float()<=0.05f && enemy instanceof Hero && hero.lanterfire < 85) {
|
||||
((Hero) enemy).damageLantern(1);
|
||||
hero.sprite.showStatus( 0x808080, "1");
|
||||
}
|
||||
} else {
|
||||
super.attackProc( enemy, damage );
|
||||
}
|
||||
return damage;
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
protected boolean act() {
|
||||
if (Dungeon.level.heroFOV[pos] && hero.armorAbility instanceof Ratmogrify){
|
||||
alignment = Alignment.ALLY;
|
||||
if (state == SLEEPING) state = WANDERING;
|
||||
}
|
||||
return super.act();
|
||||
}
|
||||
|
||||
@Override
|
||||
public int damageRoll() {
|
||||
return Random.NormalIntRange( 1, 4 );
|
||||
}
|
||||
|
||||
@Override
|
||||
public int attackSkill( Char target ) {
|
||||
return 8;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int drRoll() {
|
||||
return Random.NormalIntRange(0, 1);
|
||||
}
|
||||
|
||||
private static final String RAT_ALLY = "rat_ally";
|
||||
|
||||
@Override
|
||||
public void storeInBundle(Bundle bundle) {
|
||||
super.storeInBundle(bundle);
|
||||
if (alignment == Alignment.ALLY) bundle.put(RAT_ALLY, true);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void restoreFromBundle(Bundle bundle) {
|
||||
super.restoreFromBundle(bundle);
|
||||
if (bundle.contains(RAT_ALLY)) alignment = Alignment.ALLY;
|
||||
}
|
||||
}
|
|
@ -413,7 +413,7 @@ public class RedDragon extends NPC {
|
|||
itemLevel = 3;
|
||||
}
|
||||
weapon.upgrade(itemLevel);
|
||||
armor.upgrade(itemLevel);
|
||||
//armor.upgrade(itemLevel);
|
||||
RingT.upgrade(itemLevel);
|
||||
|
||||
//10% to be enchanted. We store it separately so enchant status isn't revealed early
|
||||
|
|
|
@ -12,6 +12,7 @@ import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.LighS;
|
|||
import com.shatteredpixel.shatteredpixeldungeon.actors.hero.Hero;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.items.Item;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.messages.Messages;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.scenes.GameScene;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.sprites.ItemSpriteSheet;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.utils.GLog;
|
||||
import com.watabou.noosa.audio.Sample;
|
||||
|
@ -124,19 +125,24 @@ public class OilLantern extends Item {
|
|||
}
|
||||
|
||||
public void activate(Hero hero, boolean voluntary) {
|
||||
this.active = true;
|
||||
updateSprite();
|
||||
Buff.affect(hero, LighS.class);
|
||||
hero.search(false);
|
||||
if (voluntary) {
|
||||
|
||||
if (voluntary && hero.lanterfire >0) {
|
||||
hero.spend(TIME_TO_USE);
|
||||
hero.busy();
|
||||
GLog.i(Messages.get(OilLantern.class,"lanteron"));
|
||||
hero.sprite.operate(hero.pos);
|
||||
this.active = true;
|
||||
updateSprite();
|
||||
Buff.affect(hero, LighS.class);
|
||||
hero.search(false);
|
||||
Sample.INSTANCE.play("sounds/snd_click.mp3");
|
||||
updateQuickslot();
|
||||
Dungeon.observe();
|
||||
} else {
|
||||
GameScene.flash(0x880000);
|
||||
GLog.n(Messages.get(OilLantern.class,"black"));
|
||||
}
|
||||
Sample.INSTANCE.play("sounds/snd_click.mp3");
|
||||
updateQuickslot();
|
||||
Dungeon.observe();
|
||||
|
||||
}
|
||||
|
||||
public void deactivate(Hero hero, boolean voluntary) {
|
||||
|
|
|
@ -1,63 +0,0 @@
|
|||
.class public Lcom/shatteredpixel/shatteredpixeldungeon/items/quest/GoldBAo;
|
||||
.super Lcom/shatteredpixel/shatteredpixeldungeon/items/Item;
|
||||
.source "GoldBAo.java"
|
||||
|
||||
|
||||
# direct methods
|
||||
.method public constructor <init>()V
|
||||
.registers 2
|
||||
|
||||
.prologue
|
||||
.line 28
|
||||
invoke-direct {p0}, Lcom/shatteredpixel/shatteredpixeldungeon/items/Item;-><init>()V
|
||||
|
||||
.line 31
|
||||
sget v0, Lcom/shatteredpixel/shatteredpixeldungeon/sprites/ItemSpriteSheet;->DG21:I
|
||||
|
||||
iput v0, p0, Lcom/shatteredpixel/shatteredpixeldungeon/items/quest/GoldBAo;->image:I
|
||||
|
||||
.line 32
|
||||
return-void
|
||||
.end method
|
||||
|
||||
|
||||
# virtual methods
|
||||
.method public isIdentified()Z
|
||||
.registers 2
|
||||
|
||||
.prologue
|
||||
.line 41
|
||||
const/4 v0, 0x1
|
||||
|
||||
return v0
|
||||
.end method
|
||||
|
||||
.method public isUpgradable()Z
|
||||
.registers 2
|
||||
|
||||
.prologue
|
||||
.line 36
|
||||
const/4 v0, 0x0
|
||||
|
||||
return v0
|
||||
.end method
|
||||
|
||||
.method public value()I
|
||||
.registers 4
|
||||
|
||||
.prologue
|
||||
.line 45
|
||||
iget v0, p0, Lcom/shatteredpixel/shatteredpixeldungeon/items/quest/GoldBAo;->quantity:I
|
||||
|
||||
const/16 v1, 0x9c4
|
||||
|
||||
const/16 v2, 0x157c
|
||||
|
||||
invoke-static {v1, v2}, Lcom/watabou/utils/Random;->Int(II)I
|
||||
|
||||
move-result v1
|
||||
|
||||
mul-int/2addr v0, v1
|
||||
|
||||
return v0
|
||||
.end method
|
|
@ -0,0 +1,47 @@
|
|||
package com.shatteredpixel.shatteredpixeldungeon.items.weapon.melee;
|
||||
|
||||
|
||||
import com.shatteredpixel.shatteredpixeldungeon.sprites.ItemSpriteSheet;
|
||||
|
||||
|
||||
/*
|
||||
* 钻石制成的奇特大剑,但因为剧烈碰撞而破碎了。
|
||||
* 剑身残留着钻石宝箱王的魔力,因此对其他魔力有着莫名的亲和性。
|
||||
* 相比于其他武器,这把武器会随着等级的提升增加更多伤害。
|
||||
* 这把武器攻击速度极慢。
|
||||
*/
|
||||
|
||||
public class SDBSword extends MeleeWeapon {
|
||||
|
||||
{
|
||||
tier = 4;
|
||||
DLY = 1.2f;
|
||||
|
||||
if (this.level() >= 6) {
|
||||
image = ItemSpriteSheet.HHBlade;
|
||||
} else {
|
||||
image = ItemSpriteSheet.SDBlade;
|
||||
}
|
||||
ACC = 3f; //20% boost to accuracy
|
||||
DLY = 2f; //3x speed
|
||||
|
||||
}
|
||||
|
||||
public int image() {
|
||||
if (this.level() >= 6) {
|
||||
image = ItemSpriteSheet.HHBlade;
|
||||
} else {
|
||||
image = ItemSpriteSheet.SDBlade;
|
||||
}
|
||||
return image;
|
||||
}
|
||||
|
||||
public int min() {
|
||||
return 6 + level();
|
||||
}
|
||||
|
||||
public int max() {
|
||||
return 20 + level() * 9;
|
||||
}
|
||||
|
||||
}
|
|
@ -2,13 +2,18 @@ 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;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.actors.Char;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.actors.mobs.bosses.DiamondKnight;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.scenes.GameScene;
|
||||
|
||||
//宝藏迷宫 10层
|
||||
public class ColdChestBossLevel extends Level {
|
||||
|
||||
private State state;
|
||||
private State pro;
|
||||
|
||||
public State pro(){
|
||||
return pro;
|
||||
}
|
||||
|
||||
//地图状态
|
||||
public enum State {
|
||||
|
@ -19,13 +24,16 @@ public class ColdChestBossLevel extends Level {
|
|||
WIN
|
||||
}
|
||||
|
||||
private static final int WIDTH = 35;
|
||||
private final int HEIGHT = 35;
|
||||
|
||||
@Override
|
||||
protected boolean build() {
|
||||
setSize(35,35);
|
||||
setSize(WIDTH,HEIGHT);
|
||||
this.entrance = 0;
|
||||
this.exit = 0;
|
||||
//首次构建地图
|
||||
state = State.START;
|
||||
pro = State.START;
|
||||
setMapStart();
|
||||
|
||||
return true;
|
||||
|
@ -81,26 +89,14 @@ public class ColdChestBossLevel extends Level {
|
|||
|
||||
};
|
||||
|
||||
|
||||
private void setMapStart() {
|
||||
entrance = 35*2+17;
|
||||
//exit = 0;
|
||||
entrance = HOME;
|
||||
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;
|
||||
}
|
||||
}
|
||||
}
|
||||
switch (pro) {
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -109,6 +105,36 @@ public class ColdChestBossLevel extends Level {
|
|||
|
||||
}
|
||||
|
||||
private static final int getBossDoor = WIDTH*11+17;
|
||||
private static final int LDBossDoor = WIDTH*12+17;
|
||||
private static final int HOME = WIDTH*2+17;
|
||||
|
||||
@Override
|
||||
public void seal() {
|
||||
super.seal();
|
||||
|
||||
DiamondKnight boss = new DiamondKnight();
|
||||
boss.state = boss.WANDERING;
|
||||
boss.pos = WIDTH*19+17;
|
||||
GameScene.add( boss );
|
||||
set( getBossDoor, Terrain.LOCKED_DOOR );
|
||||
GameScene.updateMap( getBossDoor );
|
||||
set( HOME, Terrain.EMPTY );
|
||||
GameScene.updateMap( HOME );
|
||||
Dungeon.observe();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void occupyCell( Char ch ) {
|
||||
|
||||
super.occupyCell( ch );
|
||||
|
||||
//如果有生物来到BossDoor的下一个坐标,且生物是玩家,那么触发seal().
|
||||
if (map[getBossDoor] == Terrain.DOOR && ch.pos == LDBossDoor && ch == Dungeon.hero) {
|
||||
seal();
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void createItems() {
|
||||
|
||||
|
|
|
@ -472,7 +472,7 @@ public class GameScene extends PixelScene {
|
|||
WndStory.showChapter( WndStory.ID_CHAPTONEEND );
|
||||
break;
|
||||
}
|
||||
if (Dungeon.hero.isAlive()) {
|
||||
if (Dungeon.hero.isAlive() && Dungeon.depth > 0 ) {
|
||||
Badges.validateNoKilling();
|
||||
}
|
||||
break;
|
||||
|
|
|
@ -1,8 +1,6 @@
|
|||
package com.shatteredpixel.shatteredpixeldungeon.sprites;
|
||||
|
||||
import com.badlogic.gdx.graphics.Texture;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.Assets;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.sprites.MobSprite;
|
||||
import com.watabou.noosa.TextureFilm;
|
||||
|
||||
public class DimandKingSprite extends MobSprite {
|
||||
|
|
|
@ -752,6 +752,9 @@ public class ItemSpriteSheet {
|
|||
public static final int WATERSOUL = BAGS+59;
|
||||
public static final int WRALIPS = BAGS+60;
|
||||
|
||||
public static final int SDBlade = BAGS+74;
|
||||
public static final int HHBlade = BAGS+75;
|
||||
|
||||
static{
|
||||
assignItemRect(VIAL, 16, 16);
|
||||
assignItemRect(POUCH, 14, 15);
|
||||
|
@ -766,6 +769,7 @@ public class ItemSpriteSheet {
|
|||
assignItemRect(SKNANO, 15, 14);
|
||||
assignItemRect(WATERSOUL, 14, 14);
|
||||
assignItemRect(WRALIPS, 16, 16);
|
||||
assignItemRect(SDBlade, 15, 15);
|
||||
}
|
||||
|
||||
private static final int MAINBOOKINDEX = xy(1, 37); //16 slots
|
||||
|
|
|
@ -21,6 +21,7 @@
|
|||
|
||||
package com.shatteredpixel.shatteredpixeldungeon.windows;
|
||||
|
||||
import static com.shatteredpixel.shatteredpixeldungeon.Dungeon.hero;
|
||||
import static com.shatteredpixel.shatteredpixeldungeon.SPDSettings.HelpSettings;
|
||||
import static com.shatteredpixel.shatteredpixeldungeon.Statistics.lanterfireactive;
|
||||
|
||||
|
@ -197,7 +198,7 @@ public class WndHero extends WndTabbed {
|
|||
statSlot( Messages.get(HeroStat.class, "seed_dungeon"), DungeonSeed.convertToCode(Dungeon.seed) );
|
||||
|
||||
if(lanterfireactive){
|
||||
statSlot( Messages.get(this, "lanterfire"), (hero.lanterfire) + "/" + 100 );
|
||||
RestatSlot( Messages.get(this, "lanterfire"), (hero.lanterfire) + "/" + 100 );
|
||||
}
|
||||
|
||||
pos += GAP;
|
||||
|
@ -243,6 +244,23 @@ public class WndHero extends WndTabbed {
|
|||
pos += GAP + txt.height();
|
||||
}
|
||||
|
||||
private void RestatSlot( String label, String value ) {
|
||||
|
||||
RenderedTextBlock txt = PixelScene.renderTextBlock( label, 7 );
|
||||
txt.setPos(0, pos);
|
||||
add( txt );
|
||||
|
||||
txt = PixelScene.renderTextBlock( value, 7 );
|
||||
txt.setPos(WIDTH * 0.5f, pos);
|
||||
PixelScene.align(txt);
|
||||
|
||||
txt.hardlight(hero.lanterfire<=0 ? 0x808080 : Window.WHITE );
|
||||
|
||||
add( txt );
|
||||
|
||||
pos += GAP + txt.height();
|
||||
}
|
||||
|
||||
private void statSlot( String label, int value ) {
|
||||
statSlot( label, Integer.toString( value ) );
|
||||
}
|
||||
|
@ -263,7 +281,7 @@ public class WndHero extends WndTabbed {
|
|||
this.add(pane);
|
||||
pane.setRect(0,0,WIDTH, HEIGHT);
|
||||
|
||||
GameTracker gmt = Dungeon.hero.buff(GameTracker.class);
|
||||
GameTracker gmt = hero.buff(GameTracker.class);
|
||||
if(gmt != null){
|
||||
String allInfo = gmt.itemInfo();
|
||||
String[] result = allInfo.split("\n");
|
||||
|
@ -367,7 +385,7 @@ public class WndHero extends WndTabbed {
|
|||
|
||||
private void setupList() {
|
||||
Component content = buffList.content();
|
||||
for (Buff buff : Dungeon.hero.buffs()) {
|
||||
for (Buff buff : hero.buffs()) {
|
||||
if (buff.icon() != BuffIndicator.NONE) {
|
||||
BuffSlot slot = new BuffSlot(buff);
|
||||
slot.setRect(0, pos, WIDTH, slot.icon.height());
|
||||
|
|
|
@ -58,10 +58,6 @@ public class WndStory extends Window {
|
|||
private static final int WIDTH_L = 160;
|
||||
private static final int MARGIN = 2;
|
||||
|
||||
private static final float bgR = 0.77f;
|
||||
private static final float bgG = 0.73f;
|
||||
private static final float bgB = 0.62f;
|
||||
|
||||
public static final int ID_FOREST = -1;
|
||||
public static final int ID_SEWERS = 0;
|
||||
public static final int ID_PRISON = 1;
|
||||
|
@ -166,11 +162,39 @@ public class WndStory extends Window {
|
|||
}
|
||||
|
||||
Game.scene().add( wnd );
|
||||
|
||||
lanterfireRoll();
|
||||
Dungeon.chapters.add( id );
|
||||
if(lanterfireactive) {
|
||||
if (Dungeon.depth == 6){
|
||||
//TODO 首次到达6层 给予1个增益Buff
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
public static void lanterfireRoll(){
|
||||
if(lanterfireactive) {
|
||||
if (Dungeon.depth == 6){
|
||||
//TODO 首次到达6层 给予1个增益Buff
|
||||
switch (Random.Int(4)){
|
||||
case 0: default:
|
||||
Buff.affect(hero, BlessNoMoney.class).set( (100), 1 );
|
||||
break;
|
||||
case 1:
|
||||
Buff.affect(hero, BlessGoodSTR.class).set( (100), 1 );
|
||||
break;
|
||||
case 2:
|
||||
Buff.affect(hero, BlessMobDied.class).set( (100), 1 );
|
||||
break;
|
||||
case 3:
|
||||
Buff.affect(hero, BlessMixShiled.class).set( (100), 1 );
|
||||
break;
|
||||
case 4:
|
||||
Buff.affect(hero, BlessImmune.class).set( (100), 1 );
|
||||
break;
|
||||
}
|
||||
GLog.b(Messages.get(WndStory.class,"start"));
|
||||
}
|
||||
if (RollLevel()) {
|
||||
//TODO 常规刷新
|
||||
if (hero.lanterfire == 100){
|
||||
switch (Random.Int(4)){
|
||||
case 0: default:
|
||||
Buff.affect(hero, BlessNoMoney.class).set( (100), 1 );
|
||||
|
@ -188,269 +212,244 @@ public class WndStory extends Window {
|
|||
Buff.affect(hero, BlessImmune.class).set( (100), 1 );
|
||||
break;
|
||||
}
|
||||
GLog.b(Messages.get(WndStory.class,"start"));
|
||||
}
|
||||
if (RollLevel()) {
|
||||
//TODO 常规刷新
|
||||
if (hero.lanterfire == 100){
|
||||
switch (Random.Int(4)){
|
||||
case 0: default:
|
||||
Buff.affect(hero, BlessNoMoney.class).set( (100), 1 );
|
||||
break;
|
||||
case 1:
|
||||
Buff.affect(hero, BlessGoodSTR.class).set( (100), 1 );
|
||||
break;
|
||||
case 2:
|
||||
Buff.affect(hero, BlessMobDied.class).set( (100), 1 );
|
||||
break;
|
||||
case 3:
|
||||
Buff.affect(hero, BlessMixShiled.class).set( (100), 1 );
|
||||
break;
|
||||
case 4:
|
||||
Buff.affect(hero, BlessImmune.class).set( (100), 1 );
|
||||
break;
|
||||
}
|
||||
GLog.p(Messages.get(WndStory.class,"good"));
|
||||
} else if (hero.lanterfire <= 99 && hero.lanterfire >= 90) {
|
||||
switch (Random.Int(4)){
|
||||
case 0: default:
|
||||
Buff.affect(hero, BlessNoMoney.class).set( (100), 1 );
|
||||
break;
|
||||
case 1:
|
||||
Buff.affect(hero, BlessGoodSTR.class).set( (100), 1 );
|
||||
break;
|
||||
case 2:
|
||||
Buff.affect(hero, BlessMobDied.class).set( (100), 1 );
|
||||
break;
|
||||
case 3:
|
||||
Buff.affect(hero, BlessMixShiled.class).set( (100), 1 );
|
||||
break;
|
||||
case 4:
|
||||
Buff.affect(hero, BlessImmune.class).set( (100), 1 );
|
||||
break;
|
||||
}
|
||||
GLog.p(Messages.get(WndStory.class,"good"));
|
||||
} else if (hero.lanterfire <= 89 && hero.lanterfire >= 80 && Random.Float() <= 0.05f ) {
|
||||
switch (Random.Int(5)){
|
||||
case 0: default:
|
||||
Buff.affect(hero, MagicGirlSayMoneyMore.class).set( (100), 1 );
|
||||
break;
|
||||
case 1:
|
||||
Buff.affect(hero, MagicGirlSaySoftDied.class).set( (100), 1 );
|
||||
break;
|
||||
case 2:
|
||||
Buff.affect(hero, MagicGirlSayCursed.class).set( (100), 1 );
|
||||
break;
|
||||
case 3:
|
||||
Buff.affect(hero, MagicGirlSaySlowy.class).set( (100), 1 );
|
||||
break;
|
||||
case 4:
|
||||
Buff.affect(hero, MagicGirlSayKill.class).set( (100), 1 );
|
||||
break;
|
||||
case 5:
|
||||
Buff.affect(hero, MagicGirlSayNoSTR.class).set( (100), 1 );
|
||||
break;
|
||||
}
|
||||
GLog.n(Messages.get(WndStory.class,"bad"));
|
||||
} else if (hero.lanterfire <= 89 && hero.lanterfire >= 80 && Random.Float() <= 0.85f ) {
|
||||
switch (Random.Int(4)){
|
||||
case 0: default:
|
||||
Buff.affect(hero, BlessNoMoney.class).set( (100), 1 );
|
||||
break;
|
||||
case 1:
|
||||
Buff.affect(hero, BlessGoodSTR.class).set( (100), 1 );
|
||||
break;
|
||||
case 2:
|
||||
Buff.affect(hero, BlessMobDied.class).set( (100), 1 );
|
||||
break;
|
||||
case 3:
|
||||
Buff.affect(hero, BlessMixShiled.class).set( (100), 1 );
|
||||
break;
|
||||
case 4:
|
||||
Buff.affect(hero, BlessImmune.class).set( (100), 1 );
|
||||
break;
|
||||
}
|
||||
GLog.p(Messages.get(WndStory.class,"good"));
|
||||
} else if (hero.lanterfire <= 89 && hero.lanterfire >= 80) {
|
||||
GLog.b(Messages.get(WndStory.class,"normoal"));
|
||||
} else if (hero.lanterfire <= 79 && hero.lanterfire >= 60 && Random.Float() <= 0.25f ) {
|
||||
switch (Random.Int(5)){
|
||||
case 0: default:
|
||||
Buff.affect(hero, MagicGirlSayMoneyMore.class).set( (100), 1 );
|
||||
break;
|
||||
case 1:
|
||||
Buff.affect(hero, MagicGirlSaySoftDied.class).set( (100), 1 );
|
||||
break;
|
||||
case 2:
|
||||
Buff.affect(hero, MagicGirlSayCursed.class).set( (100), 1 );
|
||||
break;
|
||||
case 3:
|
||||
Buff.affect(hero, MagicGirlSaySlowy.class).set( (100), 1 );
|
||||
break;
|
||||
case 4:
|
||||
Buff.affect(hero, MagicGirlSayKill.class).set( (100), 1 );
|
||||
break;
|
||||
case 5:
|
||||
Buff.affect(hero, MagicGirlSayNoSTR.class).set( (100), 1 );
|
||||
break;
|
||||
}
|
||||
GLog.n(Messages.get(WndStory.class,"bad"));
|
||||
} else if (hero.lanterfire <= 79 && hero.lanterfire >= 60 && Random.Float() <= 0.70f ) {
|
||||
switch (Random.Int(4)){
|
||||
case 0: default:
|
||||
Buff.affect(hero, BlessNoMoney.class).set( (100), 1 );
|
||||
break;
|
||||
case 1:
|
||||
Buff.affect(hero, BlessGoodSTR.class).set( (100), 1 );
|
||||
break;
|
||||
case 2:
|
||||
Buff.affect(hero, BlessMobDied.class).set( (100), 1 );
|
||||
break;
|
||||
case 3:
|
||||
Buff.affect(hero, BlessMixShiled.class).set( (100), 1 );
|
||||
break;
|
||||
case 4:
|
||||
Buff.affect(hero, BlessImmune.class).set( (100), 1 );
|
||||
break;
|
||||
}
|
||||
GLog.p(Messages.get(WndStory.class,"good"));
|
||||
} else if (hero.lanterfire <= 79 && hero.lanterfire >= 60) {
|
||||
GLog.b(Messages.get(WndStory.class,"normoal"));
|
||||
} else if (hero.lanterfire <= 59 && hero.lanterfire >= 35 && Random.Float() <= 0.40f ) {
|
||||
switch (Random.Int(5)){
|
||||
case 0: default:
|
||||
Buff.affect(hero, MagicGirlSayMoneyMore.class).set( (100), 1 );
|
||||
break;
|
||||
case 1:
|
||||
Buff.affect(hero, MagicGirlSaySoftDied.class).set( (100), 1 );
|
||||
break;
|
||||
case 2:
|
||||
Buff.affect(hero, MagicGirlSayCursed.class).set( (100), 1 );
|
||||
break;
|
||||
case 3:
|
||||
Buff.affect(hero, MagicGirlSaySlowy.class).set( (100), 1 );
|
||||
break;
|
||||
case 4:
|
||||
Buff.affect(hero, MagicGirlSayKill.class).set( (100), 1 );
|
||||
break;
|
||||
case 5:
|
||||
Buff.affect(hero, MagicGirlSayNoSTR.class).set( (100), 1 );
|
||||
break;
|
||||
}
|
||||
GLog.n(Messages.get(WndStory.class,"bad"));
|
||||
} else if (hero.lanterfire <= 59 && hero.lanterfire >= 35 && Random.Float() <= 0.20f ) {
|
||||
switch (Random.Int(4)){
|
||||
case 0: default:
|
||||
Buff.affect(hero, BlessNoMoney.class).set( (100), 1 );
|
||||
break;
|
||||
case 1:
|
||||
Buff.affect(hero, BlessGoodSTR.class).set( (100), 1 );
|
||||
break;
|
||||
case 2:
|
||||
Buff.affect(hero, BlessMobDied.class).set( (100), 1 );
|
||||
break;
|
||||
case 3:
|
||||
Buff.affect(hero, BlessMixShiled.class).set( (100), 1 );
|
||||
break;
|
||||
case 4:
|
||||
Buff.affect(hero, BlessImmune.class).set( (100), 1 );
|
||||
break;
|
||||
}
|
||||
GLog.p(Messages.get(WndStory.class,"good"));
|
||||
} else if (hero.lanterfire <= 59 && hero.lanterfire >= 35) {
|
||||
GLog.b(Messages.get(WndStory.class,"normoal"));
|
||||
} else if (hero.lanterfire <= 34 && hero.lanterfire >= 1 && Random.Float() <= 0.40f ) {
|
||||
switch (Random.Int(5)){
|
||||
case 0: default:
|
||||
Buff.affect(hero, MagicGirlSayMoneyMore.class).set( (100), 1 );
|
||||
break;
|
||||
case 1:
|
||||
Buff.affect(hero, MagicGirlSaySoftDied.class).set( (100), 1 );
|
||||
break;
|
||||
case 2:
|
||||
Buff.affect(hero, MagicGirlSayCursed.class).set( (100), 1 );
|
||||
break;
|
||||
case 3:
|
||||
Buff.affect(hero, MagicGirlSaySlowy.class).set( (100), 1 );
|
||||
break;
|
||||
case 4:
|
||||
Buff.affect(hero, MagicGirlSayKill.class).set( (100), 1 );
|
||||
break;
|
||||
case 5:
|
||||
Buff.affect(hero, MagicGirlSayNoSTR.class).set( (100), 1 );
|
||||
break;
|
||||
}
|
||||
GLog.n(Messages.get(WndStory.class,"bad"));
|
||||
} else if (hero.lanterfire <= 34 && hero.lanterfire >= 1 && Random.Float() <= 0.35f ) {
|
||||
switch (Random.Int(4)){
|
||||
case 0: default:
|
||||
Buff.affect(hero, BlessNoMoney.class).set( (100), 1 );
|
||||
break;
|
||||
case 1:
|
||||
Buff.affect(hero, BlessGoodSTR.class).set( (100), 1 );
|
||||
break;
|
||||
case 2:
|
||||
Buff.affect(hero, BlessMobDied.class).set( (100), 1 );
|
||||
break;
|
||||
case 3:
|
||||
Buff.affect(hero, BlessMixShiled.class).set( (100), 1 );
|
||||
break;
|
||||
case 4:
|
||||
Buff.affect(hero, BlessImmune.class).set( (100), 1 );
|
||||
break;
|
||||
}
|
||||
GLog.p(Messages.get(WndStory.class,"good"));
|
||||
} else if (hero.lanterfire <= 34 && hero.lanterfire >= 1) {
|
||||
GLog.b(Messages.get(WndStory.class,"normoal"));
|
||||
} else if (hero.lanterfire <= 0 && Random.Float() <= 0.48f ) {
|
||||
switch (Random.Int(5)){
|
||||
case 0: default:
|
||||
Buff.affect(hero, MagicGirlSayMoneyMore.class).set( (100), 1 );
|
||||
break;
|
||||
case 1:
|
||||
Buff.affect(hero, MagicGirlSaySoftDied.class).set( (100), 1 );
|
||||
break;
|
||||
case 2:
|
||||
Buff.affect(hero, MagicGirlSayCursed.class).set( (100), 1 );
|
||||
break;
|
||||
case 3:
|
||||
Buff.affect(hero, MagicGirlSaySlowy.class).set( (100), 1 );
|
||||
break;
|
||||
case 4:
|
||||
Buff.affect(hero, MagicGirlSayKill.class).set( (100), 1 );
|
||||
break;
|
||||
case 5:
|
||||
Buff.affect(hero, MagicGirlSayNoSTR.class).set( (100), 1 );
|
||||
break;
|
||||
}
|
||||
GLog.n(Messages.get(WndStory.class,"bad"));
|
||||
} else if (hero.lanterfire <= 0 && Random.Float() <= 0.10f ) {
|
||||
switch (Random.Int(4)){
|
||||
case 0: default:
|
||||
Buff.affect(hero, BlessNoMoney.class).set( (100), 1 );
|
||||
break;
|
||||
case 1:
|
||||
Buff.affect(hero, BlessGoodSTR.class).set( (100), 1 );
|
||||
break;
|
||||
case 2:
|
||||
Buff.affect(hero, BlessMobDied.class).set( (100), 1 );
|
||||
break;
|
||||
case 3:
|
||||
Buff.affect(hero, BlessMixShiled.class).set( (100), 1 );
|
||||
break;
|
||||
case 4:
|
||||
Buff.affect(hero, BlessImmune.class).set( (100), 1 );
|
||||
break;
|
||||
}
|
||||
GLog.p(Messages.get(WndStory.class,"good"));
|
||||
} else if (hero.lanterfire <= 0 ) {
|
||||
GLog.b(Messages.get(WndStory.class,"normoal"));
|
||||
}
|
||||
GLog.p(Messages.get(WndStory.class,"good"));
|
||||
} else if (hero.lanterfire <= 99 && hero.lanterfire >= 90) {
|
||||
switch (Random.Int(4)){
|
||||
case 0: default:
|
||||
Buff.affect(hero, BlessNoMoney.class).set( (100), 1 );
|
||||
break;
|
||||
case 1:
|
||||
Buff.affect(hero, BlessGoodSTR.class).set( (100), 1 );
|
||||
break;
|
||||
case 2:
|
||||
Buff.affect(hero, BlessMobDied.class).set( (100), 1 );
|
||||
break;
|
||||
case 3:
|
||||
Buff.affect(hero, BlessMixShiled.class).set( (100), 1 );
|
||||
break;
|
||||
case 4:
|
||||
Buff.affect(hero, BlessImmune.class).set( (100), 1 );
|
||||
break;
|
||||
}
|
||||
GLog.p(Messages.get(WndStory.class,"good"));
|
||||
} else if (hero.lanterfire <= 89 && hero.lanterfire >= 80 && Random.Float() <= 0.05f ) {
|
||||
switch (Random.Int(5)){
|
||||
case 0: default:
|
||||
Buff.affect(hero, MagicGirlSayMoneyMore.class).set( (100), 1 );
|
||||
break;
|
||||
case 1:
|
||||
Buff.affect(hero, MagicGirlSaySoftDied.class).set( (100), 1 );
|
||||
break;
|
||||
case 2:
|
||||
Buff.affect(hero, MagicGirlSayCursed.class).set( (100), 1 );
|
||||
break;
|
||||
case 3:
|
||||
Buff.affect(hero, MagicGirlSaySlowy.class).set( (100), 1 );
|
||||
break;
|
||||
case 4:
|
||||
Buff.affect(hero, MagicGirlSayKill.class).set( (100), 1 );
|
||||
break;
|
||||
case 5:
|
||||
Buff.affect(hero, MagicGirlSayNoSTR.class).set( (100), 1 );
|
||||
break;
|
||||
}
|
||||
GLog.n(Messages.get(WndStory.class,"bad"));
|
||||
} else if (hero.lanterfire <= 89 && hero.lanterfire >= 80 && Random.Float() <= 0.85f ) {
|
||||
switch (Random.Int(4)){
|
||||
case 0: default:
|
||||
Buff.affect(hero, BlessNoMoney.class).set( (100), 1 );
|
||||
break;
|
||||
case 1:
|
||||
Buff.affect(hero, BlessGoodSTR.class).set( (100), 1 );
|
||||
break;
|
||||
case 2:
|
||||
Buff.affect(hero, BlessMobDied.class).set( (100), 1 );
|
||||
break;
|
||||
case 3:
|
||||
Buff.affect(hero, BlessMixShiled.class).set( (100), 1 );
|
||||
break;
|
||||
case 4:
|
||||
Buff.affect(hero, BlessImmune.class).set( (100), 1 );
|
||||
break;
|
||||
}
|
||||
GLog.p(Messages.get(WndStory.class,"good"));
|
||||
} else if (hero.lanterfire <= 89 && hero.lanterfire >= 80) {
|
||||
GLog.b(Messages.get(WndStory.class,"normoal"));
|
||||
} else if (hero.lanterfire <= 79 && hero.lanterfire >= 60 && Random.Float() <= 0.25f ) {
|
||||
switch (Random.Int(5)){
|
||||
case 0: default:
|
||||
Buff.affect(hero, MagicGirlSayMoneyMore.class).set( (100), 1 );
|
||||
break;
|
||||
case 1:
|
||||
Buff.affect(hero, MagicGirlSaySoftDied.class).set( (100), 1 );
|
||||
break;
|
||||
case 2:
|
||||
Buff.affect(hero, MagicGirlSayCursed.class).set( (100), 1 );
|
||||
break;
|
||||
case 3:
|
||||
Buff.affect(hero, MagicGirlSaySlowy.class).set( (100), 1 );
|
||||
break;
|
||||
case 4:
|
||||
Buff.affect(hero, MagicGirlSayKill.class).set( (100), 1 );
|
||||
break;
|
||||
case 5:
|
||||
Buff.affect(hero, MagicGirlSayNoSTR.class).set( (100), 1 );
|
||||
break;
|
||||
}
|
||||
GLog.n(Messages.get(WndStory.class,"bad"));
|
||||
} else if (hero.lanterfire <= 79 && hero.lanterfire >= 60 && Random.Float() <= 0.70f ) {
|
||||
switch (Random.Int(4)){
|
||||
case 0: default:
|
||||
Buff.affect(hero, BlessNoMoney.class).set( (100), 1 );
|
||||
break;
|
||||
case 1:
|
||||
Buff.affect(hero, BlessGoodSTR.class).set( (100), 1 );
|
||||
break;
|
||||
case 2:
|
||||
Buff.affect(hero, BlessMobDied.class).set( (100), 1 );
|
||||
break;
|
||||
case 3:
|
||||
Buff.affect(hero, BlessMixShiled.class).set( (100), 1 );
|
||||
break;
|
||||
case 4:
|
||||
Buff.affect(hero, BlessImmune.class).set( (100), 1 );
|
||||
break;
|
||||
}
|
||||
GLog.p(Messages.get(WndStory.class,"good"));
|
||||
} else if (hero.lanterfire <= 79 && hero.lanterfire >= 60) {
|
||||
GLog.b(Messages.get(WndStory.class,"normoal"));
|
||||
} else if (hero.lanterfire <= 59 && hero.lanterfire >= 35 && Random.Float() <= 0.40f ) {
|
||||
switch (Random.Int(5)){
|
||||
case 0: default:
|
||||
Buff.affect(hero, MagicGirlSayMoneyMore.class).set( (100), 1 );
|
||||
break;
|
||||
case 1:
|
||||
Buff.affect(hero, MagicGirlSaySoftDied.class).set( (100), 1 );
|
||||
break;
|
||||
case 2:
|
||||
Buff.affect(hero, MagicGirlSayCursed.class).set( (100), 1 );
|
||||
break;
|
||||
case 3:
|
||||
Buff.affect(hero, MagicGirlSaySlowy.class).set( (100), 1 );
|
||||
break;
|
||||
case 4:
|
||||
Buff.affect(hero, MagicGirlSayKill.class).set( (100), 1 );
|
||||
break;
|
||||
case 5:
|
||||
Buff.affect(hero, MagicGirlSayNoSTR.class).set( (100), 1 );
|
||||
break;
|
||||
}
|
||||
GLog.n(Messages.get(WndStory.class,"bad"));
|
||||
} else if (hero.lanterfire <= 59 && hero.lanterfire >= 35 && Random.Float() <= 0.20f ) {
|
||||
switch (Random.Int(4)){
|
||||
case 0: default:
|
||||
Buff.affect(hero, BlessNoMoney.class).set( (100), 1 );
|
||||
break;
|
||||
case 1:
|
||||
Buff.affect(hero, BlessGoodSTR.class).set( (100), 1 );
|
||||
break;
|
||||
case 2:
|
||||
Buff.affect(hero, BlessMobDied.class).set( (100), 1 );
|
||||
break;
|
||||
case 3:
|
||||
Buff.affect(hero, BlessMixShiled.class).set( (100), 1 );
|
||||
break;
|
||||
case 4:
|
||||
Buff.affect(hero, BlessImmune.class).set( (100), 1 );
|
||||
break;
|
||||
}
|
||||
GLog.p(Messages.get(WndStory.class,"good"));
|
||||
} else if (hero.lanterfire <= 59 && hero.lanterfire >= 35) {
|
||||
GLog.b(Messages.get(WndStory.class,"normoal"));
|
||||
} else if (hero.lanterfire <= 34 && hero.lanterfire >= 1 && Random.Float() <= 0.40f ) {
|
||||
switch (Random.Int(5)){
|
||||
case 0: default:
|
||||
Buff.affect(hero, MagicGirlSayMoneyMore.class).set( (100), 1 );
|
||||
break;
|
||||
case 1:
|
||||
Buff.affect(hero, MagicGirlSaySoftDied.class).set( (100), 1 );
|
||||
break;
|
||||
case 2:
|
||||
Buff.affect(hero, MagicGirlSayCursed.class).set( (100), 1 );
|
||||
break;
|
||||
case 3:
|
||||
Buff.affect(hero, MagicGirlSaySlowy.class).set( (100), 1 );
|
||||
break;
|
||||
case 4:
|
||||
Buff.affect(hero, MagicGirlSayKill.class).set( (100), 1 );
|
||||
break;
|
||||
case 5:
|
||||
Buff.affect(hero, MagicGirlSayNoSTR.class).set( (100), 1 );
|
||||
break;
|
||||
}
|
||||
GLog.n(Messages.get(WndStory.class,"bad"));
|
||||
} else if (hero.lanterfire <= 34 && hero.lanterfire >= 1 && Random.Float() <= 0.35f ) {
|
||||
switch (Random.Int(4)){
|
||||
case 0: default:
|
||||
Buff.affect(hero, BlessNoMoney.class).set( (100), 1 );
|
||||
break;
|
||||
case 1:
|
||||
Buff.affect(hero, BlessGoodSTR.class).set( (100), 1 );
|
||||
break;
|
||||
case 2:
|
||||
Buff.affect(hero, BlessMobDied.class).set( (100), 1 );
|
||||
break;
|
||||
case 3:
|
||||
Buff.affect(hero, BlessMixShiled.class).set( (100), 1 );
|
||||
break;
|
||||
case 4:
|
||||
Buff.affect(hero, BlessImmune.class).set( (100), 1 );
|
||||
break;
|
||||
}
|
||||
GLog.p(Messages.get(WndStory.class,"good"));
|
||||
} else if (hero.lanterfire <= 34 && hero.lanterfire >= 1) {
|
||||
GLog.b(Messages.get(WndStory.class,"normoal"));
|
||||
} else if (hero.lanterfire <= 0 && Random.Float() <= 0.48f ) {
|
||||
switch (Random.Int(5)){
|
||||
case 0: default:
|
||||
Buff.affect(hero, MagicGirlSayMoneyMore.class).set( (100), 1 );
|
||||
break;
|
||||
case 1:
|
||||
Buff.affect(hero, MagicGirlSaySoftDied.class).set( (100), 1 );
|
||||
break;
|
||||
case 2:
|
||||
Buff.affect(hero, MagicGirlSayCursed.class).set( (100), 1 );
|
||||
break;
|
||||
case 3:
|
||||
Buff.affect(hero, MagicGirlSaySlowy.class).set( (100), 1 );
|
||||
break;
|
||||
case 4:
|
||||
Buff.affect(hero, MagicGirlSayKill.class).set( (100), 1 );
|
||||
break;
|
||||
case 5:
|
||||
Buff.affect(hero, MagicGirlSayNoSTR.class).set( (100), 1 );
|
||||
break;
|
||||
}
|
||||
GLog.n(Messages.get(WndStory.class,"bad"));
|
||||
} else if (hero.lanterfire <= 0 && Random.Float() <= 0.10f ) {
|
||||
switch (Random.Int(4)){
|
||||
case 0: default:
|
||||
Buff.affect(hero, BlessNoMoney.class).set( (100), 1 );
|
||||
break;
|
||||
case 1:
|
||||
Buff.affect(hero, BlessGoodSTR.class).set( (100), 1 );
|
||||
break;
|
||||
case 2:
|
||||
Buff.affect(hero, BlessMobDied.class).set( (100), 1 );
|
||||
break;
|
||||
case 3:
|
||||
Buff.affect(hero, BlessMixShiled.class).set( (100), 1 );
|
||||
break;
|
||||
case 4:
|
||||
Buff.affect(hero, BlessImmune.class).set( (100), 1 );
|
||||
break;
|
||||
}
|
||||
GLog.p(Messages.get(WndStory.class,"good"));
|
||||
} else if (hero.lanterfire <= 0 ) {
|
||||
GLog.b(Messages.get(WndStory.class,"normoal"));
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue
Block a user