v0.7.0: some exotic scroll implementation and polish (more still needed)
This commit is contained in:
parent
ad8df7abd0
commit
229e0522ad
|
@ -0,0 +1,25 @@
|
|||
/*
|
||||
* Pixel Dungeon
|
||||
* Copyright (C) 2012-2015 Oleg Dolya
|
||||
*
|
||||
* Shattered Pixel Dungeon
|
||||
* Copyright (C) 2014-2018 Evan Debenham
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>
|
||||
*/
|
||||
|
||||
package com.shatteredpixel.shatteredpixeldungeon.actors.buffs;
|
||||
|
||||
public class ArtifactRecharge extends Buff {
|
||||
}
|
|
@ -96,7 +96,7 @@ public abstract class Scroll extends Item {
|
|||
|
||||
protected static ItemStatusHandler<Scroll> handler;
|
||||
|
||||
private String rune;
|
||||
protected String rune;
|
||||
|
||||
public boolean ownedByBook = false;
|
||||
|
||||
|
@ -204,7 +204,7 @@ public abstract class Scroll extends Item {
|
|||
|
||||
@Override
|
||||
public String name() {
|
||||
return isKnown() ? name : Messages.get(Scroll.class, rune);
|
||||
return isKnown() ? name : Messages.get(this, rune);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
|
@ -35,6 +35,7 @@ import com.shatteredpixel.shatteredpixeldungeon.items.scrolls.ScrollOfRecharging
|
|||
import com.shatteredpixel.shatteredpixeldungeon.items.scrolls.ScrollOfRemoveCurse;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.items.scrolls.ScrollOfTeleportation;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.items.scrolls.ScrollOfTerror;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.items.scrolls.ScrollOfTransmutation;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.items.scrolls.ScrollOfUpgrade;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.items.stones.Runestone;
|
||||
|
||||
|
@ -68,17 +69,17 @@ public abstract class ExoticScroll extends Scroll {
|
|||
regToExo.put(ScrollOfTerror.class, ScrollOfPetrification.class);
|
||||
exoToReg.put(ScrollOfPetrification.class, ScrollOfTerror.class);
|
||||
|
||||
regToExo.put(ScrollOfTerror.class, ScrollOfPetrification.class);
|
||||
exoToReg.put(ScrollOfPetrification.class, ScrollOfTerror.class);
|
||||
regToExo.put(ScrollOfTransmutation.class, ScrollOfDistortion.class);
|
||||
exoToReg.put(ScrollOfDistortion.class, ScrollOfTransmutation.class);
|
||||
|
||||
regToExo.put(ScrollOfRecharging.class, ScrollOfMysticalEnergy.class);
|
||||
exoToReg.put(ScrollOfMysticalEnergy.class, ScrollOfRecharging.class);
|
||||
|
||||
//TODO
|
||||
|
||||
regToExo.put(ScrollOfTeleportation.class, ScrollOfPetrification.class);
|
||||
exoToReg.put(ScrollOfPetrification.class, ScrollOfTeleportation.class);
|
||||
|
||||
regToExo.put(ScrollOfRecharging.class, ScrollOfPetrification.class);
|
||||
exoToReg.put(ScrollOfPetrification.class, ScrollOfRecharging.class);
|
||||
|
||||
regToExo.put(ScrollOfMagicMapping.class, ScrollOfPetrification.class);
|
||||
exoToReg.put(ScrollOfPetrification.class, ScrollOfMagicMapping.class);
|
||||
|
||||
|
@ -96,7 +97,7 @@ public abstract class ExoticScroll extends Scroll {
|
|||
|
||||
@Override
|
||||
public void setKnown() {
|
||||
if (!isKnown()) {
|
||||
if (!ownedByBook && !isKnown()) {
|
||||
handler.know(exoToReg.get(this.getClass()));
|
||||
updateQuickslot();
|
||||
}
|
||||
|
@ -107,6 +108,7 @@ public abstract class ExoticScroll extends Scroll {
|
|||
super.reset();
|
||||
if (handler != null && handler.contains(exoToReg.get(this.getClass()))) {
|
||||
image = handler.image(exoToReg.get(this.getClass())) + 16;
|
||||
rune = handler.label(exoToReg.get(this.getClass()));
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -45,7 +45,7 @@ public class ScrollOfAffection extends ExoticScroll {
|
|||
|
||||
for (Mob mob : Dungeon.level.mobs.toArray( new Mob[0] )) {
|
||||
if (Dungeon.level.heroFOV[mob.pos]) {
|
||||
Buff.affect( mob, Charm.class, 20f );
|
||||
Buff.affect( mob, Charm.class, 20f ).object = curUser.id();
|
||||
mob.sprite.centerEmitter().start( Speck.factory( Speck.HEART ), 0.2f, 5 );
|
||||
}
|
||||
}
|
||||
|
|
|
@ -25,13 +25,22 @@ import com.shatteredpixel.shatteredpixeldungeon.Assets;
|
|||
import com.shatteredpixel.shatteredpixeldungeon.ShatteredPixelDungeon;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Invisibility;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.effects.Identification;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.items.Item;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.items.potions.Potion;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.items.rings.Ring;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.items.scrolls.Scroll;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.messages.Messages;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.scenes.GameScene;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.scenes.PixelScene;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.sprites.ItemSprite;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.ui.RenderedTextMultiline;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.ui.Window;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.utils.GLog;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.windows.IconTitle;
|
||||
import com.watabou.noosa.audio.Sample;
|
||||
import com.watabou.utils.Random;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.HashSet;
|
||||
|
||||
public class ScrollOfForesight extends ExoticScroll {
|
||||
|
@ -58,37 +67,11 @@ public class ScrollOfForesight extends ExoticScroll {
|
|||
int total = potions.size() + scrolls.size() + rings.size();
|
||||
|
||||
if (total == 0){
|
||||
GLog.n("Nothing left to Identify!");
|
||||
GLog.n( Messages.get(this, "nothing_left") );
|
||||
return;
|
||||
}
|
||||
|
||||
/*
|
||||
//items which the player holds have lower priority
|
||||
HashSet<Class <? extends Potion>> heldPotions = new HashSet<>();
|
||||
HashSet<Class <? extends Scroll>> heldScrolls = new HashSet<>();
|
||||
HashSet<Class <? extends Ring>> heldRings = new HashSet<>();
|
||||
|
||||
for (Class <? extends Potion> p : potions){
|
||||
if (curUser.belongings.getItem(p) != null){
|
||||
heldPotions.add(p);
|
||||
}
|
||||
}
|
||||
potions.removeAll(heldPotions);
|
||||
|
||||
for (Class <? extends Scroll> s : scrolls){
|
||||
if (curUser.belongings.getItem(s) != null){
|
||||
heldScrolls.add(s);
|
||||
}
|
||||
}
|
||||
scrolls.removeAll(heldScrolls);
|
||||
|
||||
for (Class <? extends Ring> r : rings){
|
||||
if (curUser.belongings.getItem(r) != null){
|
||||
heldRings.add(r);
|
||||
}
|
||||
}
|
||||
rings.removeAll(heldRings);*/
|
||||
|
||||
ArrayList<Item> IDed = new ArrayList<>();
|
||||
int left = 4;
|
||||
|
||||
while (left > 0 && total > 0) {
|
||||
|
@ -99,21 +82,21 @@ public class ScrollOfForesight extends ExoticScroll {
|
|||
if (potions.isEmpty()) continue;
|
||||
Potion p = Random.element(potions).newInstance();
|
||||
p.setKnown();
|
||||
GLog.i(p.name() + " identified!");
|
||||
IDed.add(p);
|
||||
potions.remove(p.getClass());
|
||||
break;
|
||||
case 1:
|
||||
if (scrolls.isEmpty()) continue;
|
||||
Scroll s = Random.element(scrolls).newInstance();
|
||||
s.setKnown();
|
||||
GLog.i(s.name() + " identified!");
|
||||
IDed.add(s);
|
||||
scrolls.remove(s.getClass());
|
||||
break;
|
||||
case 2:
|
||||
if (rings.isEmpty()) continue;
|
||||
Ring r = Random.element(rings).newInstance();
|
||||
r.setKnown();
|
||||
GLog.i(r.name() + " identified!");
|
||||
IDed.add(r);
|
||||
rings.remove(r.getClass());
|
||||
break;
|
||||
}
|
||||
|
@ -123,5 +106,38 @@ public class ScrollOfForesight extends ExoticScroll {
|
|||
left --;
|
||||
total --;
|
||||
}
|
||||
|
||||
GameScene.show(new WndForesight( IDed ));
|
||||
}
|
||||
|
||||
private class WndForesight extends Window {
|
||||
|
||||
private static final int WIDTH = 120;
|
||||
|
||||
WndForesight(ArrayList<Item> IDed ){
|
||||
IconTitle cur = new IconTitle(new ItemSprite(ScrollOfForesight.this),
|
||||
Messages.titleCase(Messages.get(ScrollOfForesight.class, "name")));
|
||||
cur.setRect(0, 0, WIDTH, 0);
|
||||
add(cur);
|
||||
|
||||
RenderedTextMultiline msg = PixelScene.renderMultiline(Messages.get(this, "desc"), 6);
|
||||
msg.maxWidth(120);
|
||||
msg.setPos(0, cur.bottom() + 2);
|
||||
add(msg);
|
||||
|
||||
float pos = msg.bottom() + 10;
|
||||
|
||||
for (Item i : IDed){
|
||||
|
||||
cur = new IconTitle(i);
|
||||
cur.setRect(0, pos, WIDTH, 0);
|
||||
add(cur);
|
||||
pos = cur.bottom() + 2;
|
||||
|
||||
}
|
||||
|
||||
resize(WIDTH, (int)pos);
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
|
|
@ -0,0 +1,52 @@
|
|||
/*
|
||||
* Pixel Dungeon
|
||||
* Copyright (C) 2012-2015 Oleg Dolya
|
||||
*
|
||||
* Shattered Pixel Dungeon
|
||||
* Copyright (C) 2014-2018 Evan Debenham
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>
|
||||
*/
|
||||
|
||||
package com.shatteredpixel.shatteredpixeldungeon.items.scrolls.exotic;
|
||||
|
||||
import com.shatteredpixel.shatteredpixeldungeon.Assets;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Invisibility;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.effects.SpellSprite;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.items.scrolls.ScrollOfRecharging;
|
||||
import com.watabou.noosa.audio.Sample;
|
||||
|
||||
public class ScrollOfMysticalEnergy extends ExoticScroll {
|
||||
|
||||
{
|
||||
initials = 6;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void doRead() {
|
||||
|
||||
//append buff
|
||||
ScrollOfRecharging.charge(curUser);
|
||||
|
||||
Sample.INSTANCE.play( Assets.SND_READ );
|
||||
Invisibility.dispel();
|
||||
|
||||
SpellSprite.show( curUser, SpellSprite.CHARGE );
|
||||
setKnown();
|
||||
ScrollOfRecharging.charge(curUser);
|
||||
|
||||
readAnimation();
|
||||
}
|
||||
|
||||
}
|
|
@ -45,7 +45,6 @@ public class ScrollOfPetrification extends ExoticScroll {
|
|||
for (Mob mob : Dungeon.level.mobs.toArray( new Mob[0] )) {
|
||||
if (Dungeon.level.heroFOV[mob.pos]) {
|
||||
Buff.affect( mob, Paralysis.class, Paralysis.DURATION );
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -767,6 +767,48 @@ items.scrolls.scrollofupgrade.remove_curse=The scroll of upgrade cleanses the cu
|
|||
items.scrolls.scrollofupgrade.desc=This scroll will upgrade a single item, improving its quality. A wand will increase in power and number of charges, weapons and armor will deal and block more damage, and the effects of rings will intensify. This scroll is even able to mitigate or sometimes totally dispel curse effects, though it is not as potent as a scroll of remove curse.
|
||||
|
||||
|
||||
###exotic scrolls
|
||||
items.scrolls.exotic.exoticscroll.kaunan=exotic scroll of KAUNAN
|
||||
items.scrolls.exotic.exoticscroll.sowilo=exotic scroll of SOWILO
|
||||
items.scrolls.exotic.exoticscroll.laguz=exotic scroll of LAGUZ
|
||||
items.scrolls.exotic.exoticscroll.yngvi=exotic scroll of YNGVI
|
||||
items.scrolls.exotic.exoticscroll.gyfu=exotic scroll of GYFU
|
||||
items.scrolls.exotic.exoticscroll.raido=exotic scroll of RAIDO
|
||||
items.scrolls.exotic.exoticscroll.isaz=exotic scroll of ISAZ
|
||||
items.scrolls.exotic.exoticscroll.mannaz=exotic scroll of MANNAZ
|
||||
items.scrolls.exotic.exoticscroll.naudiz=exotic scroll of NAUDIZ
|
||||
items.scrolls.exotic.exoticscroll.berkanan=exotic scroll of BERKANAN
|
||||
items.scrolls.exotic.exoticscroll.odal=exotic scroll of ODAL
|
||||
items.scrolls.exotic.exoticscroll.tiwaz=exotic scroll of TIWAZ
|
||||
items.scrolls.exotic.exoticscroll.unknown_desc=A glowing indecipherable magical rune is written on this black parchment. It seems to be foreign to this land, who knows what it will do when read aloud?
|
||||
|
||||
items.scrolls.exotic.scrollofaffection.name=scroll of affection
|
||||
items.scrolls.exotic.scrollofaffection.desc=Reading this scroll will emit an alluring laugh which charms all who hear it.
|
||||
|
||||
items.scrolls.exotic.scrollofantimagic.name=scroll of anti-magic
|
||||
items.scrolls.exotic.scrollofantimagic.desc=The incantation on this scroll will surround you with a magical aura that temporarily blocks all magical effects, harmful or helpful.
|
||||
|
||||
items.scrolls.exotic.scrollofconfusion.name=scroll of confusion
|
||||
items.scrolls.exotic.scrollofconfusion.desc=When read aloud, this scroll will unleash confusing magic on all targets in sight, blinding and disorienting them.
|
||||
|
||||
items.scrolls.exotic.scrollofdistortion.name=scroll of distortion
|
||||
items.scrolls.exotic.scrollofdistortion.desc=This scroll contains powerful magic capable of warping reality.
|
||||
|
||||
items.scrolls.exotic.scrollofenchantment.name=scroll of enchantment
|
||||
items.scrolls.exotic.scrollofenchantment.inv_title=enchant an item
|
||||
items.scrolls.exotic.scrollofenchantment.desc=
|
||||
|
||||
items.scrolls.exotic.scrollofforesight.name=scroll of foresight
|
||||
items.scrolls.exotic.scrollofforesight.nothing_left=There is nothing left to identify!
|
||||
items.scrolls.exotic.scrollofforesight.desc=This scroll will permanently identify the type of four random items. The items identified won't necessary be ones you're carrying.
|
||||
items.scrolls.exotic.scrollofforesight$wndforesight.desc=Your scroll of foresight has identified the following items:
|
||||
|
||||
items.scrolls.exotic.scrollofmysticalenergy.name=scroll of mystical energy
|
||||
items.scrolls.exotic.scrollofmysticalenergy.desc=
|
||||
|
||||
items.scrolls.exotic.scrollofpetrification.name=scroll of petrification
|
||||
items.scrolls.exotic.scrollofpetrification.desc=A flash of red light will overwhelm all creatures in your field of view with such great terror that they will be frozen on the spot.
|
||||
|
||||
|
||||
###runestones
|
||||
items.stones.inventorystone.ac_use=USE
|
||||
|
|
Loading…
Reference in New Issue
Block a user