public void proc( boolean withShield ) { if( target.sprite.visible ) { Sample.INSTANCE.play( Assets.SND_HIT, 1, 1, 0.5f ); target.sprite.showStatus(CharSprite.DEFAULT, TXT_BLOCKED ); // target.sprite.showStatus(CharSprite.DEFAULT, withShield ? TXT_BLOCKED : TXT_PARRIED); if (target == Dungeon.hero) { Camera.main.shake(2, 0.1f); } } }
public static void listen() { GLog.i("You hear thunder somewhere not far away."); Sample.INSTANCE.play(Assets.SND_BLAST, 1, 1, Random.Float(1.8f, 2.25f)); Camera.main.shake(2, 0.2f); }
public static void viewed() { GameScene.flash(0x888888); Sample.INSTANCE.play(Assets.SND_BLAST); Camera.main.shake(3, 0.3f); Dungeon.hero.interrupt(); }
@Override public int attackProc( Char enemy, int damage, boolean blocked ) { if ( enemy != null && !enemy.immovable() && buff( Enraged.class ) != null ) { Camera.main.shake(1, 0.1f); damage = knockBack( enemy, damage); } return damage; }
@Override public void activate( Char ch ) { super.activate( ch ); if (ch != null) { Buff.affect( ch, Armor.class ).level = ch.HT; } if (Dungeon.visible[pos]) { CellEmitter.bottom( pos ).start( EarthParticle.FACTORY, 0.05f, 8 ); Camera.main.shake( 1, 0.4f ); } }
@Override public void onComplete( Animation anim ) { super.onComplete( anim ); if (anim == attack) { speed.set( 0 ); acc.set( 0 ); place( ch.pos ); Camera.main.shake( 4, 0.2f ); } } }
@Override public void onComplete( Animation anim ) { super.onComplete( anim ); if (anim == attack) { speed.set( 0 ); acc.set( 0 ); place( ch.pos ); Camera.main.shake( 4, 0.2f ); } } }
@Override public void onComplete( Animation anim ) { super.onComplete( anim ); if (anim == attack) { speed.set( 0 ); acc.set( 0 ); place( ch.pos ); Camera.main.shake( 4, 0.2f ); } } }
@Override public int attackProc( Char enemy, int damage ) { damage = super.attackProc( enemy, damage ); if (Random.Int( 3 ) == 0) { Buff.affect( enemy, Ooze.class ).set( 20f ); enemy.sprite.burst( 0x000000, 5 ); } if (pumpedUp > 0) { Camera.main.shake( 3, 0.2f ); } return damage; }
@Override public int attackProc( Char enemy, int damage ) { damage = super.attackProc( enemy, damage ); if (Random.Int( 3 ) == 0) { Buff.affect( enemy, Ooze.class ).set( 20f ); enemy.sprite.burst( 0x000000, 5 ); } if (pumpedUp > 0) { Camera.main.shake( 3, 0.2f ); } return damage; }
@Override public void activate( Char ch ) { if (ch == Dungeon.hero) { if (Dungeon.hero.subClass == HeroSubClass.WARDEN){ Buff.affect(ch, Barkskin.class).set((Dungeon.depth + 5)/2, 5); } else { Buff.affect(ch, Armor.class).level(ch.HT); } } if (Dungeon.level.heroFOV[pos]) { CellEmitter.bottom( pos ).start( EarthParticle.FACTORY, 0.05f, 8 ); Camera.main.shake( 1, 0.4f ); } }
@Override public void activate( Char ch ) { if (ch == Dungeon.hero) { if (Dungeon.hero.subClass == HeroSubClass.WARDEN){ Buff.affect(ch, Barkskin.class).set((Dungeon.depth + 5)/2, 5); } else { Buff.affect(ch, Armor.class).level(ch.HT); } } if (Dungeon.level.heroFOV[pos]) { CellEmitter.bottom( pos ).start( EarthParticle.FACTORY, 0.05f, 8 ); Camera.main.shake( 1, 0.4f ); } }
@Override protected void onZap( Ballistica bolt ) { //lightning deals less damage per-target, the more targets that are hit. float multipler = 0.4f + (0.6f/affected.size()); //if the main target is in water, all affected take full damage if (Dungeon.level.water[bolt.collisionPos]) multipler = 1f; int min = 5 + level(); int max = 10 + 5*level(); for (Char ch : affected){ processSoulMark(ch, chargesPerCast()); ch.damage(Math.round(damageRoll() * multipler), this); if (ch == Dungeon.hero) Camera.main.shake( 2, 0.3f ); ch.sprite.centerEmitter().burst( SparkParticle.FACTORY, 3 ); ch.sprite.flash(); } if (!curUser.isAlive()) { Dungeon.fail( getClass() ); GLog.n(Messages.get(this, "ondeath")); } }
@Override protected boolean act() { Buff.affect( defender, Earthroot.Armor.class ).level( 4 * (level + 1) ); CellEmitter.bottom( defender.pos ).start( EarthParticle.FACTORY, 0.05f, 8 ); Camera.main.shake( 1, 0.4f ); if (defender.buff(Roots.class) != null){ Buff.prolong(defender, Roots.class, 5); } else { DelayedRoot root = Buff.append(defender, DelayedRoot.class); root.setup(pos); } Actor.remove(this); return true; } };
@Override protected boolean act() { Buff.affect( defender, Earthroot.Armor.class ).level( 4 * (level + 1) ); CellEmitter.bottom( defender.pos ).start( EarthParticle.FACTORY, 0.05f, 8 ); Camera.main.shake( 1, 0.4f ); if (defender.buff(Roots.class) != null){ Buff.prolong(defender, Roots.class, 5); } else { DelayedRoot root = Buff.append(defender, DelayedRoot.class); root.setup(pos); } Actor.remove(this); return true; } };
@Override public void execute( Hero hero, String action ) { super.execute(hero, action); if (action.equals(AC_FEED)){ GameScene.selectItem(itemSelector, mode, Messages.get(this, "prompt")); } else if (action.equals(AC_ROOT) && level() > 0){ if (!isEquipped( hero )) GLog.i( Messages.get(Artifact.class, "need_to_equip") ); else if (charge == 0) GLog.i( Messages.get(this, "no_charge") ); else { Buff.prolong(hero, Roots.class, 5); Buff.affect(hero, Earthroot.Armor.class).level(charge); CellEmitter.bottom(hero.pos).start(EarthParticle.FACTORY, 0.05f, 8); Camera.main.shake(1, 0.4f); charge = 0; updateQuickslot(); } } }
@Override public void execute( Hero hero, String action ) { super.execute(hero, action); if (action.equals(AC_FEED)){ GameScene.selectItem(itemSelector, mode, Messages.get(this, "prompt")); } else if (action.equals(AC_ROOT) && level() > 0){ if (!isEquipped( hero )) GLog.i( Messages.get(Artifact.class, "need_to_equip") ); else if (charge == 0) GLog.i( Messages.get(this, "no_charge") ); else { Buff.prolong(hero, Roots.class, 5); Buff.affect(hero, Earthroot.Armor.class).level(charge); CellEmitter.bottom(hero.pos).start(EarthParticle.FACTORY, 0.05f, 8); Camera.main.shake(1, 0.4f); charge = 0; updateQuickslot(); } } }
@Override public void die( Object cause, Element dmg ) { yell( LINE_NEARDEATH ); Camera.main.shake(3, 0.5f); new Flare( 6, 48 ).color( SpellSprite.COLOUR_DARK, true).show( sprite, 3f ); // Dungeon.bonus.drop( new ArmorKit(), pos ).sprite.drop(); Dungeon.level.drop( new SkeletonKey(), pos ).sprite.drop(); for (Mob mob : (Iterable<Mob>) Dungeon.level.mobs.clone()) { if (mob instanceof Undead) { mob.die( cause, null ); } } Blob blob = Dungeon.level.blobs.get( Spawner.class ); if (blob != null) { blob.remove(); } Badges.validateBossSlain(); GameScene.bossSlain(); super.die( cause, dmg ); }
@Override public void move( int step ) { super.move( step ); if( buff( Enraged.class ) != null ) { dropBoulders( step + Level.NEIGHBOURS8[ Random.Int( Level.NEIGHBOURS8.length ) ], damageRoll() / 2 ); dropBoulders( step + Level.NEIGHBOURS12[ Random.Int( Level.NEIGHBOURS12.length ) ], damageRoll() / 3 ); Camera.main.shake( 2, 0.1f ); } else if (Dungeon.level.map[step] == Terrain.INACTIVE_TRAP && HP < HT) { HP += ( HT - HP ) / 5; sprite.emitter().burst( ElmoParticle.FACTORY, 5 ); if (Dungeon.visible[step] && Dungeon.hero.isAlive()) { GLog.n( "DM-300 repairs itself!" ); } } }
@Override public void press( int cell, Char hero ) { super.press( cell, hero ); if (!enteredArena && outsideEntranceRoom(cell) && hero == Dungeon.hero) { enteredArena = true; Mob boss = Bestiary.mob( Dungeon.depth ); boss.state = boss.HUNTING; do { boss.pos = Random.Int( LENGTH ); } while ( !passable[boss.pos] || !outsideEntranceRoom(boss.pos) || Dungeon.visible[boss.pos]); GameScene.add( boss ); set( arenaDoor, Terrain.WALL ); GameScene.updateMap( arenaDoor ); CellEmitter.get( arenaDoor ).start(Speck.factory(Speck.ROCK), 0.07f, 10 ); Camera.main.shake(3, 0.7f ); Sample.INSTANCE.play( Assets.SND_ROCKS ); Dungeon.observe(); Music.INSTANCE.play( currentTrack(), true ); } }