public int random_top() { int x = Random.IntRange( left + 1, right - 1); int y = top; return x + y * Level.WIDTH; }
@Override public Item random() { quantity = Random.IntRange( 10, 20 ) * 5; return this; }
@Override public Item random() { quantity = Random.IntRange( 2, 4 ); return this; }
public Mimic() { super( Dungeon.depth + 1 ); name = "mimic"; spriteClass = MimicSprite.class; items = new ArrayList<>(); minDamage += tier; maxDamage += tier; HP = HT += Random.IntRange( 5, 10 ); baseSpeed = 0.75f; resistances.put(Element.Mind.class, Element.Resist.PARTIAL); resistances.put(Element.Body.class, Element.Resist.PARTIAL); }
@Override protected boolean proc_n( Char attacker, Char defender, int damage ) { attacker.damage( Random.IntRange(damage / 3, damage / 2), this, Element.ACID ); return true; } }
@Override protected boolean proc_n( Char attacker, Char defender, int damage ) { attacker.damage(Random.IntRange(damage / 3, damage / 2), this, Element.FLAME); return true; } }
@Override protected boolean proc_n( Char attacker, Char defender, int damage ) { attacker.damage(Random.IntRange(damage / 3, damage / 2), this, Element.BODY); attacker.sprite.burst(0x660022, (int) Math.sqrt(damage / 2) + 1); return true; } }
@Override public void onHit(MagesStaff staff, Char attacker, Char defender, int damage) { //like pre-nerf vampiric enchantment, except with herbal healing buff int level = Math.max( 0, staff.level() ); // lvl 0 - 33% // lvl 1 - 43% // lvl 2 - 50% int maxValue = damage * (level + 2) / (level + 6); int effValue = Math.min( Random.IntRange(0, maxValue), attacker.HT - attacker.HP ); Buff.affect(attacker, Sungrass.Health.class).boost( effValue ); }
@Override protected void createItems() { Item item = Bones.get(); if (item != null) { int pos; do { pos = Random.IntRange( ROOM_LEFT, ROOM_RIGHT ) + Random.IntRange( ROOM_TOP + 1, ROOM_BOTTOM ) * width(); } while (pos == entrance); drop( item, pos ).setHauntedIfCursed(1f).type = Heap.Type.REMAINS; } }
@Override protected void createItems() { Item item = Bones.get(); if (item != null) { int pos; do { pos = Random.IntRange( ROOM_LEFT, ROOM_RIGHT ) + Random.IntRange( ROOM_TOP + 1, ROOM_BOTTOM ) * width(); } while (pos == entrance); drop( item, pos ).setHauntedIfCursed(1f).type = Heap.Type.REMAINS; } }
@Override public int attackProc( Char enemy, int damage, boolean blocked ) { if( !blocked && Random.Int( 10 ) < tier ) { BuffActive.addFromDamage( enemy, Poisoned.class, damage ); state = FLEEING; } GameScene.add( Blob.seed( enemy.pos, Random.IntRange( 5, 7 ), Web.class ) ); return damage; }
@Override public int damageRoll(Char owner) { int damage = augment.damageFactor(super.damageRoll( owner )); if (owner instanceof Hero) { int exStr = ((Hero)owner).STR() - STRReq(); if (exStr > 0) { damage += Random.IntRange( 0, exStr ); } } return damage; }
@Override public int damageRoll(Char owner) { int damage = augment.damageFactor(super.damageRoll( owner )); if (owner instanceof Hero) { int exStr = ((Hero)owner).STR() - STRReq(); if (exStr > 0) { damage += Random.IntRange( 0, exStr ); } } return damage; }
@Override public int damageRoll(Char owner) { int damage = augment.damageFactor(super.damageRoll( owner )); if (owner instanceof Hero) { int exStr = ((Hero)owner).STR() - STRReq(); if (exStr > 0) { damage += Random.IntRange( 0, exStr ); } } return damage; }
private static void addChest( Level level, int pos, int door ) { if (pos == door - 1 || pos == door + 1 || pos == door - level.width() || pos == door + level.width()) { return; } Item prize = new Gold( Random.IntRange( 10, 25 ) ); level.drop( prize, pos ).type = Heap.Type.CHEST; } }
@Override public int proc( Armor armor, Char attacker, Char defender, int damage) { int level = Math.max(0, armor.level()); if (Random.Int( level / 2 + 10 ) >= 9) { int duration = Random.IntRange( 4, 12 ); Buff.affect( attacker, Charm.class, duration ).object = defender.id(); attacker.sprite.centerEmitter().start( Speck.factory( Speck.HEART ), 0.2f, 5 ); } return damage; }
@Override protected void onItemSelected( Item item ) { // curUser.sprite.parent.add( new Identification( curUser.sprite.center().offset( 0, -16 ) ) ); curUser.sprite.emitter().start(Speck.factory(Speck.QUESTION), 0.1f, Random.IntRange(6, 9)); item.identify(); GLog.i("It is " + item); // Badges.validateItemLevelAcquired(item); }
@Override public int defenseProc( Char enemy, int damage ) { int dmg = Random.IntRange( 0, damage ); if (dmg > 0) { enemy.damage( dmg, this ); if (!enemy.isAlive() && enemy == Dungeon.hero) { Dungeon.fail(getClass()); GLog.n(Messages.capitalize(Messages.get(Char.class, "kill", name))); } } return super.defenseProc( enemy, damage ); }
@Override public int proc( Armor armor, Char attacker, Char defender, int damage) { int level = Math.max(0, armor.level()); if (Random.Int( level / 2 + 10 ) >= 9) { int duration = Random.IntRange( 4, 12 ); Buff.affect( attacker, Charm.class, duration ).object = defender.id(); attacker.sprite.centerEmitter().start( Speck.factory( Speck.HEART ), 0.2f, 5 ); } return damage; }
@Override public int proc(Weapon weapon, Char attacker, Char defender, int damage ) { if (Random.Int(10) == 0){ int base = Random.IntRange(3, 5); Buff.affect( attacker, Charm.class, base + 10 ).object = defender.id(); attacker.sprite.centerEmitter().start( Speck.factory( Speck.HEART ), 0.2f, 5 ); //5 turns will be reduced by the attack, so effectively lasts for base turns Buff.affect( defender, Charm.class, base + 5 ).object = attacker.id(); defender.sprite.centerEmitter().start( Speck.factory( Speck.HEART ), 0.2f, 5 ); } return damage; }