Update Beta-21 P2

All Commit P2!!! AMD,YES!
This commit is contained in:
LingASDJ 2022-10-08 20:54:48 +08:00
parent 0185668fcb
commit 667cce55f2
61 changed files with 2093 additions and 190 deletions

10
.gitignore vendored
View File

@ -26,3 +26,13 @@ android/src/google-services.json
android/src/debug/google-services.json
android/google-services.json
google-services.json
desktop/hs_err_pid13892.log
desktop/hs_err_pid17852.log
desktop/hs_err_pid20516.log
desktop/hs_err_pid21216.log
desktop/hs_err_pid21636.log
desktop/hs_err_pid24112.log
desktop/hs_err_pid7460.log
desktop/replay_pid17852.log
desktop/replay_pid21216.log
desktop/replay_pid7460.log

View File

@ -551,11 +551,16 @@ public class Bundle {
return false;
}
}
public static void addAlias( Class<?> cl, String alias ) {
aliases.put( alias, cl.getName() );
}
public void put(int var4, LinkedHashMap var5) {
public void put(int s, LinkedHashMap c) {
try {
data.put(String.valueOf(s), c );
} catch (JSONException e) {
Game.reportException(e);
}
}
}

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.5 KiB

After

Width:  |  Height:  |  Size: 3.4 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.4 KiB

After

Width:  |  Height:  |  Size: 9.8 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.5 KiB

After

Width:  |  Height:  |  Size: 4.5 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.5 KiB

After

Width:  |  Height:  |  Size: 4.5 KiB

View File

@ -6,6 +6,24 @@ text.herostat.item_wnd_cursed = 诅咒的
text.herostat.item_basic = 常规:
text.herostat.item_enter = 查看物品生成
###LANTERFIRE
actors.buffs.nyctophobia.name=光芒前路
actors.buffs.nyctophobia.name2=灯火摇曳
actors.buffs.nyctophobia.name3=微暗寂光
actors.buffs.nyctophobia.name4=静谧光束
actors.buffs.nyctophobia.name5=黑暗蚕食
actors.buffs.nyctophobia.name6=寂灭若寞
actors.buffs.nyctophobia.desc=灯火一路向前,你信心满满。
actors.buffs.nyctophobia.desc2=灯火摇曳不定,但你仍然无所畏惧。
actors.buffs.nyctophobia.desc3=灯火开始变得更加微弱,你开始对自己的信心产生了怀疑。
actors.buffs.nyctophobia.desc4=灯火的光束已经变得静谧,你感到生命在逐渐离你而去。
actors.buffs.nyctophobia.desc5=灯火正在变得十分微弱,你感觉自己注定失败!
actors.buffs.nyctophobia.desc6=灯火完全熄灭了,前方有什么等着你?
actors.buffs.lighs.name=提灯信仰
actors.buffs.lighs.desc=即使是在最黑暗的地牢中,提灯发出的温暖光芒也会让你一路灯火前行。\n\n当提灯激活时你的灯火值将持续回复。
actors.buffs.puresoul.lanter=光芒前路
actors.buffs.puresoul.desc_intro_lanter=你的信心就犹如你的灯火一样,光芒且明亮。\n\n当前灯火值%s点\n\n
actors.buffs.puresoul.desc=灯火前行,光芒前路。没有什么东西可以影响到你。
@ -26,6 +44,27 @@ actors.buffs.magicgirldebuff.magicgirlsayslowy.desc=缓慢的走向死亡吧…
actors.buffs.magicgirldebuff.magicgirlsaysoftdied.name=魔女的低语-软弱
actors.buffs.magicgirldebuff.magicgirlsaysoftdied.desc=软弱不是你的缺点,恐惧才是!\n\n本大层所有被护甲减免过的物理伤害增加5%
actors.buffs.magicgirldebuff.magicgirlsaymoneymore.name=魔女的低语-贪婪
actors.buffs.magicgirldebuff.magicgirlsaymoneymore.desc=贪婪的欲望是人类的本质\n\n本大层商店的价格除十字架和食物和治疗药水打1折其他全部1.5倍价格。
### Good Blees Buffs
actors.buffs.clearbleesdgoodbuff.blessgoodstr.name=纯洁的祝福-坚毅
actors.buffs.clearbleesdgoodbuff.blessgoodstr.desc=坚毅是我们不屈的斗志!\n\n本大层玩家额外追加8点力量
actors.buffs.clearbleesdgoodbuff.blessnomoney.name=纯洁的祝福-富饶
actors.buffs.clearbleesdgoodbuff.blessnomoney.desc=魔女的气息在我们身旁徘徊,商人们一定会对你毕恭毕敬。\n\n本大层商店全场打3折
actors.buffs.clearbleesdgoodbuff.blessmobdied.name=纯洁的祝福-安息
actors.buffs.clearbleesdgoodbuff.blessmobdied.desc=安息吧!怪物们!!!\n\n本大层英雄伤害x2!
actors.buffs.clearbleesdgoodbuff.blessmixshiled.name=纯洁的祝福-守护
actors.buffs.clearbleesdgoodbuff.blessmixshiled.desc=守护我们最后的种子!\n\n本大层英雄在血满的情况下每300回合获得一些护盾。
actors.buffs.clearbleesdgoodbuff.blessimmune.name=纯洁的祝福-隐没
actors.buffs.clearbleesdgoodbuff.blessimmune.desc=隐没在这人群之中,我们便是超凡脱俗的个体\n\n本大层英雄免疫魔法效果和减少20%的伤害。
actors.buffs.clearbleesdgoodbuff.blessgoread.name=纯洁的祝福-前路
actors.buffs.clearbleesdgoodbuff.blessgoread.desc=行走在这令人惧怕的地牢中,灯火是前路的指引\n\n本大层英雄饥饿值高于90%的情况下,获得每两回合+2的血量。
###MLPD
actors.mobs.bosses.crossdiedtower.dead=控制目标已丢失,已自动摧毁……

View File

@ -1,4 +1,23 @@
###MLPD
items.lightblack.oilpotion.name= 油瓶
items.lightblack.oilpotion.desc=里面蕴含了提灯需要的物质,在提灯熄灭前,它总能重新装填并让提灯重新发光。
items.lightblack.oilpotion.ac_refill=装填
items.lightblack.oillantern.name = 提灯
items.lightblack.oillantern.desc = 这盏来自硬化玻璃的提灯是暗无天日的地牢中不可缺少的物品。\n\n即使是在最黑暗的地牢里这个简单的提灯也能照亮你的道路只要你有油瓶来保持它的光亮。\n\n在你落寞的时候她就是你身旁的最好归宿。
items.lightblack.oillantern.ac_light = 点亮
items.lightblack.oillantern.ac_snuff = 熄灭
items.lightblack.oillantern.ac_refill = 加油
items.lightblack.oillantern.ac_burn = 点燃
items.lightblack.oillantern.lanterneedsx=你的提灯需要新的油瓶来加油。
items.lightblack.oillantern.lanterdied=你的提灯忽隐忽现地熄灭了!
items.lightblack.oillantern.lanteroff=你吹灭了提灯。
items.lightblack.oillantern.lanteron=你点亮了提灯。
items.lightblack.oillantern.lanterreload=你把提灯的灯油再次加满了。
items.lightblack.oillantern.lanterneed=你没多的油瓶给提灯加油了。
items.lightblack.oillantern.lanterneeds=你需要一个备用的油瓶给提灯加油。
items.artifacts.goldiron.name=镀金铁锤
items.artifacts.goldiron.desc=这曾是巨魔铁匠的锤子,其中蕴含了神奇的力量。\n\n因为你一不小心把巨魔镐子给搞丢了,巨魔委托你去杀死他的阴暗面。\n\n如今你已完成巨魔的委托这镀金铁锤便是巨魔给予你的礼物……
@ -64,22 +83,12 @@ items.food.blandfruit.lightfruit=闪电果
items.potions.potionoflightningshiledx.name=闪电药剂
items.potions.potionoflightningshiledx.desc=该药剂融合了闪电花和电的综合化学效应,能在一段时间内。为玩家完全免疫电击伤害。
items.lightblack.oillantern.name = 油灯
items.lightblack.oillantern.ac_light = 点亮
items.lightblack.oillantern.ac_snuff = 熄灭
items.lightblack.oillantern.ac_refill = 加油
items.lightblack.oillantern.ac_burn = 点燃
#MLPDSHOPREADYGO!!!
items.food.potionoflightningshiled.name=闪电护盾药剂
items.food.potionoflightningshiled.desc=喝下这甜到掉牙的奇怪液体后,体内会爆发一股巨大的能量,让你可以持续一段时间无视电击伤害。
items.food.potionoflightningshiled.ac_oat=饮用药剂
items.food.potionoflightningshiled.look_msg=你感受到了电流在你体内融合……你暂时中和了电击反应。
items.quest.shopdiedbook.name=诅咒之书
items.quest.shopdiedbook.chill=这层的警报已经拉响,离开这里,快!
items.quest.shopdiedbook.desc=当你准备抢劫的时候,商人向你丢了一本书,这本书蕴含了Γ诅咒的力量Γ的魔力,你无力将其扔掉,源源不断的Γ商人守卫军队Γ正在前来。你只能战斗!!!\n\n诅咒之书在身上时英雄将受到Γ移速减缓一半同时商店守卫军队将源源不断的出兵Γ来阻止你,你也无法离开本层。唯有击败Γ本层商店守卫首领Γ之后,才能解除诅咒之书的力量,获得店主的认可。\n\n_但同时店主会因为缺货问题在下一大层无法开设商店将在下下一大层重新恢复商店交易。_
items.weapon.melee.endingblade.name=终焉
items.weapon.melee.endingblade.desc=不知道从哪来的一个拆开的场记板貌似沾染了焰之诅咒会随机产生_一种诅咒_有着强大的侵蚀能力一旦装备了它就无法脱身了……\n\n这个武器在攻击敌人的时候能吸收一定的浊焰能量,在汲取一定的浊焰能量后会产生新的能力以及自我升级。\n\n当前的浊焰能量:
items.weapon.melee.endingblade.desc_2=\n\n(通过打击敌人减掉)死亡宣告当前冷却值为:

View File

@ -136,9 +136,9 @@ challenges.exsg_desc=药水癔症详细规则:\n力量药水 力量-1\n灵视
challenges.light&black = Π空洞旅程Π
challenges.light&black_desc=\n_一次次的踏入地牢只会使自己更加的被恶毒的魔法侵蚀。_这一次你已不知道是何时再来到这个地牢但邪恶的诡异气氛扑面而来。一个神秘人给了你一个提灯。你却不知道何时会被这里的魔法吞噬。\n\n开启本挑战将会获得在开局获得特殊理智Buff并且追加一个新道具_提灯_提灯的精神力量需要玩家击败敌人获得。\n\n_只有光芒中你才能活下去。否则你会被黑暗蚕食一点点的丧失理智成为怪物。_\n\n详情请看更新记录
challenges.happy = 追加内容
challenges.boss = _[BossRush]_
challenges.boss_desc=在一次又一次的冒险中,首领越来越熟悉你了,这一次,首领将会全方面对你实行进攻。\n\n但地牢里面将没有常规作战楼层但是会对战8个首领。每个首领前都会有一个补给层\n\n未完成
challenges.custom = 额外玩法
challenges.dhxd =_灯火前路_
challenges.dhxd_desc= 灯火指引着前进的道路,提灯引路,灯火前行![此为三挑以上的特殊机制,但你也可以直接开启它!]
dlc.bossrush=首领对决
dlc.bossrush_desc=被你击败过多次的首领们熟识了英雄的技能,并掌握了一定的对策。它们盘踞在地牢中,等待复仇的时机。\n你不知道这次又会有怎样的危机需要应对。\n但你感觉到这次的冒险绝对与其他时期有所不同。\n开启本挑战时支离破碎和缩餐节食将无法生成与使用。

View File

@ -469,4 +469,7 @@ ui.changelist.mlpd.vm0_6_7_x_changes.bug_06x29=-1.修复了不抢劫回归地牢
ui.changelist.mlpd.vm0_6_7_x_changes.bug_06x30=-1.修复了浊焰魔女的错误崩溃\n-2.修复了终焉的错误生成\n-3.红龙之王机制改变,老存档已无法加载,请重新开启新档
ui.changelist.mlpd.vm0_6_7_x_changes.bug_06x31=-P1.5\n1.修复了终焉的掉率问题\n2.修复其他崩溃\n3.修复了钥匙剑的面板问题\n\nP1.4\n1.修复了徽章崩溃的问题\n-2.修复了浊焰魔女崩溃的问题\n-3.修复了终焉无法正常使用的问题
ui.changelist.mlpd.vm0_6_7_x_changes.bug_06x32=-P2.0\n1.修复了种子在部分挑战内完全不一样的问题\n2.修复了一些意外的闪退Bug\n3.修复了火元素的活死人问题
//ui.changelist.mlpd.vm0_5_x_changes.xxx//

View File

@ -2,6 +2,12 @@ windows.textchallenges.seed_custom_title = 种子
windows.textchallenges.hint = 不输入即为随机种子
windows.textchallenges.delete_seed_input = 清除
windows.wndstory.normoal=命运似乎不在你的掌控之中,魔女似乎也对你不是很感兴趣,风平浪静,一切如旧。
windows.wndstory.bad=灯火摇摆不定,某位魔女的低语将影响你这一大层的旅途!
windows.wndstory.good=灯火光彩夺目,提灯中的信仰诞生出一种纯洁的祝福!
windows.wndstory.start=灯火冒险正式开始!你获得了一次免费的增益Roll!
windows.wndstory.letxz=灯火冒险欢迎您已赠送你免费的增益Roll!
windows.wndsettings$datatab.firebase=FireBase数据提交
windows.wndsettings$displaytab.firebase_active=FireBase数据提交
windows.wndsettings$displaytab.firebase_desc=FireBase是一款由_Google_推出的一种开发者服务。Ling在魔绫这边添加了_FireBase崩溃日志收集报告_。\n当你尚未开启此功能时你的_所有崩溃报告都会保存在本地Data数据区域(使用Root才能访问)_\n\n当你开启本功能后你在魔绫游玩的所有崩溃报告将会在下次启动魔绫一并提交到程序后台以便JDSALing我维护。\n-开启此功能代表你同意提交你的崩溃数据和Δ手机的基本公开信息Δ_(手机型号,ROOT权限检测,安卓版本,运存检测,屏幕方向,手机内存)_,同时非常感谢你开启此功能以供Ling后续维护魔绫。\nΔ感谢你的支持与理解同时感谢你的游玩Δ\n\nΞ开启此功能后重启游戏后本地崩溃数据将自动提交到魔绫控制终端Ξ
@ -11,6 +17,8 @@ windows.wndgame.dialog_user=为了更好的在后续崩溃维护检查遇到一
windows.wndtextinput.yes=确认
windows.wndtextinput.no=稍后
windows.wndhero$statstab.lanterfire=灯火
windows.wndsettings$helptab.reset=重设你的用户ID
windows.wndsettings$helptab.title=辅助功能

View File

@ -52,9 +52,11 @@ public class Challenges {
public static final int SBSG = 1024;
public static final int EXSG = 2048;
public static final int STRONGER_BOSSES = 4096;
public static final int PRO = 8192;
public static final int DHXD = 8192;
public static final int MAX_VALUE = 16384;
public static final int PRO = 16384;
public static final int MAX_VALUE = 32768;
public static final String[] NAME_IDS = {
"no_food",
@ -70,13 +72,13 @@ public class Challenges {
"sbsg",
"exsg",
"stronger_bosses",
//"light&black",
"dhxd",
"pro",
};
public static final int[] MASKS = {
NO_FOOD, NO_ARMOR, NO_HEALING, NO_HERBALISM, SWARM_INTELLIGENCE, DARKNESS, NO_SCROLLS
, AQUAPHOBIA, CHAMPION_ENEMIES,RLPT,SBSG,EXSG,STRONGER_BOSSES,PRO,
, AQUAPHOBIA, CHAMPION_ENEMIES,RLPT,SBSG,EXSG,STRONGER_BOSSES,DHXD,PRO,
};
public String name;

View File

@ -616,6 +616,11 @@ public class Dungeon {
return depth == 6 || depth == 11 || depth == 16;
}
//Todo Roll 一下
public static boolean RollLevel() {
return depth == 6 || depth == 11 || depth == 16|| depth == 21;
}
public static boolean aqiLevel() {
return depth == 4 || depth == 8 || depth == 13 || depth == 18;
}

View File

@ -38,6 +38,8 @@ import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.ChampionEnemy;
import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.ChampionHero;
import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Charm;
import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Chill;
import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.ClearBleesdGoodBuff.BlessImmune;
import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.ClearBleesdGoodBuff.BlessMobDied;
import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Corrosion;
import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Cripple;
import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Doom;
@ -523,9 +525,12 @@ public abstract class Char extends Actor {
damage *= 0.67f;
}
//削弱10%伤害
//TODO 审判 削弱10%伤害
if ( buff(MagicGirlSayKill.class) != null ){
damage *= 0.90f;
//TODO 安息 x2伤害
} else if ( buff(BlessMobDied.class) != null ) {
damage *= 2f;
}
for (ChampionEnemy buff : buffs(ChampionEnemy.class)){
@ -586,6 +591,11 @@ public abstract class Char extends Actor {
return;
}
//TODO 减免20%伤害
if(buff(BlessImmune.class) != null && !this.isImmune(BlessImmune.class)){
dmg = (int) Math.ceil(dmg * 0.8f);
}
if(isInvulnerable(src.getClass())){
sprite.showStatus(CharSprite.POSITIVE, Messages.get(this, "invulnerable"));
return;

View File

@ -0,0 +1,98 @@
package com.shatteredpixel.shatteredpixeldungeon.actors.buffs.ClearBleesdGoodBuff;
import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Buff;
import com.shatteredpixel.shatteredpixeldungeon.actors.hero.Hero;
import com.shatteredpixel.shatteredpixeldungeon.items.armor.glyphs.AntiMagic;
import com.shatteredpixel.shatteredpixeldungeon.messages.Messages;
import com.shatteredpixel.shatteredpixeldungeon.ui.BuffIndicator;
import com.watabou.noosa.Image;
import com.watabou.utils.Bundle;
public class BlessGoRead extends Buff {
{
type = buffType.POSITIVE;
immunities.addAll(AntiMagic.RESISTS);
}
public static int level = 0;
private int interval = 1;
@Override
public boolean act() {
if (target.isAlive()) {
spend(interval);
if (level <= 0) {
detach();
}
}
return true;
}
public int level() {
return level;
}
public void set( int value, int time ) {
//decide whether to override, preferring high value + low interval
if (Math.sqrt(interval)*level <= Math.sqrt(time)*value) {
level = value;
interval = time;
spend(time - cooldown() - 1);
}
}
@Override
public float iconFadePercent() {
if (target instanceof Hero){
float max = ((Hero) target).lvl;
return Math.max(0, (max-level)/max);
}
return 0;
}
@Override
public String toString() {
return Messages.get(this, "name");
}
@Override
public String desc() {
return Messages.get(this, "desc");
}
private static final String LEVEL = "level";
private static final String INTERVAL = "interval";
@Override
public void storeInBundle( Bundle bundle ) {
super.storeInBundle( bundle );
bundle.put( INTERVAL, interval );
bundle.put( LEVEL, level );
}
@Override
public void restoreFromBundle( Bundle bundle ) {
super.restoreFromBundle( bundle );
interval = bundle.getInt( INTERVAL );
level = bundle.getInt( LEVEL );
}
@Override
public void tintIcon(Image icon) {
icon.hardlight(0xFF1493);
}
@Override
public int icon() {
return BuffIndicator.GOBUFF_UPRD;
}
}

View File

@ -0,0 +1,95 @@
package com.shatteredpixel.shatteredpixeldungeon.actors.buffs.ClearBleesdGoodBuff;
import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Buff;
import com.shatteredpixel.shatteredpixeldungeon.actors.hero.Hero;
import com.shatteredpixel.shatteredpixeldungeon.messages.Messages;
import com.shatteredpixel.shatteredpixeldungeon.ui.BuffIndicator;
import com.watabou.noosa.Image;
import com.watabou.utils.Bundle;
public class BlessGoodSTR extends Buff {
{
type = buffType.POSITIVE;
}
public static int level = 0;
private int interval = 1;
@Override
public boolean act() {
if (target.isAlive()) {
spend(interval);
if (level <= 0) {
detach();
}
}
return true;
}
public int level() {
return level;
}
public void set( int value, int time ) {
//decide whether to override, preferring high value + low interval
if (Math.sqrt(interval)*level <= Math.sqrt(time)*value) {
level = value;
interval = time;
spend(time - cooldown() - 1);
}
}
@Override
public float iconFadePercent() {
if (target instanceof Hero){
float max = ((Hero) target).lvl;
return Math.max(0, (max-level)/max);
}
return 0;
}
@Override
public String toString() {
return Messages.get(this, "name");
}
@Override
public String desc() {
return Messages.get(this, "desc", level, dispTurns(visualcooldown()));
}
private static final String LEVEL = "level";
private static final String INTERVAL = "interval";
@Override
public void storeInBundle( Bundle bundle ) {
super.storeInBundle( bundle );
bundle.put( INTERVAL, interval );
bundle.put( LEVEL, level );
}
@Override
public void restoreFromBundle( Bundle bundle ) {
super.restoreFromBundle( bundle );
interval = bundle.getInt( INTERVAL );
level = bundle.getInt( LEVEL );
}
@Override
public void tintIcon(Image icon) {
icon.hardlight(0x00ff00);
}
@Override
public int icon() {
return BuffIndicator.GOBUFF_UPRD;
}
}

View File

@ -0,0 +1,97 @@
package com.shatteredpixel.shatteredpixeldungeon.actors.buffs.ClearBleesdGoodBuff;
import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Buff;
import com.shatteredpixel.shatteredpixeldungeon.actors.hero.Hero;
import com.shatteredpixel.shatteredpixeldungeon.items.armor.glyphs.AntiMagic;
import com.shatteredpixel.shatteredpixeldungeon.messages.Messages;
import com.shatteredpixel.shatteredpixeldungeon.ui.BuffIndicator;
import com.watabou.noosa.Image;
import com.watabou.utils.Bundle;
public class BlessImmune extends Buff {
{
type = buffType.POSITIVE;
immunities.addAll(AntiMagic.RESISTS);
}
public static int level = 0;
private int interval = 1;
@Override
public boolean act() {
if (target.isAlive()) {
spend(interval);
if (level <= 0) {
detach();
}
}
return true;
}
public int level() {
return level;
}
public void set( int value, int time ) {
//decide whether to override, preferring high value + low interval
if (Math.sqrt(interval)*level <= Math.sqrt(time)*value) {
level = value;
interval = time;
spend(time - cooldown() - 1);
}
}
@Override
public float iconFadePercent() {
if (target instanceof Hero){
float max = ((Hero) target).lvl;
return Math.max(0, (max-level)/max);
}
return 0;
}
@Override
public String toString() {
return Messages.get(this, "name");
}
@Override
public String desc() {
return Messages.get(this, "desc", level, dispTurns(visualcooldown()));
}
private static final String LEVEL = "level";
private static final String INTERVAL = "interval";
@Override
public void storeInBundle( Bundle bundle ) {
super.storeInBundle( bundle );
bundle.put( INTERVAL, interval );
bundle.put( LEVEL, level );
}
@Override
public void restoreFromBundle( Bundle bundle ) {
super.restoreFromBundle( bundle );
interval = bundle.getInt( INTERVAL );
level = bundle.getInt( LEVEL );
}
@Override
public void tintIcon(Image icon) {
icon.hardlight(0xD2691E);
}
@Override
public int icon() {
return BuffIndicator.GOBUFF_UPRD;
}
}

View File

@ -0,0 +1,112 @@
package com.shatteredpixel.shatteredpixeldungeon.actors.buffs.ClearBleesdGoodBuff;
import static com.shatteredpixel.shatteredpixeldungeon.Dungeon.hero;
import com.shatteredpixel.shatteredpixeldungeon.Dungeon;
import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Barrier;
import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Buff;
import com.shatteredpixel.shatteredpixeldungeon.actors.hero.Hero;
import com.shatteredpixel.shatteredpixeldungeon.messages.Messages;
import com.shatteredpixel.shatteredpixeldungeon.ui.BuffIndicator;
import com.shatteredpixel.shatteredpixeldungeon.utils.GLog;
import com.watabou.noosa.Image;
import com.watabou.utils.Bundle;
public class BlessMixShiled extends Buff {
{
type = buffType.POSITIVE;
}
public static int level = 0;
private int interval = 1;
@Override
public boolean act() {
if (target.isAlive()) {
if(Dungeon.hero.buff(BlessMixShiled.class) != null && hero.HT == hero.HP){
if(Dungeon.depth <= 5) {
Buff.affect(hero, Barrier.class).setShield(((30)));
} else {
Buff.affect(hero, Barrier.class).setShield(((30) * Dungeon.depth / 5));
}
spend(300f);
GLog.w("你的血量已满,奖励你一些护盾值。");
}
spend(interval);
if (level <= 0) {
detach();
}
}
return true;
}
public int level() {
return level;
}
public void set( int value, int time ) {
//decide whether to override, preferring high value + low interval
if (Math.sqrt(interval)*level <= Math.sqrt(time)*value) {
level = value;
interval = time;
spend(time - cooldown() - 1);
}
}
@Override
public float iconFadePercent() {
if (target instanceof Hero){
float max = ((Hero) target).lvl;
return Math.max(0, (max-level)/max);
}
return 0;
}
@Override
public String toString() {
return Messages.get(this, "name");
}
@Override
public String desc() {
return Messages.get(this, "desc", level, dispTurns(visualcooldown()));
}
private static final String LEVEL = "level";
private static final String INTERVAL = "interval";
@Override
public void storeInBundle( Bundle bundle ) {
super.storeInBundle( bundle );
bundle.put( INTERVAL, interval );
bundle.put( LEVEL, level );
}
@Override
public void restoreFromBundle( Bundle bundle ) {
super.restoreFromBundle( bundle );
interval = bundle.getInt( INTERVAL );
level = bundle.getInt( LEVEL );
}
@Override
public void tintIcon(Image icon) {
icon.hardlight(0x00ffff);
}
@Override
public int icon() {
return BuffIndicator.GOBUFF_UPRD;
}
}

View File

@ -0,0 +1,95 @@
package com.shatteredpixel.shatteredpixeldungeon.actors.buffs.ClearBleesdGoodBuff;
import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Buff;
import com.shatteredpixel.shatteredpixeldungeon.actors.hero.Hero;
import com.shatteredpixel.shatteredpixeldungeon.messages.Messages;
import com.shatteredpixel.shatteredpixeldungeon.ui.BuffIndicator;
import com.watabou.noosa.Image;
import com.watabou.utils.Bundle;
public class BlessMobDied extends Buff {
{
type = buffType.POSITIVE;
}
public static int level = 0;
private int interval = 1;
@Override
public boolean act() {
if (target.isAlive()) {
spend(interval);
if (level <= 0) {
detach();
}
}
return true;
}
public int level() {
return level;
}
public void set( int value, int time ) {
//decide whether to override, preferring high value + low interval
if (Math.sqrt(interval)*level <= Math.sqrt(time)*value) {
level = value;
interval = time;
spend(time - cooldown() - 1);
}
}
@Override
public float iconFadePercent() {
if (target instanceof Hero){
float max = ((Hero) target).lvl;
return Math.max(0, (max-level)/max);
}
return 0;
}
@Override
public String toString() {
return Messages.get(this, "name");
}
@Override
public String desc() {
return Messages.get(this, "desc", level, dispTurns(visualcooldown()));
}
private static final String LEVEL = "level";
private static final String INTERVAL = "interval";
@Override
public void storeInBundle( Bundle bundle ) {
super.storeInBundle( bundle );
bundle.put( INTERVAL, interval );
bundle.put( LEVEL, level );
}
@Override
public void restoreFromBundle( Bundle bundle ) {
super.restoreFromBundle( bundle );
interval = bundle.getInt( INTERVAL );
level = bundle.getInt( LEVEL );
}
@Override
public void tintIcon(Image icon) {
icon.hardlight(0x869634);
}
@Override
public int icon() {
return BuffIndicator.GOBUFF_UPRD;
}
}

View File

@ -0,0 +1,95 @@
package com.shatteredpixel.shatteredpixeldungeon.actors.buffs.ClearBleesdGoodBuff;
import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Buff;
import com.shatteredpixel.shatteredpixeldungeon.actors.hero.Hero;
import com.shatteredpixel.shatteredpixeldungeon.messages.Messages;
import com.shatteredpixel.shatteredpixeldungeon.ui.BuffIndicator;
import com.watabou.noosa.Image;
import com.watabou.utils.Bundle;
public class BlessNoMoney extends Buff {
{
type = buffType.POSITIVE;
}
public static int level = 0;
private int interval = 1;
@Override
public boolean act() {
if (target.isAlive()) {
spend(interval);
if (level <= 0) {
detach();
}
}
return true;
}
public int level() {
return level;
}
public void set( int value, int time ) {
//decide whether to override, preferring high value + low interval
if (Math.sqrt(interval)*level <= Math.sqrt(time)*value) {
level = value;
interval = time;
spend(time - cooldown() - 1);
}
}
@Override
public float iconFadePercent() {
if (target instanceof Hero){
float max = ((Hero) target).lvl;
return Math.max(0, (max-level)/max);
}
return 0;
}
@Override
public String toString() {
return Messages.get(this, "name");
}
@Override
public String desc() {
return Messages.get(this, "desc", level, dispTurns(visualcooldown()));
}
private static final String LEVEL = "level";
private static final String INTERVAL = "interval";
@Override
public void storeInBundle( Bundle bundle ) {
super.storeInBundle( bundle );
bundle.put( INTERVAL, interval );
bundle.put( LEVEL, level );
}
@Override
public void restoreFromBundle( Bundle bundle ) {
super.restoreFromBundle( bundle );
interval = bundle.getInt( INTERVAL );
level = bundle.getInt( LEVEL );
}
@Override
public void tintIcon(Image icon) {
icon.hardlight(0x840803);
}
@Override
public int icon() {
return BuffIndicator.GOBUFF_UPRD;
}
}

View File

@ -0,0 +1,11 @@
package com.shatteredpixel.shatteredpixeldungeon.actors.buffs;
import com.shatteredpixel.shatteredpixeldungeon.ui.BuffIndicator;
public class HealingXP extends Healing{
@Override
public int icon() {
return BuffIndicator.HEALING;
}
}

View File

@ -41,6 +41,7 @@ public class Hunger extends Buff implements Hero.Doom {
public static final float HUNGRY = 300f;
public static final float STARVING = 450f;
public static final float ARVING = 300f;
private float level;
private float partialDamage;
@ -72,6 +73,12 @@ public class Hunger extends Buff implements Hero.Doom {
return true;
}
// //TODO 高于90% +2 血量
// if(hero.buff(BlessGoRead.class) != null && level >= 405f && hero.HP != hero.HT){
// Buff.affect(hero, HealingXP.class).setHeal((int) (2), 0, 0);
// spend(2f);
// }
if (target.isAlive() && target instanceof Hero) {
Hero hero = (Hero)target;

View File

@ -0,0 +1,70 @@
package com.shatteredpixel.shatteredpixeldungeon.actors.buffs;
import com.shatteredpixel.shatteredpixeldungeon.Dungeon;
import com.shatteredpixel.shatteredpixeldungeon.actors.Char;
import com.shatteredpixel.shatteredpixeldungeon.items.lightblack.OilLantern;
import com.shatteredpixel.shatteredpixeldungeon.messages.Messages;
public class LighS extends FlavourBuff {
private static final float DELAY = 7.0f;
public static final int DISTANCE = 6;
public static final float DURATION = 300.0f;
public LighS() {
this.type = Buff.buffType.POSITIVE;
}
public boolean attachTo(Char target) {
if (!LighS.super.attachTo(target)) {
return false;
}
if (Dungeon.level == null) {
return true;
}
target.viewDistance = Math.max(Dungeon.level.viewDistance, 6);
Dungeon.observe();
return true;
}
public boolean act() {
OilLantern lantern = Dungeon.hero.belongings.getItem(OilLantern.class);
if (lantern == null || !lantern.isActivated() || lantern.getCharge() <= 0) {
assert lantern != null;
lantern.deactivate(Dungeon.hero, false);
detach();
return true;
}
lantern.spendCharge();
if(Dungeon.depth>20){
spend(DELAY + 6f);
} else if (Dungeon.depth>15){
spend(DELAY + 4f);
} else if (Dungeon.depth>10){
spend(DELAY + 2f);
} else {
spend(DELAY);
}
return true;
}
public void detach() {
this.target.viewDistance = Dungeon.level.viewDistance;
Dungeon.observe();
LighS.super.detach();
}
public int icon() {
return 22;
}
public String toString() {
return Messages.get(this, "name");
}
public String desc() {
return Messages.get(this, "desc", dispTurns());
}
}

View File

@ -86,7 +86,7 @@ public class MagicGirlSayCursed extends Buff {
@Override
public int icon() {
return BuffIndicator.TERROR;
return BuffIndicator.DEBUFF_DOWN;
}

View File

@ -85,7 +85,7 @@ public class MagicGirlSayKill extends Buff {
@Override
public int icon() {
return BuffIndicator.FIREDIED;
return BuffIndicator.DEBUFF_DOWN;
}

View File

@ -0,0 +1,93 @@
package com.shatteredpixel.shatteredpixeldungeon.actors.buffs.MagicGirlDebuff;
import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Buff;
import com.shatteredpixel.shatteredpixeldungeon.actors.hero.Hero;
import com.shatteredpixel.shatteredpixeldungeon.messages.Messages;
import com.shatteredpixel.shatteredpixeldungeon.ui.BuffIndicator;
import com.watabou.noosa.Image;
import com.watabou.utils.Bundle;
public class MagicGirlSayMoneyMore extends Buff {
{
type = buffType.POSITIVE;
}
public static int level = 0;
private int interval = 1;
@Override
public boolean act() {
if (target.isAlive()) {
spend(interval);
if (level <= 0) {
detach();
}
}
return true;
}
public int level() {
return level;
}
public void set( int value, int time ) {
//decide whether to override, preferring high value + low interval
if (Math.sqrt(interval)*level <= Math.sqrt(time)*value) {
level = value;
interval = time;
spend(time - cooldown() - 1);
}
}
@Override
public float iconFadePercent() {
if (target instanceof Hero){
float max = ((Hero) target).lvl;
return Math.max(0, (max-level)/max);
}
return 0;
}
@Override
public String toString() {
return Messages.get(this, "name");
}
@Override
public String desc() {
return Messages.get(this, "desc", level, dispTurns(visualcooldown()));
}
private static final String LEVEL = "level";
private static final String INTERVAL = "interval";
@Override
public void storeInBundle( Bundle bundle ) {
super.storeInBundle( bundle );
bundle.put( INTERVAL, interval );
bundle.put( LEVEL, level );
}
@Override
public void restoreFromBundle( Bundle bundle ) {
super.restoreFromBundle( bundle );
interval = bundle.getInt( INTERVAL );
level = bundle.getInt( LEVEL );
}
@Override
public void tintIcon(Image icon) {
icon.hardlight(0x409988);
}
@Override
public int icon() {
return BuffIndicator.DEBUFF_DOWN;
}
}

View File

@ -86,7 +86,7 @@ public class MagicGirlSayNoSTR extends Buff {
@Override
public int icon() {
return BuffIndicator.POISON;
return BuffIndicator.DEBUFF_DOWN;
}

View File

@ -86,7 +86,7 @@ public class MagicGirlSaySlowy extends Buff {
@Override
public int icon() {
return BuffIndicator.HEX;
return BuffIndicator.DEBUFF_DOWN;
}

View File

@ -86,7 +86,7 @@ public class MagicGirlSaySoftDied extends Buff {
@Override
public int icon() {
return BuffIndicator.MAGIC_SLEEP;
return BuffIndicator.DEBUFF_DOWN;
}

View File

@ -0,0 +1,117 @@
package com.shatteredpixel.shatteredpixeldungeon.actors.buffs;
import static com.shatteredpixel.shatteredpixeldungeon.Dungeon.hero;
import com.shatteredpixel.shatteredpixeldungeon.Dungeon;
import com.shatteredpixel.shatteredpixeldungeon.actors.hero.Hero;
import com.shatteredpixel.shatteredpixeldungeon.messages.Messages;
import com.shatteredpixel.shatteredpixeldungeon.ui.BuffIndicator;
import com.shatteredpixel.shatteredpixeldungeon.utils.GLog;
import com.watabou.utils.Bundle;
public class Nyctophobia extends Buff implements Hero.Doom {
private static final String LEVEL = "level";
private static final String PARTIALDAMAGE = "partialDamage";
private static final float STEP = 100.0f;
public String[] hopelessTxt = {"你觉得自己注定失败。", "你感到无能为力。", "你感到生命在逐渐离你而去。"};
private float level;
private float partialDamage;
@Override
public boolean act() {
if (Dungeon.depth <= 5) {
spend(STEP);
return true;
} else if (Dungeon.level.locked || this.target.buff(LighS.class) != null) {
spend(STEP);
return true;
} else {
Hero hero = (Hero) this.target;
if (!this.target.isAlive()) {
diactivate();
return true;
}
if (hero.lanterfire > 30) {
hero.damageLantern(1);
spend(17f-(float) Dungeon.depth/5);
} else {
spend(STEP);
}
return true;
}
}
@Override
public String desc() {
if (hero.lanterfire >= 90 && hero.lanterfire <= 100) {
return Messages.get(this, "desc");
} else if (hero.lanterfire >= 80 && hero.lanterfire <= 89) {
return Messages.get(this, "desc2");
} else if (hero.lanterfire >= 60 && hero.lanterfire <= 79) {
return Messages.get(this, "desc3");
} else if (hero.lanterfire >= 35 && hero.lanterfire <= 59) {
return Messages.get(this, "desc4");
} else if (hero.lanterfire >= 1 && hero.lanterfire <= 34) {
return Messages.get(this, "desc5");
} else {
return Messages.get(this, "desc6");
}
}
@Override
public int icon() {
if (hero.lanterfire >= 90 && hero.lanterfire <= 100) {
return BuffIndicator.LANTERFIRE_ONE;
} else if (hero.lanterfire >= 80 && hero.lanterfire <= 89) {
return BuffIndicator.LANTERFIRE_TWO;
} else if (hero.lanterfire >= 60 && hero.lanterfire <= 79) {
return BuffIndicator.LANTERFIRE_THREE;
} else if (hero.lanterfire >= 35 && hero.lanterfire <= 59) {
return BuffIndicator.LANTERFIRE_FOUR;
} else if (hero.lanterfire >= 1 && hero.lanterfire <= 34) {
return BuffIndicator.LANTERFIRE_FIVE;
} else {
return BuffIndicator.LANTERFIRE_SIX;
}
}
@Override
public void onDeath() {
GLog.n("无尽的黑暗涌入了你的意识,你最终被黑暗拖入了深渊...");
}
@Override
public void restoreFromBundle(Bundle bundle) {
super.restoreFromBundle(bundle);
this.level = bundle.getFloat(LEVEL);
this.partialDamage = bundle.getFloat(PARTIALDAMAGE);
}
@Override
public void storeInBundle(Bundle bundle) {
super.storeInBundle(bundle);
bundle.put(LEVEL, this.level);
bundle.put(PARTIALDAMAGE, this.partialDamage);
}
public String toString() {
if (hero.lanterfire >= 90 && hero.lanterfire <= 100) {
return Messages.get(this, "name");
} else if (hero.lanterfire >= 80 && hero.lanterfire <= 89) {
return Messages.get(this, "name2");
} else if (hero.lanterfire >= 60 && hero.lanterfire <= 79) {
return Messages.get(this, "name3");
} else if (hero.lanterfire >= 35 && hero.lanterfire <= 59) {
return Messages.get(this, "name4");
} else if (hero.lanterfire >= 1 && hero.lanterfire <= 34) {
return Messages.get(this, "name5");
} else {
return Messages.get(this, "name6");
}
}
}

View File

@ -22,6 +22,7 @@
package com.shatteredpixel.shatteredpixeldungeon.actors.hero;
import static com.shatteredpixel.shatteredpixeldungeon.Challenges.AQUAPHOBIA;
import static com.shatteredpixel.shatteredpixeldungeon.Challenges.DHXD;
import static com.shatteredpixel.shatteredpixeldungeon.Challenges.PRO;
import static com.shatteredpixel.shatteredpixeldungeon.Dungeon.hero;
import static com.shatteredpixel.shatteredpixeldungeon.SPDSettings.HelpSettings;
@ -49,10 +50,18 @@ import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Bless;
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.buffs.ChampionEnemy;
import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.ChampionHero;
import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Chill;
import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.ClearBleesdGoodBuff.BlessGoRead;
import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.ClearBleesdGoodBuff.BlessGoodSTR;
import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.ClearBleesdGoodBuff.BlessImmune;
import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.ClearBleesdGoodBuff.BlessMixShiled;
import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.ClearBleesdGoodBuff.BlessMobDied;
import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.ClearBleesdGoodBuff.BlessNoMoney;
import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Combo;
import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Cripple;
import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.DeadSoul;
import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Drowsy;
import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Foresight;
import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.FrostImbueEX;
@ -66,11 +75,13 @@ import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Invisibility;
import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.LostInventory;
import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.MagicGirlDebuff.MagicGirlSayCursed;
import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.MagicGirlDebuff.MagicGirlSayKill;
import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.MagicGirlDebuff.MagicGirlSayMoneyMore;
import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.MagicGirlDebuff.MagicGirlSayNoSTR;
import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.MagicGirlDebuff.MagicGirlSaySlowy;
import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.MagicGirlDebuff.MagicGirlSaySoftDied;
import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.MindVision;
import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Momentum;
import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Nyctophobia;
import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Paralysis;
import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Regeneration;
import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Shadows;
@ -84,6 +95,7 @@ import com.shatteredpixel.shatteredpixeldungeon.actors.mobs.BloodBat;
import com.shatteredpixel.shatteredpixeldungeon.actors.mobs.Mob;
import com.shatteredpixel.shatteredpixeldungeon.actors.mobs.Monk;
import com.shatteredpixel.shatteredpixeldungeon.actors.mobs.Snake;
import com.shatteredpixel.shatteredpixeldungeon.actors.mobs.lb.BlackSoul;
import com.shatteredpixel.shatteredpixeldungeon.custom.ch.GameTracker;
import com.shatteredpixel.shatteredpixeldungeon.effects.CellEmitter;
import com.shatteredpixel.shatteredpixeldungeon.effects.CheckedCell;
@ -120,7 +132,6 @@ import com.shatteredpixel.shatteredpixeldungeon.items.keys.IronKey;
import com.shatteredpixel.shatteredpixeldungeon.items.keys.Key;
import com.shatteredpixel.shatteredpixeldungeon.items.keys.SkeletonKey;
import com.shatteredpixel.shatteredpixeldungeon.items.lightblack.OilLantern;
import com.shatteredpixel.shatteredpixeldungeon.items.lightblack.OilPotion;
import com.shatteredpixel.shatteredpixeldungeon.items.potions.Potion;
import com.shatteredpixel.shatteredpixeldungeon.items.potions.PotionOfExperience;
import com.shatteredpixel.shatteredpixeldungeon.items.potions.PotionOfHealing;
@ -166,6 +177,7 @@ import com.shatteredpixel.shatteredpixeldungeon.utils.GLog;
import com.shatteredpixel.shatteredpixeldungeon.windows.WndHero;
import com.shatteredpixel.shatteredpixeldungeon.windows.WndMessage;
import com.shatteredpixel.shatteredpixeldungeon.windows.WndResurrect;
import com.shatteredpixel.shatteredpixeldungeon.windows.WndStory;
import com.shatteredpixel.shatteredpixeldungeon.windows.WndTradeItem;
import com.watabou.noosa.Camera;
import com.watabou.noosa.Game;
@ -240,6 +252,9 @@ public class Hero extends Char {
public int lvl = 1;
public int exp = 0;
//TODO 灯火前行
public int lanterfire;
public int HTBoost = 0;
@ -291,9 +306,11 @@ public class Hero extends Char {
strBonus += (int)Math.floor(STR * (0.03f + 0.05f*pointsInTalent(Talent.STRONGMAN)));
}
//TODO 无力 本大层-3力量
//TODO 无力 本大层-3力量 : 坚毅 本大层力量+8
if(Dungeon.hero.buff(MagicGirlSayNoSTR.class) != null){
strBonus -= 3;
} else if(Dungeon.hero.buff(BlessGoodSTR.class) != null) {
strBonus += 8;
}
return STR + strBonus;
@ -312,7 +329,7 @@ public class Hero extends Char {
private static final String HTBOOST = "htboost";
private static final String LANTERFTR = "lanterfire";
public int lanterfire;
@Override
public void storeInBundle( Bundle bundle ) {
@ -517,15 +534,22 @@ public class Hero extends Char {
Buff.affect( this, Regeneration.class );
Buff.affect( this, Hunger.class );
// if(lanterfireactive){
// Buff.affect( this, PureSoul.class );
// }
if(lanterfireactive){
Buff.affect( this, Nyctophobia.class );
}
Buff.affect(hero, MagicGirlSayNoSTR.class).set( (3), 1 );
Buff.affect(hero, MagicGirlSayCursed.class).set( (3), 1 );
Buff.affect(hero, MagicGirlSaySlowy.class).set( (3), 1 );
Buff.affect(hero, MagicGirlSayKill.class).set( (3), 1 );
Buff.affect(hero, MagicGirlSaySoftDied.class).set( (3), 1 );
// Buff.affect(hero, BlessMixShiled.class).set( (20), 1 );
// Buff.affect(hero, BlessMobDied.class).set( (20), 1 );
// Buff.affect(hero, BlessGoodSTR.class).set( (20), 1 );
// Buff.affect(hero, BlessNoMoney.class).set( (20), 1 );
// Buff.affect(hero, BlessGoRead.class).set( (20), 1 );
// Buff.affect(hero, BlessImmune.class).set( (20), 1 );
// Buff.affect(hero, MagicGirlSayMoneyMore.class).set( (20), 1 );
// Buff.affect(hero, MagicGirlSayNoSTR.class).set( (20), 1 );
// Buff.affect(hero, MagicGirlSaySlowy.class).set( (20), 1 );
// Buff.affect(hero, MagicGirlSaySoftDied.class).set( (20), 1 );
// Buff.affect(hero, MagicGirlSayCursed.class).set( (20), 1 );
// Buff.affect(hero, MagicGirlSayKill.class).set( (20), 1 );
if(HelpSettings()) {
Buff.affect(this, GameTracker.class);
@ -893,22 +917,41 @@ public class Hero extends Char {
}
private boolean actMove( HeroAction.Move action ) {
MagicGirlSayNoSTR.level -= 1;
//检查
int chCount = 0;
for (int ch : Challenges.MASKS){
if ((Dungeon.challenges & ch) != 0) chCount++;
}
if(chCount >= 3 && !Dungeon.isChallenged(PRO) && !lanterfireactive){
//TODO 获取三个挑战的枚举后则超过或等于3挑战以激活挑战在英雄移动的时候
//
if(chCount >= 3 && !lanterfireactive && !Dungeon.isChallenged(PRO) || Dungeon.isChallenged(DHXD) && !lanterfireactive){
//TODO 灯火前行
lanterfire = 100;
new OilLantern().quantity(1).identify().collect();
new OilPotion().quantity(100).identify().collect();
new Ankh().quantity(1).identify().collect();
Dungeon.gold+=10000;
lanterfireactive = true;
GLog.n("系统已经检测到你已开启困难模式,灯火会与你结伴同行,但同时,恶魔也会对你馋言欲滴。");
Buff.affect( this, Nyctophobia.class );
// GLog.n("系统已经检测到你已开启困难模式,灯火会与你结伴同行,但同时,恶魔也会对你馋言欲滴。");
switch (Random.Int(3)){
case 0: default:
Buff.affect(hero, BlessGoRead.class).set( (100), 1 );
case 1:
Buff.affect(hero, BlessMobDied.class).set( (100), 1 );
break;
case 2:
Buff.affect(hero, BlessMixShiled.class).set( (100), 1 );
break;
case 3:
Buff.affect(hero, BlessImmune.class).set( (100), 1 );
break;
}
GLog.b(Messages.get(WndStory.class,"letxz"));
}
if (getCloser( action.dst )) {
@ -919,7 +962,6 @@ public class Hero extends Char {
return false;
}
}
private boolean actInteract( HeroAction.Interact action ) {
@ -1806,17 +1848,18 @@ public class Hero extends Char {
}
}
// if(Dungeon.isChallenged(LIGHTBLACK)) {
// BlackSoul s = new BlackSoul();
// s.pos = Dungeon.hero.pos;
// s.gold = Dungeon.gold;
// Dungeon.gold = 0;
// s.state = s.SLEEPING;
// GameScene.add(s);
// Buff.affect(s, ChampionEnemy.DeadSoulSX.class);
// Buff.affect(s, DeadSoul.class);
// GameScene.flash(0x80FF0000);
// }
if(lanterfireactive && hero.lanterfire <= 30) {
BlackSoul s = new BlackSoul();
s.pos = Dungeon.hero.pos;
s.gold = Dungeon.gold;
Dungeon.gold = 0;
s.state = s.SLEEPING;
GameScene.add(s);
Buff.affect(s, ChampionEnemy.DeadSoulSX.class);
Buff.affect(s, DeadSoul.class);
GameScene.flash(0x80FF0000);
}
if(Statistics.fireGirlnoshopping && Dungeon.depth < 0){
reallyDie( cause );
GLog.n(Messages.get(this,"died"));
@ -2269,6 +2312,263 @@ public class Hero extends Char {
HP = HT;
live();
if(lanterfireactive){
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"));
}
}
MagicalHolster holster = belongings.getItem(MagicalHolster.class);
Buff.affect(this, LostInventory.class);
@ -2310,9 +2610,9 @@ public class Hero extends Char {
//TODO 灯火前行逻辑
public void damageLantern(int value){
lanterfire -= value;
if(lanterfire <= 0){
damage(HT,this);
}
// if(lanterfire <= 0){
// damage(HT,this);
// }
}
public void healLantern(int value){

View File

@ -28,7 +28,6 @@ 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;
import com.shatteredpixel.shatteredpixeldungeon.actors.hero.abilities.ArmorAbility;
import com.shatteredpixel.shatteredpixeldungeon.actors.hero.abilities.huntress.NaturesPower;
@ -172,7 +171,7 @@ public enum HeroClass {
new FireFishSword().quantity(1).identify().collect();
new PotionOfInvisibility().quantity(45).identify().collect();
new LockSword().quantity(1).identify().collect();
Buff.affect(hero, ChampionHero.AntiMagic.class, 50000f);
//Buff.affect(hero, ChampionHero.AntiMagic.class, 50000f);
new Gauntlet().quantity(1).identify().collect();
new GoldIron().quantity(1).identify().collect();
new ScrollOfIdentify().quantity(45).identify().collect();

View File

@ -5,10 +5,14 @@
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;
@ -26,8 +30,18 @@ public class BlackHost extends Mob {
public int attackProc(Char var1, int var2) {
var2 = super.attackProc(var1, var2 / 2);
if (Random.Int(2) == 0) {
((Bleeding)Buff.affect(var1, Bleeding.class)).set((float)(var2 * 1));
((Poison)Buff.affect(var1, Poison.class)).set((float)(var2 * 1));
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;

View File

@ -21,7 +21,9 @@
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;
@ -32,6 +34,7 @@ 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;
@ -266,6 +269,20 @@ public abstract class Elemental extends Mob {
rangedCooldown = Integer.MAX_VALUE;
}
@Override
protected void meleeProc( Char enemy, int damage ) {
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");
}
}
}
}
@Override
public void die(Object cause) {
super.die(cause);

View File

@ -21,11 +21,15 @@
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;
@ -57,11 +61,21 @@ public class FetidRat extends Rat {
return Random.NormalIntRange(0, 2);
}
//todo Ghost Quest Mob-1
@Override
public int attackProc( Char enemy, int damage ) {
damage = super.attackProc( enemy, damage );
if (Random.Int(3) == 0) {
Buff.affect(enemy, Ooze.class).set( Ooze.DURATION );
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;

View File

@ -21,6 +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.Char;
import com.shatteredpixel.shatteredpixeldungeon.actors.blobs.Blob;
@ -28,6 +31,7 @@ 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;
@ -70,6 +74,7 @@ public class GnollTrickster extends Gnoll {
return !Dungeon.level.adjacent(pos, enemy.pos) && attack.collisionPos == enemy.pos;
}
//todo Ghost Quest Mob-2
@Override
public int attackProc( Char enemy, int damage ) {
damage = super.attackProc( enemy, damage );
@ -88,6 +93,13 @@ 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;
}

View File

@ -21,9 +21,13 @@
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.Char;
import com.shatteredpixel.shatteredpixeldungeon.actors.hero.Hero;
import com.shatteredpixel.shatteredpixeldungeon.actors.mobs.npcs.Ghost;
import com.shatteredpixel.shatteredpixeldungeon.items.food.MysteryMeat;
import com.shatteredpixel.shatteredpixeldungeon.items.wands.Wand;
@ -81,6 +85,12 @@ public class GreatCrab extends Crab {
GLog.n( Messages.get(this, "noticed") );
sprite.showStatus( CharSprite.NEUTRAL, Messages.get(this, "def_verb") );
Sample.INSTANCE.play( Assets.Sounds.HIT_PARRY, 1, Random.Float(0.96f, 1.05f));
if(lanterfireactive) {
if (Random.Float() <= 0.06f && enemy instanceof Hero && hero.lanterfire < 90) {
((Hero) enemy).damageLantern(1);
hero.sprite.showStatus(0x808080, "1");
}
}
} else {
super.damage( dmg, src );
}

View File

@ -21,11 +21,15 @@
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;
@ -61,6 +65,20 @@ 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);

View File

@ -5,10 +5,14 @@
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;
@ -46,7 +50,7 @@ public class MolotovHuntsman extends Mob {
int var4;
if (Random.Int(0, 10) > 7) {
var4 = Random.Int(this.attackCurse.length);
this.sprite.showStatus(16711680, this.attackCurse[var4], new Object[0]);
this.sprite.showStatus(16711680, this.attackCurse[var4]);
}
int var5 = super.attackProc(var1, var2);
@ -60,6 +64,14 @@ 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");
}
}
}
}

View File

@ -39,6 +39,7 @@ import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Cripple;
import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.FlavourBuff;
import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Frost;
import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.LockedFloor;
import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.MindVision;
import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Paralysis;
import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Roots;
import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Sleep;
@ -479,6 +480,7 @@ public class NewDM300 extends Mob {
spend(Dungeon.isChallenged(Challenges.STRONGER_BOSSES) ? 2f : 3f);
yell(Messages.get(this, "charging"));
Buff.affect( hero, MindVision.class, 7f );
sprite.showStatus(CharSprite.POSITIVE, Messages.get(this, "invulnerable"));
((DM300Sprite)sprite).updateChargeState(true);
((DM300Sprite)sprite).charge();

View File

@ -47,10 +47,9 @@ public class Rat extends Mob {
public int attackProc( Char enemy, int damage ) {
damage = super.attackProc( enemy, damage );
if(lanterfireactive){
if (Random.Int(5) == 1 && enemy instanceof Hero) {
((Hero) enemy).damageLantern(10);
hero.sprite.showStatus( 0x808080, "10");
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 );

View File

@ -21,6 +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.Assets;
import com.shatteredpixel.shatteredpixeldungeon.Dungeon;
import com.shatteredpixel.shatteredpixeldungeon.actors.Char;
@ -28,6 +31,7 @@ import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Buff;
import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Hex;
import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Vulnerable;
import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Weakness;
import com.shatteredpixel.shatteredpixeldungeon.actors.hero.Hero;
import com.shatteredpixel.shatteredpixeldungeon.items.Generator;
import com.shatteredpixel.shatteredpixeldungeon.items.Item;
import com.shatteredpixel.shatteredpixeldungeon.mechanics.Ballistica;
@ -50,6 +54,21 @@ 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() {
@ -111,8 +130,16 @@ public abstract class Shaman extends Mob {
if (hit( this, enemy, true )) {
if (Random.Int( 2 ) == 0) {
debuff( enemy );
if (enemy == Dungeon.hero) Sample.INSTANCE.play( Assets.Sounds.DEBUFF );
//TODO 低于70灯火 7%概率扣减1灯火(远程攻击)
if(lanterfireactive){
if (Random.Float()<=0.07f && enemy instanceof Hero && hero.lanterfire < 70) {
((Hero) enemy).damageLantern(1);
hero.sprite.showStatus( 0x808080, "1");
}
} else {
debuff( enemy );
}
}
int dmg = Random.NormalIntRange( 6, 15 );

View File

@ -21,6 +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.Char;
import com.shatteredpixel.shatteredpixeldungeon.actors.blobs.Blob;
@ -29,6 +32,7 @@ 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;
@ -120,6 +124,15 @@ public class Spinner extends Mob {
damage = super.attackProc( enemy, damage );
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;
}

View File

@ -21,11 +21,15 @@
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.Char;
import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Buff;
import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Degrade;
import com.shatteredpixel.shatteredpixeldungeon.actors.hero.Hero;
import com.shatteredpixel.shatteredpixeldungeon.items.Generator;
import com.shatteredpixel.shatteredpixeldungeon.items.Item;
import com.shatteredpixel.shatteredpixeldungeon.items.potions.PotionOfHealing;
@ -106,6 +110,14 @@ public class Warlock extends Mob implements Callback {
if (enemy == Dungeon.hero && Random.Int( 2 ) == 0) {
Buff.prolong( enemy, Degrade.class, Degrade.DURATION );
Sample.INSTANCE.play( Assets.Sounds.DEBUFF );
//TODO 远程攻击必定扣减两灯火
if(lanterfireactive){
if (enemy instanceof Hero && hero.lanterfire < 50) {
((Hero) enemy).damageLantern(2);
hero.sprite.showStatus( 0x808080, "2");
die(true);
}
}
}
int dmg = Random.NormalIntRange( 12, 18 );

View File

@ -21,9 +21,13 @@
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;
@ -52,7 +56,22 @@ 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";

View File

@ -1,7 +1,6 @@
package com.shatteredpixel.shatteredpixeldungeon.actors.mobs.lb;
import com.shatteredpixel.shatteredpixeldungeon.Dungeon;
import com.shatteredpixel.shatteredpixeldungeon.actors.Char;
import com.shatteredpixel.shatteredpixeldungeon.sprites.HeroSprite;
import com.shatteredpixel.shatteredpixeldungeon.sprites.MobSprite;
import com.watabou.noosa.TextureFilm;
@ -47,13 +46,6 @@ public class ShadowSprite extends MobSprite {
brightness(0.0f);
}
@Override
public void link(Char ch) {
super.link(ch);
renderShadow = false;
this.add(State.HALOMETHANEBURNING);
}
@Override
public void update() {

View File

@ -21,17 +21,21 @@
package com.shatteredpixel.shatteredpixeldungeon.actors.mobs.npcs;
import static com.shatteredpixel.shatteredpixeldungeon.Challenges.PRO;
import static com.shatteredpixel.shatteredpixeldungeon.Dungeon.hero;
import com.shatteredpixel.shatteredpixeldungeon.Dungeon;
import com.shatteredpixel.shatteredpixeldungeon.actors.Char;
import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.ClearBleesdGoodBuff.BlessNoMoney;
import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.MagicGirlDebuff.MagicGirlSayMoneyMore;
import com.shatteredpixel.shatteredpixeldungeon.effects.CellEmitter;
import com.shatteredpixel.shatteredpixeldungeon.effects.particles.ElmoParticle;
import com.shatteredpixel.shatteredpixeldungeon.items.Ankh;
import com.shatteredpixel.shatteredpixeldungeon.items.Heap;
import com.shatteredpixel.shatteredpixeldungeon.items.Item;
import com.shatteredpixel.shatteredpixeldungeon.items.armor.Armor;
import com.shatteredpixel.shatteredpixeldungeon.items.artifacts.DriedRose;
import com.shatteredpixel.shatteredpixeldungeon.items.food.Food;
import com.shatteredpixel.shatteredpixeldungeon.items.potions.PotionOfHealing;
import com.shatteredpixel.shatteredpixeldungeon.messages.Messages;
import com.shatteredpixel.shatteredpixeldungeon.scenes.GameScene;
import com.shatteredpixel.shatteredpixeldungeon.sprites.ShopkeeperSprite;
@ -167,8 +171,13 @@ public class Shopkeeper extends NPC {
public static int sellPrice(Item item){
int price = item.value() * 5 * (Dungeon.depth / 5 + 1);
if (Dungeon.isChallenged(PRO)) {
price *= 0.25;
if(Dungeon.hero.buff(MagicGirlSayMoneyMore.class) != null){
if(item instanceof Ankh ||item instanceof Food || item instanceof PotionOfHealing){
price *= 0.1;
}
price *= 1.5;
} else if (Dungeon.hero.buff(BlessNoMoney.class) != null) {
price *= 0.3;
}
return price;
}

View File

@ -79,7 +79,7 @@ public class Slyl extends NPC {
}else if(secnod) {
secnod=false;
tell(Messages.get(Slyl.class, "message2"));
} else if(secnod) {
} else if(rd) {
rd=false;
tell(Messages.get(Slyl.class, "message3"));
} else {

View File

@ -3,19 +3,15 @@ package com.shatteredpixel.shatteredpixeldungeon.items.lightblack;
// Decompiled by Jadx - 759ms
//
import static com.shatteredpixel.shatteredpixeldungeon.Dungeon.hero;
import com.shatteredpixel.shatteredpixeldungeon.Assets;
import com.shatteredpixel.shatteredpixeldungeon.Dungeon;
import com.shatteredpixel.shatteredpixeldungeon.actors.blobs.Blob;
import com.shatteredpixel.shatteredpixeldungeon.actors.blobs.Fire;
import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Buff;
import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Invisibility;
import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Light;
import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.LighS;
import com.shatteredpixel.shatteredpixeldungeon.actors.hero.Hero;
import com.shatteredpixel.shatteredpixeldungeon.effects.CellEmitter;
import com.shatteredpixel.shatteredpixeldungeon.effects.particles.FlameParticle;
import com.shatteredpixel.shatteredpixeldungeon.items.Item;
import com.shatteredpixel.shatteredpixeldungeon.mechanics.Ballistica;
import com.shatteredpixel.shatteredpixeldungeon.scenes.CellSelector;
import com.shatteredpixel.shatteredpixeldungeon.scenes.GameScene;
import com.shatteredpixel.shatteredpixeldungeon.messages.Messages;
import com.shatteredpixel.shatteredpixeldungeon.sprites.ItemSpriteSheet;
import com.shatteredpixel.shatteredpixeldungeon.utils.GLog;
import com.watabou.noosa.audio.Sample;
@ -24,20 +20,18 @@ import com.watabou.utils.Bundle;
import java.util.ArrayList;
public class OilLantern extends Item {
private static final String ACTIVE = "active";
public static final String AC_BURN = "BURN";
public static final String AC_LIGHT = "LIGHT";
public static final String AC_REFILL = "REFILL";
public static final String AC_SNUFF = "SNUFF";
private static final String CHARGE = "charge";
private static final String FLASKS = "flasks";
private static final int MAX_CHARGE = 100;
private static final float TIME_TO_USE = 1.0f;
private static final String TXT_DEACTIVATE = "你的灯笼忽隐忽现地熄灭了!";
private static final String TXT_LIGHT = "你点亮了灯笼。";
private static final String TXT_NO_FLASKS = "你没油给灯加油了!";
private static final String TXT_REFILL = "你把灯笼再次加满了。";
private static final String TXT_SNUFF = "你吹灭了灯笼。";
private static final float TIME_TO_USE = 2.0f;
private static final String TXT_STATUS = "%d%%";
private boolean active = false;
private int charge = MAX_CHARGE;
@ -47,10 +41,12 @@ public class OilLantern extends Item {
this.image = ItemSpriteSheet.LANTERNA;
this.unique = true;
updateSprite();
defaultAction = AC_LIGHT;
}
public void updateSprite() {
this.image = isActivated() ? ItemSpriteSheet.LANTERNB : ItemSpriteSheet.LANTERNA;
defaultAction = isActivated() ? AC_SNUFF : AC_LIGHT;
}
public int getCharge() {
@ -60,6 +56,7 @@ public class OilLantern extends Item {
public void spendCharge() {
this.charge--;
updateQuickslot();
hero.healLantern(1);
}
public boolean isActivated() {
@ -85,7 +82,7 @@ public class OilLantern extends Item {
ArrayList<String> actions = OilLantern.super.actions(hero);
actions.add(isActivated() ? AC_SNUFF : AC_LIGHT);
actions.add(AC_REFILL);
actions.add(AC_BURN);
actions.remove("THROW");
actions.remove("DROP");
return actions;
@ -95,25 +92,21 @@ public class OilLantern extends Item {
if (action.equals(AC_LIGHT)) {
if (this.charge > 0) {
activate(hero, true);
} else {
GLog.w(Messages.get(OilLantern.class,"lanterneedsx"));
}
} else if (action.equals(AC_REFILL)) {
if (this.flasks > 0) {
refill(hero);
} else {
GLog.w(TXT_NO_FLASKS);
GLog.w(Messages.get(OilLantern.class,"lanterneed"));
}
} else if (action.equals(AC_SNUFF)) {
if (isActivated()) {
deactivate(hero, true);
}
} else if (!action.equals(AC_BURN)) {
OilLantern.super.execute(hero, action);
} else if (this.flasks > 0) {
curUser = hero;
curItem = this;
GameScene.selectCell(burner);
} else {
GLog.w("你需要一个备用的油瓶!");
GLog.w(Messages.get(OilLantern.class,"lanterneeds"));
}
}
@ -122,21 +115,21 @@ public class OilLantern extends Item {
this.charge = MAX_CHARGE;
hero.spend(TIME_TO_USE);
hero.busy();
Sample.INSTANCE.play("sounds/snd_drink.mp3", (float) TIME_TO_USE, (float) TIME_TO_USE, 1.2f);
Sample.INSTANCE.play(Assets.Sounds.DRINK, TIME_TO_USE, TIME_TO_USE, 1.2f);
hero.sprite.operate(hero.pos);
GLog.i(TXT_REFILL);
GLog.i(Messages.get(OilLantern.class,"lanterreload"));
updateQuickslot();
}
public void activate(Hero hero, boolean voluntary) {
this.active = true;
updateSprite();
Buff.affect(hero, Light.class);
Buff.affect(hero, LighS.class);
hero.search(false);
if (voluntary) {
hero.spend(TIME_TO_USE);
hero.busy();
GLog.i(TXT_LIGHT);
GLog.i(Messages.get(OilLantern.class,"lanteron"));
hero.sprite.operate(hero.pos);
}
Sample.INSTANCE.play("sounds/snd_click.mp3");
@ -147,14 +140,14 @@ public class OilLantern extends Item {
public void deactivate(Hero hero, boolean voluntary) {
this.active = false;
updateSprite();
Buff.detach(hero, Light.class);
Buff.detach(hero, LighS.class);
if (voluntary) {
hero.spend(TIME_TO_USE);
hero.busy();
hero.sprite.operate(hero.pos);
GLog.i(TXT_SNUFF);
GLog.i(Messages.get(OilLantern.class,"lanteroff"));
} else {
GLog.w(TXT_DEACTIVATE);
GLog.w(Messages.get(OilLantern.class,"lanterdied"));
}
Sample.INSTANCE.play("sounds/snd_puff.mp3");
updateQuickslot();
@ -169,53 +162,49 @@ public class OilLantern extends Item {
return Utils.format(TXT_STATUS, this.charge);
}
public String info() {
StringBuilder sb = new StringBuilder();
sb.append("这盏来自硬化玻璃的灯是暗无天日的地牢中不可缺少的物品。即使是在最黑暗的地牢里,这个简单的油灯也能照亮你的道路,只要你有油瓶来保持它的光亮。");
sb.append(isActivated() ? "灯火旺盛得燃烧着,照亮了周围的一切与你的内心。 " : "这个小灯笼已经被掐灭了,等待着再次点亮的那一刻。");
sb.append("你有 ");
double d = this.charge;
Double.isNaN(d);
sb.append(d / 10.0d);
sb.append("盎司的灯油和 _");
sb.append(this.flasks);
sb.append(" 备用瓶");
sb.append(this.flasks != 1 ? "_" : "_");
sb.append("余下。");
return sb.toString();
}
protected CellSelector.Listener burner = new CellSelector.Listener() {
public void onSelect(Integer target) {
if (target != null) {
Ballistica.cast(Item.curUser.pos, target, false, true);
int cell = Ballistica.trace[0];
if (Ballistica.distance > 1) {
cell = Ballistica.trace[1];
}
GameScene.add(Blob.seed(cell, 5, Fire.class));
Item.curItem.flasks--;
Invisibility.dispel();
if (Item.curUser.pos == cell) {
GLog.i("你将油瓶中的灯油浇到自己身上然后点上了火。你为什么要这样做?");
} else {
GLog.i("你把灯油倒在了附近的地格并点着了那里。");
}
Sample.INSTANCE.play("sounds/snd_burning.mp3", 0.6f, 0.6f, 1.5f);
CellEmitter.get(cell).burst(FlameParticle.FACTORY, 5);
Item.curUser.sprite.operate(cell);
Item.curUser.busy();
Item.curUser.spend(1.0f);
}
}
public String prompt() {
return "选择一个身边的地格点燃";
}
};
// public String info() {
// StringBuilder sb = new StringBuilder();
// sb.append("这盏来自硬化玻璃的灯是暗无天日的地牢中不可缺少的物品。即使是在最黑暗的地牢里,这个简单的油灯也能照亮你的道路,只要你有油瓶来保持它的光亮。");
// sb.append(isActivated() ? "灯火旺盛得燃烧着,照亮了周围的一切与你的内心。 " : "这个小灯笼已经被掐灭了,等待着再次点亮的那一刻。");
// sb.append("你有 ");
// double d = this.charge;
// Double.isNaN(d);
// sb.append(d / 10.0d);
// sb.append("盎司的灯油和 _");
// sb.append(this.flasks);
// sb.append(" 备用瓶");
// sb.append(this.flasks != 1 ? "_" : "_");
// sb.append("余下。");
// return sb.toString();
// }
// protected CellSelector.Listener burner = new CellSelector.Listener() {
//
// public void onSelect(Integer target) {
// if (target != null) {
// Ballistica.cast(Item.curUser.pos, target, false, true);
// int cell = Ballistica.trace[0];
// if (Ballistica.distance > 1) {
// cell = Ballistica.trace[1];
// }
// GameScene.add(Blob.seed(cell, 5, Fire.class));
// Item.curItem.flasks--;
// Invisibility.dispel();
// if (Item.curUser.pos == cell) {
// GLog.i("你将油瓶中的灯油浇到自己身上然后点上了火。你为什么要这样做?");
// } else {
// GLog.i("你把灯油倒在了附近的地格并点着了那里。");
// }
// Sample.INSTANCE.play("sounds/snd_burning.mp3", 0.6f, 0.6f, 1.5f);
// CellEmitter.get(cell).burst(FlameParticle.FACTORY, 5);
// Item.curUser.sprite.operate(cell);
// Item.curUser.busy();
// Item.curUser.spend(1.0f);
// }
// }
//
// public String prompt() {
// return "选择一个身边的地格点燃";
// }
}

View File

@ -1,22 +1,18 @@
package com.shatteredpixel.shatteredpixeldungeon.items.lightblack;
import com.shatteredpixel.shatteredpixeldungeon.Dungeon;
import com.shatteredpixel.shatteredpixeldungeon.actors.Char;
import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Buff;
import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Slow;
import com.shatteredpixel.shatteredpixeldungeon.actors.hero.Hero;
import com.shatteredpixel.shatteredpixeldungeon.items.weapon.missiles.MissileWeapon;
import com.shatteredpixel.shatteredpixeldungeon.items.Item;
import com.shatteredpixel.shatteredpixeldungeon.sprites.ItemSpriteSheet;
import java.util.ArrayList;
public class OilPotion extends MissileWeapon {
public class OilPotion extends Item {
public static final String AC_REFILL = "REFILL";
public OilPotion() {
this.image = ItemSpriteSheet.SKPOTION;
this.tier = 1;
this.durability = 1.0f;
image = ItemSpriteSheet.SKPOTION;
stackable = true;
}
public ArrayList<String> actions(Hero hero) {
@ -38,12 +34,13 @@ public class OilPotion extends MissileWeapon {
detach(Dungeon.hero.belongings.backpack);
}
public int proc(Char attacker, Char defender, int damage) {
Buff.prolong(defender, Slow.class, 10.0f);
return OilPotion.super.proc(attacker, defender, damage);
}
// public int proc(Char attacker, Char defender, int damage) {
// Buff.prolong(defender, Slow.class, 10.0f);
// return OilPotion.super.proc(attacker, defender, damage);
// }
public int price() {
return this.quantity * 25;
@Override
public int value() {
return quantity * 20;
}
}

View File

@ -385,7 +385,7 @@ public class EndingBlade extends Weapon {
@Override
public int STRReq(int C) {
return 15+fireenergy/100;
return 15+fireenergy/500;
}
public int proc(Char attacker, Char defender, int damage ) {

View File

@ -3,6 +3,8 @@
//
package com.shatteredpixel.shatteredpixeldungeon.levels.rooms.special;
import static com.shatteredpixel.shatteredpixeldungeon.Statistics.lanterfireactive;
import com.shatteredpixel.shatteredpixeldungeon.Dungeon;
import com.shatteredpixel.shatteredpixeldungeon.actors.hero.Belongings;
import com.shatteredpixel.shatteredpixeldungeon.actors.mobs.Mob;
@ -26,6 +28,7 @@ import com.shatteredpixel.shatteredpixeldungeon.items.books.bookslist.YellowSunB
import com.shatteredpixel.shatteredpixeldungeon.items.food.Food;
import com.shatteredpixel.shatteredpixeldungeon.items.food.MeatPie;
import com.shatteredpixel.shatteredpixeldungeon.items.food.SmallRation;
import com.shatteredpixel.shatteredpixeldungeon.items.lightblack.OilPotion;
import com.shatteredpixel.shatteredpixeldungeon.items.potions.PotionOfHealing;
import com.shatteredpixel.shatteredpixeldungeon.items.scrolls.ScrollOfIdentify;
import com.shatteredpixel.shatteredpixeldungeon.items.scrolls.ScrollOfMagicMapping;
@ -141,6 +144,11 @@ public class NxhyShopRoom extends SpecialRoom {
itemsToSpawn2.add(Generator.randomUsingDefaults(Generator.Category.POTION));
itemsToSpawn2.add(Generator.randomUsingDefaults(Generator.Category.WAND));
itemsToSpawn2.add(Generator.randomUsingDefaults(Generator.Category.WAND));
if(lanterfireactive) {
itemsToSpawn2.add(new OilPotion());
}
itemsToSpawn2.add(new ScrollOfIdentify());
itemsToSpawn2.add(new ScrollOfRemoveCurse());
switch (Random.Int(5)) {

View File

@ -21,6 +21,8 @@
package com.shatteredpixel.shatteredpixeldungeon.levels.rooms.special;
import static com.shatteredpixel.shatteredpixeldungeon.Statistics.lanterfireactive;
import com.shatteredpixel.shatteredpixeldungeon.Dungeon;
import com.shatteredpixel.shatteredpixeldungeon.actors.hero.Belongings;
import com.shatteredpixel.shatteredpixeldungeon.actors.mobs.Mob;
@ -30,7 +32,6 @@ import com.shatteredpixel.shatteredpixeldungeon.items.Generator;
import com.shatteredpixel.shatteredpixeldungeon.items.Heap;
import com.shatteredpixel.shatteredpixeldungeon.items.Honeypot;
import com.shatteredpixel.shatteredpixeldungeon.items.Item;
import com.shatteredpixel.shatteredpixeldungeon.items.MerchantsBeacon;
import com.shatteredpixel.shatteredpixeldungeon.items.Stylus;
import com.shatteredpixel.shatteredpixeldungeon.items.Torch;
import com.shatteredpixel.shatteredpixeldungeon.items.armor.LeatherArmor;
@ -45,6 +46,7 @@ import com.shatteredpixel.shatteredpixeldungeon.items.bags.ScrollHolder;
import com.shatteredpixel.shatteredpixeldungeon.items.bags.VelvetPouch;
import com.shatteredpixel.shatteredpixeldungeon.items.bombs.Bomb;
import com.shatteredpixel.shatteredpixeldungeon.items.food.SmallRation;
import com.shatteredpixel.shatteredpixeldungeon.items.lightblack.OilPotion;
import com.shatteredpixel.shatteredpixeldungeon.items.potions.PotionOfHealing;
import com.shatteredpixel.shatteredpixeldungeon.items.scrolls.ScrollOfIdentify;
import com.shatteredpixel.shatteredpixeldungeon.items.scrolls.ScrollOfMagicMapping;
@ -198,6 +200,10 @@ public class ShopRoom extends SpecialRoom {
itemsToSpawn.add( Generator.randomUsingDefaults( Generator.Category.POTION ) );
itemsToSpawn.add( Generator.randomUsingDefaults( Generator.Category.POTION ) );
if(lanterfireactive) {
itemsToSpawn.add(new OilPotion());
}
itemsToSpawn.add( new ScrollOfIdentify() );
itemsToSpawn.add( new ScrollOfRemoveCurse() );
itemsToSpawn.add( new ScrollOfMagicMapping() );

View File

@ -21,6 +21,8 @@
package com.shatteredpixel.shatteredpixeldungeon.scenes;
import static com.shatteredpixel.shatteredpixeldungeon.Statistics.lanterfireactive;
import com.shatteredpixel.shatteredpixeldungeon.Assets;
import com.shatteredpixel.shatteredpixeldungeon.BGMPlayer;
import com.shatteredpixel.shatteredpixeldungeon.Badges;
@ -35,8 +37,20 @@ import com.shatteredpixel.shatteredpixeldungeon.Statistics;
import com.shatteredpixel.shatteredpixeldungeon.actors.Actor;
import com.shatteredpixel.shatteredpixeldungeon.actors.Char;
import com.shatteredpixel.shatteredpixeldungeon.actors.blobs.Blob;
import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Buff;
import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.ChampionEnemy;
import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.ClearBleesdGoodBuff.BlessGoRead;
import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.ClearBleesdGoodBuff.BlessGoodSTR;
import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.ClearBleesdGoodBuff.BlessImmune;
import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.ClearBleesdGoodBuff.BlessMixShiled;
import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.ClearBleesdGoodBuff.BlessMobDied;
import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.ClearBleesdGoodBuff.BlessNoMoney;
import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.MagicGirlDebuff.MagicGirlSayCursed;
import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.MagicGirlDebuff.MagicGirlSayKill;
import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.MagicGirlDebuff.MagicGirlSayMoneyMore;
import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.MagicGirlDebuff.MagicGirlSayNoSTR;
import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.MagicGirlDebuff.MagicGirlSaySlowy;
import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.MagicGirlDebuff.MagicGirlSaySoftDied;
import com.shatteredpixel.shatteredpixeldungeon.actors.hero.Hero;
import com.shatteredpixel.shatteredpixeldungeon.actors.hero.Talent;
import com.shatteredpixel.shatteredpixeldungeon.actors.mobs.DemonSpawner;
@ -424,12 +438,6 @@ public class GameScene extends PixelScene {
break;
case FALL:
case DESCEND:
//if (SPDSettings.BossRush()){
// switch (Dungeon.depth) {
// case 0:
// WndStory.showChapter( WndStory.ID_GAME );
// }
//} else {
switch (Dungeon.depth) {
case 0:
WndStory.showChapter( WndStory.ID_FOREST );
@ -1335,12 +1343,33 @@ public class GameScene extends PixelScene {
scene.add(info);
}
//todo 移除Debuff AND GoodBuff
public static void cure( Char ch ) {
Buff.detach( ch, BlessGoodSTR.class );
Buff.detach( ch, BlessGoRead.class );
Buff.detach( ch, BlessImmune.class );
Buff.detach( ch, BlessMixShiled.class );
Buff.detach( ch, BlessMobDied.class );
Buff.detach( ch, BlessNoMoney.class );
Buff.detach( ch, MagicGirlSayCursed.class );
Buff.detach( ch, MagicGirlSayKill.class );
Buff.detach( ch, MagicGirlSayMoneyMore.class );
Buff.detach( ch, MagicGirlSaySlowy.class );
Buff.detach( ch, MagicGirlSaySoftDied.class );
Buff.detach( ch, MagicGirlSayNoSTR.class );
}
public static void bossSlain() {
if (Dungeon.hero.isAlive()) {
Banner bossSlain = new Banner( BannerSprites.get( BannerSprites.Type.BOSS_SLAIN ) );
bossSlain.show( 0xFFFFFF, 0.3f, 5f );
scene.showBanner( bossSlain );
if(lanterfireactive){
cure( Dungeon.hero );
}
Sample.INSTANCE.play( Assets.Sounds.BOSS );
}
}
@ -1616,6 +1645,7 @@ public class GameScene extends PixelScene {
@Override
public String prompt() {
return null;
}
}//double area.length;
};
}

View File

@ -22,6 +22,7 @@
package com.shatteredpixel.shatteredpixeldungeon.scenes;
import static com.shatteredpixel.shatteredpixeldungeon.Dungeon.hero;
import static com.shatteredpixel.shatteredpixeldungeon.Statistics.lanterfireactive;
import com.shatteredpixel.shatteredpixeldungeon.Assets;
import com.shatteredpixel.shatteredpixeldungeon.Dungeon;
@ -32,6 +33,7 @@ import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Buff;
import com.shatteredpixel.shatteredpixeldungeon.actors.mobs.Mob;
import com.shatteredpixel.shatteredpixeldungeon.items.Item;
import com.shatteredpixel.shatteredpixeldungeon.items.LostBackpack;
import com.shatteredpixel.shatteredpixeldungeon.items.food.Food;
import com.shatteredpixel.shatteredpixeldungeon.levels.Level;
import com.shatteredpixel.shatteredpixeldungeon.levels.Terrain;
import com.shatteredpixel.shatteredpixeldungeon.levels.features.Chasm;
@ -180,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.9f;
}
SkinnedBlock bg = new SkinnedBlock(Camera.main.width, Camera.main.height, loadingAsset ){
@ -505,7 +507,12 @@ public class InterlevelScene extends PixelScene {
}
Dungeon.hero.resurrect();
//todo 灯火少于30给予一个食物
if(lanterfireactive && hero.lanterfire <= 30){
level.drop(new Food(), invPos);
} else {
level.drop(new LostBackpack(), invPos);
}
}
Dungeon.switchLevel( level, Dungeon.hero.pos );

View File

@ -43,7 +43,7 @@ import java.util.LinkedHashMap;
public class BuffIndicator extends Component {
//transparent icon
public static final int NONE = 63;
public static final int NONE = 66;
//FIXME this is becoming a mess, should do a big cleaning pass on all of these
//and think about tinting options
@ -107,6 +107,16 @@ public class BuffIndicator extends Component {
public static final int ROSEBARRIER= 56;
public static final int HALOMETHANEBURNING = 57;
public static final int LANTERFIRE_ONE = 58;
public static final int LANTERFIRE_TWO = 59;
public static final int LANTERFIRE_THREE = 60;
public static final int LANTERFIRE_FOUR = 61;
public static final int LANTERFIRE_FIVE = 62;
public static final int LANTERFIRE_SIX = 63;
public static final int DEBUFF_DOWN = 64;
public static final int GOBUFF_UPRD = 65;
public static final int SIZE_SMALL = 7;
public static final int SIZE_LARGE = 16;

View File

@ -3,12 +3,14 @@ package com.shatteredpixel.shatteredpixeldungeon.ui.changelist.mlpd;
import com.shatteredpixel.shatteredpixeldungeon.Assets;
import com.shatteredpixel.shatteredpixeldungeon.messages.Messages;
import com.shatteredpixel.shatteredpixeldungeon.scenes.ChangesScene;
import com.shatteredpixel.shatteredpixeldungeon.scenes.PixelScene;
import com.shatteredpixel.shatteredpixeldungeon.sprites.BlueBatSprite;
import com.shatteredpixel.shatteredpixeldungeon.sprites.ColdGuardSprite;
import com.shatteredpixel.shatteredpixeldungeon.sprites.DM300Sprite;
import com.shatteredpixel.shatteredpixeldungeon.sprites.DiedMonkLoaderSprite;
import com.shatteredpixel.shatteredpixeldungeon.sprites.FlameBoiSprite;
import com.shatteredpixel.shatteredpixeldungeon.sprites.GhostSprite;
import com.shatteredpixel.shatteredpixeldungeon.sprites.IceCryStalSprite;
import com.shatteredpixel.shatteredpixeldungeon.sprites.IceStalSprites;
import com.shatteredpixel.shatteredpixeldungeon.sprites.ItemSprite;
import com.shatteredpixel.shatteredpixeldungeon.sprites.ItemSpriteSheet;
import com.shatteredpixel.shatteredpixeldungeon.sprites.KagenoNusujinSprite;
@ -16,6 +18,8 @@ import com.shatteredpixel.shatteredpixeldungeon.sprites.MimicSprite;
import com.shatteredpixel.shatteredpixeldungeon.sprites.SRPDHBLRTT;
import com.shatteredpixel.shatteredpixeldungeon.sprites.ShopkKingSprite;
import com.shatteredpixel.shatteredpixeldungeon.sprites.WFSprite;
import com.shatteredpixel.shatteredpixeldungeon.ui.BuffIcon;
import com.shatteredpixel.shatteredpixeldungeon.ui.BuffIndicator;
import com.shatteredpixel.shatteredpixeldungeon.ui.Icons;
import com.shatteredpixel.shatteredpixeldungeon.ui.Window;
import com.shatteredpixel.shatteredpixeldungeon.ui.changelist.ChangeButton;
@ -27,6 +31,7 @@ import java.util.ArrayList;
public class vM0_6_7_X_Changes {
public static void addAllChanges(ArrayList<ChangeInfo> changeInfos) {
add_v0_6_12_Changes(changeInfos);
add_v0_6_11_Changes(changeInfos);
add_v0_6_10_Changes(changeInfos);
add_v0_6_9_Changes(changeInfos);
@ -41,6 +46,94 @@ public class vM0_6_7_X_Changes {
add_v0_6_0_Changes(changeInfos);
}
public static void add_v0_6_12_Changes( ArrayList<ChangeInfo> changeInfos ) {
ChangeInfo changes = new ChangeInfo("v0.6.0.0-Beta21-p2", true, "");
changes.hardlight(Window.TITLE_COLOR);
changeInfos.add(changes);
changes = new ChangeInfo("新内容", false, null);
changes.hardlight(Window.GREEN_COLOR);
changeInfos.add(changes);
changes.addButton(new ChangeButton(new ItemSprite(ItemSpriteSheet.LANTERNB), ("灯火机制-1"),
("提灯引路-灯火前行(规则说明-情报公开):\n" +
"玩家高于_3挑后_或开启_灯火前路_玩法将在开局追加灯火值。并立刻给予一个增益Buff。\n" +
"灯火被分为_6个阶段_从光芒前路-->寂灭若寞)\n" +
"任何增益Buff和Debuff都会在击败Boss后完全移除并在首次进入下一大层后进行一次Roll判定。\n" +
"Roll判定规则如下:\n" +
"100灯火 必定增益Buff\n" +
"99-90灯火 必定获得1个增益Buff\n" +
"89-80灯火 5%概率获得负面Buff 85%增益Buff 10%啥都不出现\n" +
"79-60灯火 25%概率获得负面Buff 70%增益Buff 5%啥都不出现\n" +
"59-35灯火 40%概率获得负面Buff 35%增益Buff 25%啥都不出现\n" +
"34-1灯火 40%概率获得负面Buff 20%概率获得增益Buff 40%啥都不出现\n" +
"0以下灯火 48%概率获得负面Buff 10%获得增益Buff 42%啥都不出现\n" +
"特殊说明首次下到6层 必定获得1个增益Buff) ")));
changes.addButton(new ChangeButton(new ItemSprite(ItemSpriteSheet.SKNANO), ("灯火机制-2"),
("提灯引路-灯火前行(规则说明-情报公开):\n" +
"随着灯火的微弱,部分怪物将有概率使灯火的能量更低:\n\n" +
"(非必要说明,一切按照近战攻击算)\n" +
"老鼠 低于85灯火 5%概率扣减1灯火\n" +
"监狱守卫 低于85灯火 10%概率扣减1灯火\n" +
"豺狼萨满 低于70灯火 1%概率扣减2灯火 远程法术攻击7%概率扣减1灯火\n" +
"黑色怨灵 低于95灯火 4%概率扣减4灯火(赋予Debuff的情况下) (但触发后此怪物立刻死亡) \n" +
"幽灵任务怪 低于100灯火 20%概率扣减7灯火(除螃蟹外其他是赋予Debuff的情况下) \n" +
"(但触发后此怪物立刻死亡) \n" +
"幽灵任务怪-巨型螃蟹 低于90灯火 格挡时 6%概率扣减1灯火 \n" +
"新生火元素 低于80灯火 6%概率扣减2灯火\n" +
"矿洞蜘蛛 低于70灯火 15%概率扣减1灯火 \n" +
"血月矿洞炸弹猎人 低于75灯火 35%概率扣减3灯火 (远程攻击) \n" +
"怨灵 40%概率扣减8灯火但触发后此怪物立刻死亡) \n\n" +
"矮人术士 低于50灯火远程攻击必定扣减2灯火但触发后此怪物立刻死亡" )));
changes.addButton(new ChangeButton(new ItemSprite(ItemSpriteSheet.LANTERNA), ("灯火机制-3"),
("提灯引路-灯火前行(规则说明-情报公开):\n" +
"提灯激活后将以_每4回合+1回复灯火_ 后续每到新的一大层将_增加3回合_\n" +
"从第六层开始玩家将会_每17回合持续扣减1灯火_。但_商人_和_回忆_商店会售卖灯油瓶\n" +
"5.玩家在首次进入_6,11,16,21层_会进行Roll判定根据上方Roll规则进行给予Buff。\n\n" +
"6.灯火低于30以下被未祝福的十字架重生之前的东西会被你的暗影带走击败它夺回自己的力量\n\n" +
"7.大部分Debuff优先级高于增益Buff,因此有Debuff存在增益Buff可能无效。\n\n" +
"8.死亡重生后会立刻根据当前灯火进行一次_Roll判定_\n\n" +
"9.追加了_6个Debuff_和_6个增益Buff_,愿你在灯火前行的道路中一路向前!!!" )));
changes.addButton( new ChangeButton(new BuffIcon(BuffIndicator.DEBUFF_DOWN, true), "灯火专有-Debuff",
"追加了6种Debuff\n\n" +
"无力 本大层将临时-3力量\n" +
"束缚 本大层每下一层获得新的诅咒。\n" +
"审判 英雄近战伤害削弱10%\n" +
"迟钝 本大层英雄行走一回合相当于3回合。\n" +
"软弱 本大层所有被护甲减免过的物理伤害增加5%\n" +
"贪婪 本大层商店的价格除十字架和食物和治疗药水打1折其他全部1.5倍价格。"));
changes.addButton( new ChangeButton(new BuffIcon(BuffIndicator.GOBUFF_UPRD, true), "灯火专有-Gobuff",
"追加了6种增益Buff\n\n" +
"纯洁的赞歌:\n" +
"前路 本大层内饥饿高于90%的情况下,获得每回合+2的血量。\n" +
"富饶 本大层内商店打3折!\n" +
"守护 本大层内,满血可额外获得一些护盾值 冷却300回合\n" +
"安息 本大层内玩家伤害x2倍\n" +
"隐没 本大层内玩家免疫魔法效果和减免20%伤害\n" +
"坚毅 本大层内,玩家力量+8"));
changes = new ChangeInfo("改动", false, null);
changes.hardlight(Window.CYELLOW);
changeInfos.add(changes);
changes.addButton(new ChangeButton(new Image("sprites/spinner.png", 144, 0, 16, 16), (Messages.get(ChangesScene.class, "bugfixes")),
Messages.get(vM0_6_7_X_Changes.class, "bug_06X32")));
Image issxa = new DM300Sprite();
issxa.scale.set(PixelScene.align(0.69f));
changes.addButton(new ChangeButton(issxa, "DM300改动",
"DM300每次激活能量塔时玩家会获得7回合灵视"));
changes.addButton(new ChangeButton(new ItemSprite(ItemSpriteSheet.ENDDIED), ("终焉调整"),
("终焉力量现在是500能量+1力量")));
}
public static void add_v0_6_11_Changes( ArrayList<ChangeInfo> changeInfos ) {
ChangeInfo changes = new ChangeInfo("v0.6.0.0-Beta21-p1.4-5", true, "");
changes.hardlight(Window.TITLE_COLOR);
@ -50,7 +143,7 @@ public class vM0_6_7_X_Changes {
changes.hardlight(Window.TITLE_COLOR);
changeInfos.add(changes);
changes.addButton(new ChangeButton(new IceCryStalSprite(), ("浊焰魔女AI调整"),
changes.addButton(new ChangeButton(new IceStalSprites(), ("浊焰魔女AI调整"),
("重新调整了浊焰魔女的AI属性")));
changes.addButton(new ChangeButton(new BlueBatSprite(), ("血影蝙蝠调整"),

View File

@ -18,7 +18,7 @@ public class BossSettingWindows extends Window {
private static final int TTL_HEIGHT = 12;
private static final int GAP= 2;
private ArrayList<CheckBox> cbs;
private final ArrayList<CheckBox> cbs;
OptionSlider level3;
public BossSettingWindows(){
resize(WIDTH, HEIGHT);
@ -30,8 +30,9 @@ public class BossSettingWindows extends Window {
add(rtb);
float pos = TTL_HEIGHT + GAP;
cbs = new ArrayList<>();
for(int i = 0; i<5; ++i){
CheckBox cb = new CheckBox(Messages.get(this, "boss_"+String.valueOf(i+1)));
CheckBox cb = new CheckBox(Messages.get(this, "boss_"+ (i + 1)));
cb.setRect(GAP, pos, WIDTH - GAP * 2, BOX_HEIGHT);
if(i == 2){
cb.setRect(GAP, 500, WIDTH - GAP * 2, BOX_HEIGHT);
@ -42,6 +43,7 @@ public class BossSettingWindows extends Window {
cb.checked((Statistics.boss_enhance & (1<<i)) >0);
cb.enable(Statistics.deepestFloor < (5+i*5));
}
level3 = new OptionSlider("", Messages.get(this, "dm300"),
Messages.get(this, "ice"), 1, 3) {
@Override

View File

@ -93,6 +93,7 @@ public class WndChallenges extends Window {
final int normal_mode = 0;
final int hard_mode = 7;
final int warning_mode =9;
final int custom_mode = 13;
final int Test_Debug = 14;
boolean isCustom = false;
float pos = 0;
@ -101,7 +102,7 @@ public class WndChallenges extends Window {
final String challenge = Challenges.NAME_IDS[i];
if(i==normal_mode || i==hard_mode || i==warning_mode || i==Test_Debug){
if(i==normal_mode || i==hard_mode || i==warning_mode|| i==custom_mode || i==Test_Debug){
RenderedTextBlock block = PixelScene.renderTextBlock(10);
switch (i){
case normal_mode:
@ -116,6 +117,10 @@ public class WndChallenges extends Window {
block.text(Messages.get(Challenges.class, "warning"));
block.hardlight(0xFF0000);
break;
case custom_mode:
block.text(Messages.get(Challenges.class, "custom"));
block.hardlight(Window.Pink_COLOR);
break;
case Test_Debug:
block.text(Messages.get(Challenges.class, "test"));
block.hardlight(0xFFFF00);

View File

@ -22,6 +22,7 @@
package com.shatteredpixel.shatteredpixeldungeon.windows;
import static com.shatteredpixel.shatteredpixeldungeon.SPDSettings.HelpSettings;
import static com.shatteredpixel.shatteredpixeldungeon.Statistics.lanterfireactive;
import com.shatteredpixel.shatteredpixeldungeon.Dungeon;
import com.shatteredpixel.shatteredpixeldungeon.ShatteredPixelDungeon;
@ -60,7 +61,7 @@ import java.util.regex.Pattern;
public class WndHero extends WndTabbed {
private static final int WIDTH = 130;
private static final int HEIGHT = 120;
private static final int HEIGHT = 130;
private StatsTab stats;
private TalentsTab talents;
@ -195,6 +196,10 @@ public class WndHero extends WndTabbed {
statSlot( Messages.get(this, "depth"), Statistics.deepestFloor );
statSlot( Messages.get(HeroStat.class, "seed_dungeon"), DungeonSeed.convertToCode(Dungeon.seed) );
if(lanterfireactive){
statSlot( Messages.get(this, "lanterfire"), (hero.lanterfire) + "/" + 100 );
}
pos += GAP;
Hunger hunger = Dungeon.hero.buff(Hunger.class);

View File

@ -21,16 +21,34 @@
package com.shatteredpixel.shatteredpixeldungeon.windows;
import static com.shatteredpixel.shatteredpixeldungeon.Dungeon.RollLevel;
import static com.shatteredpixel.shatteredpixeldungeon.Dungeon.hero;
import static com.shatteredpixel.shatteredpixeldungeon.Statistics.lanterfireactive;
import com.shatteredpixel.shatteredpixeldungeon.Chrome;
import com.shatteredpixel.shatteredpixeldungeon.Dungeon;
import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Buff;
import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.ClearBleesdGoodBuff.BlessGoodSTR;
import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.ClearBleesdGoodBuff.BlessImmune;
import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.ClearBleesdGoodBuff.BlessMixShiled;
import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.ClearBleesdGoodBuff.BlessMobDied;
import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.ClearBleesdGoodBuff.BlessNoMoney;
import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.MagicGirlDebuff.MagicGirlSayCursed;
import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.MagicGirlDebuff.MagicGirlSayKill;
import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.MagicGirlDebuff.MagicGirlSayMoneyMore;
import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.MagicGirlDebuff.MagicGirlSayNoSTR;
import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.MagicGirlDebuff.MagicGirlSaySlowy;
import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.MagicGirlDebuff.MagicGirlSaySoftDied;
import com.shatteredpixel.shatteredpixeldungeon.messages.Messages;
import com.shatteredpixel.shatteredpixeldungeon.scenes.PixelScene;
import com.shatteredpixel.shatteredpixeldungeon.ui.RenderedTextBlock;
import com.shatteredpixel.shatteredpixeldungeon.ui.Window;
import com.shatteredpixel.shatteredpixeldungeon.utils.GLog;
import com.watabou.input.PointerEvent;
import com.watabou.noosa.Game;
import com.watabou.noosa.Image;
import com.watabou.noosa.PointerArea;
import com.watabou.utils.Random;
import com.watabou.utils.SparseArray;
public class WndStory extends Window {
@ -148,6 +166,289 @@ public class WndStory extends Window {
Game.scene().add( wnd );
Dungeon.chapters.add( id );
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 );
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"));
}
}
}
}
}
}