diff --git a/core/src/main/assets/interfaces/talent_icons.png b/core/src/main/assets/interfaces/talent_icons.png index ca6a8a98f..1e7b26125 100644 Binary files a/core/src/main/assets/interfaces/talent_icons.png and b/core/src/main/assets/interfaces/talent_icons.png differ diff --git a/core/src/main/assets/messages/actors/actors.properties b/core/src/main/assets/messages/actors/actors.properties index 613dab26c..1bbed8295 100644 --- a/core/src/main/assets/messages/actors/actors.properties +++ b/core/src/main/assets/messages/actors/actors.properties @@ -338,23 +338,25 @@ actors.hero.talent.energizing_meal.desc=_+1:_ Eating food grants the Mage _5 tur actors.hero.talent.energizing_upgrade.title=energizing upgrade actors.hero.talent.energizing_upgrade.desc=_+1:_ The Mage's staff recharges for _1 extra charge_ whenever the Mage upgrades it.\n\n_+2:_ The Mage's staff recharges for _2 extra charges_ whenever the Mage upgrades it. -actors.hero.talent.rationed_meal.title=rationed meal -actors.hero.talent.rationed_meal.desc=_+1:_ Eating food gives the Rogue _15% more satiety_.\n\n_+2:_ Eating food gives the Rogue _25% more satiety_. +actors.hero.talent.cached_rations.title=cached rations +actors.hero.talent.cached_rations.desc=_+1:_ The Rogue can find _3 small rations_ placed in chests while he explores the earlier stages of the dungeon.\n\n_+2:_ The Rogue can find _5 small rations_ placed in chests while he explores the earlier stages of the the dungeon. actors.hero.talent.thiefs_intuition.title=thief's intuition actors.hero.talent.thiefs_intuition.desc=_+1:_ The Rogue identifies rings _2x faster_, and identifies the type of a ring _when he equips it_.\n\n_+2:_ The Rogue identifies rings _when he equips them_, and identifies the type of a ring _when he picks it up_. actors.hero.talent.sucker_punch.title=sucker punch actors.hero.talent.sucker_punch.desc=_+1:_ The Rogue deals _1-2 bonus damage_ the first time he surprise attacks an enemy.\n\n_+2:_ The Rogue deals _2 bonus damage_ the first time he surprise attacks an enemy. -actors.hero.talent.mending_shadows.title=mending shadows -actors.hero.talent.mending_shadows.desc=_+1:_ The Rogue heals for 1 HP every _5 consecutive turns_ that he is hidden by his cloak.\n\n_+2:_ The Rogue heals for 1 HP every _3 consecutive turns_ that he is hidden by his cloak. +actors.hero.talent.protective_shadows.title=protective shadows +actors.hero.talent.protective_shadows.desc=_+1:_ The Rogue gains one shielding _every other turn_ his cloak is activated, _to a max of 3_.\n\n_+2:_ The Rogue gains one shielding _every turn_ his cloak is activated, _to a max of 5_. -actors.hero.talent.invigorating_meal.title=invigorating meal -actors.hero.talent.invigorating_meal.desc=_+1:_ Eating food takes 1 turn and grants the Huntress _1 turn of haste_.\n\n_+2:_ Eating food takes 1 turn and grants the Huntress _2 turns of haste_. +actors.hero.talent.natures_bounty.title=nature's bounty +actors.hero.talent.natures_bounty.desc=_+1:_ The Huntress can find _4 berries_ hidden in tall grass as she explores the earlier stages of the dungeon.\n\n_+2:_ The Huntress can find _6 berries_ hidden in tall grass as she explores the earlier stages of the dungeon. actors.hero.talent.survivalists_intuition.title=survivalist's intuition actors.hero.talent.survivalists_intuition.desc=_+1:_ The Huntress identifies all equipment _1.75x faster_.\n\n_+2:_ The Huntress identifies all equipment _2.5x faster_. actors.hero.talent.followup_strike.title=followup strike actors.hero.talent.followup_strike.desc=_+1:_ When the Huntress hits an enemy with her bow or a thrown weapon, her next melee attack against that enemy deals _2 bonus damage_.\n\n_+2:_ When the Huntress hits an enemy with her bow or a thrown weapon, her next melee attack against that enemy deals _3 bonus damage_ actors.hero.talent.natures_aid.title=nature's aid actors.hero.talent.natures_aid.desc=_+1:_ The Huntress gains 2 armor of barkskin for _4 turns_ when a plant is trampled in her vision.\n\n_+2:_ The Huntress gains 2 armor of barkskin for _6 turns_ when a plant is trampled in her vision. +actors.hero.talent.invigorating_meal.title=invigorating meal +actors.hero.talent.invigorating_meal.desc=_+1:_ Eating food takes 1 turn and grants the Huntress _1 turn of haste_.\n\n_+2:_ Eating food takes 1 turn and grants the Huntress _2 turns of haste_. actors.hero.hero.name=you actors.hero.hero.leave=You can't leave yet, the rest of the dungeon awaits below! diff --git a/core/src/main/assets/messages/items/items.properties b/core/src/main/assets/messages/items/items.properties index 9cf3bd937..174c7c7ed 100644 --- a/core/src/main/assets/messages/items/items.properties +++ b/core/src/main/assets/messages/items/items.properties @@ -482,6 +482,10 @@ items.bombs.woollybomb.name=woolly bomb items.bombs.woollybomb.desc=This customized bomb will create a field of magical sheep after exploding. These sheep will block movement and persist for some time. ###food +items.food.berry.name=dungeon berry +items.food.berry.eat_msg=That berry was tasty! +items.food.berry.desc=This small berry was found by the huntress among the dungeon's vegetation. It can be eaten quickly, restores a small amount of satiety, and might contain a usable seed! + items.food.blandfruit.name=blandfruit items.food.blandfruit.cooked=cooked blandfruit items.food.blandfruit.sunfruit=sunfruit diff --git a/core/src/main/assets/sprites/items.png b/core/src/main/assets/sprites/items.png index 72475cfac..1689eec39 100644 Binary files a/core/src/main/assets/sprites/items.png and b/core/src/main/assets/sprites/items.png differ diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/hero/Talent.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/hero/Talent.java index 685d2ea4e..dd965a831 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/hero/Talent.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/hero/Talent.java @@ -25,8 +25,8 @@ 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.CounterBuff; import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Haste; -import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Hunger; import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Recharging; import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.WandEmpower; import com.shatteredpixel.shatteredpixeldungeon.actors.mobs.Mob; @@ -71,21 +71,21 @@ public enum Talent { TEST_MAGE_T2_4(23), TEST_MAGE_T2_5(24), - RATIONED_MEAL(32), + CACHED_RATIONS(32), THIEFS_INTUITION(33), SUCKER_PUNCH(34), - MENDING_SHADOWS(35), + PROTECTIVE_SHADOWS(35), TEST_ROGUE_T2_1(36), TEST_ROGUE_T2_2(37), TEST_ROGUE_T2_3(38), TEST_ROGUE_T2_4(39), TEST_ROGUE_T2_5(40), - INVIGORATING_MEAL(48), + NATURES_BOUNTY(48), SURVIVALISTS_INTUITION(49), FOLLOWUP_STRIKE(50), NATURES_AID(51), - TEST_HUNTRESS_T2_1(52), + INVIGORATING_MEAL(52), TEST_HUNTRESS_T2_2(53), TEST_HUNTRESS_T2_3(54), TEST_HUNTRESS_T2_4(55), @@ -117,6 +117,11 @@ public enum Talent { } public static void onTalentUpgraded( Hero hero, Talent talent){ + if (talent == NATURES_BOUNTY){ + if ( hero.pointsInTalent(NATURES_BOUNTY) == 1) Buff.count(hero, NatureBerriesAvailable.class, 4); + else Buff.count(hero, NatureBerriesAvailable.class, 2); + } + if (talent == ARMSMASTERS_INTUITION && hero.pointsInTalent(ARMSMASTERS_INTUITION) == 2){ if (hero.belongings.weapon != null) hero.belongings.weapon.identify(); if (hero.belongings.armor != null) hero.belongings.armor.identify(); @@ -136,6 +141,9 @@ public enum Talent { } } + public static class CachedRationsDropped extends CounterBuff{}; + public static class NatureBerriesAvailable extends CounterBuff{}; + public static void onFoodEaten( Hero hero, float foodVal ){ if (hero.hasTalent(HEARTY_MEAL)){ //3/5 HP healed, when hero is below 25% health @@ -158,11 +166,6 @@ public enum Talent { Buff.affect( hero, Recharging.class, 2 + 3*(hero.pointsInTalent(ENERGIZING_MEAL)) ); ScrollOfRecharging.charge( hero ); } - if (hero.hasTalent(RATIONED_MEAL)){ - //15%/25% bonus food value - float bonusSatiety = foodVal * (0.05f + (0.1f * hero.pointsInTalent(RATIONED_MEAL))); - Buff.affect(hero, Hunger.class).affectHunger(bonusSatiety, true); - } if (hero.hasTalent(INVIGORATING_MEAL)){ //effectively 1/2 turns of haste Buff.affect( hero, Haste.class, 0.67f+hero.pointsInTalent(INVIGORATING_MEAL)); @@ -270,10 +273,10 @@ public enum Talent { Collections.addAll(tierTalents, EMPOWERING_MEAL, SCHOLARS_INTUITION, TESTED_HYPOTHESIS, BACKUP_BARRIER); break; case ROGUE: - Collections.addAll(tierTalents, RATIONED_MEAL, THIEFS_INTUITION, SUCKER_PUNCH, MENDING_SHADOWS); + Collections.addAll(tierTalents, CACHED_RATIONS, THIEFS_INTUITION, SUCKER_PUNCH, PROTECTIVE_SHADOWS); break; case HUNTRESS: - Collections.addAll(tierTalents, INVIGORATING_MEAL, SURVIVALISTS_INTUITION, FOLLOWUP_STRIKE, NATURES_AID); + Collections.addAll(tierTalents, NATURES_BOUNTY, SURVIVALISTS_INTUITION, FOLLOWUP_STRIKE, NATURES_AID); break; } for (Talent talent : tierTalents){ @@ -293,7 +296,7 @@ public enum Talent { Collections.addAll(tierTalents, TEST_ROGUE_T2_1, TEST_ROGUE_T2_2, TEST_ROGUE_T2_3, TEST_ROGUE_T2_4, TEST_ROGUE_T2_5); break; case HUNTRESS: - Collections.addAll(tierTalents, TEST_HUNTRESS_T2_1, TEST_HUNTRESS_T2_2, TEST_HUNTRESS_T2_3, TEST_HUNTRESS_T2_4, TEST_HUNTRESS_T2_5); + Collections.addAll(tierTalents, INVIGORATING_MEAL, TEST_HUNTRESS_T2_2, TEST_HUNTRESS_T2_3, TEST_HUNTRESS_T2_4, TEST_HUNTRESS_T2_5); break; } for (Talent talent : tierTalents){ diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/artifacts/CloakOfShadows.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/artifacts/CloakOfShadows.java index ca592013f..f9fdad0d4 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/artifacts/CloakOfShadows.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/artifacts/CloakOfShadows.java @@ -24,13 +24,13 @@ package com.shatteredpixel.shatteredpixeldungeon.items.artifacts; import com.shatteredpixel.shatteredpixeldungeon.Assets; import com.shatteredpixel.shatteredpixeldungeon.actors.Char; +import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Barrier; import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Buff; import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.LockedFloor; import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Preparation; import com.shatteredpixel.shatteredpixeldungeon.actors.hero.Hero; import com.shatteredpixel.shatteredpixeldungeon.actors.hero.HeroSubClass; import com.shatteredpixel.shatteredpixeldungeon.actors.hero.Talent; -import com.shatteredpixel.shatteredpixeldungeon.effects.Speck; import com.shatteredpixel.shatteredpixeldungeon.items.Item; import com.shatteredpixel.shatteredpixeldungeon.items.rings.RingOfEnergy; import com.shatteredpixel.shatteredpixeldungeon.messages.Messages; @@ -242,19 +242,21 @@ public class CloakOfShadows extends Artifact { } } - float healInc = 0; + float barrierInc = 0.5f; @Override public boolean act(){ turnsToCost--; - if (((Hero)target).hasTalent(Talent.MENDING_SHADOWS)){ - healInc++; - // 5/3 turns to heal - if (healInc >= 7 - 2*((Hero) target).pointsInTalent(Talent.MENDING_SHADOWS)){ - healInc = 0; - target.HP = Math.min(target.HT, target.HP+1); - target.sprite.emitter().burst( Speck.factory( Speck.HEALING ), 1 ); + //barrier every 2/1 turns, to a max of 3/5 + if (((Hero)target).hasTalent(Talent.PROTECTIVE_SHADOWS)){ + Barrier barrier = Buff.affect(target, Barrier.class); + if (barrier.shielding() < 1 + 2*((Hero)target).pointsInTalent(Talent.PROTECTIVE_SHADOWS)) { + barrierInc += 0.5f * ((Hero) target).pointsInTalent(Talent.PROTECTIVE_SHADOWS); + } + if (barrierInc >= 1 ){ + barrierInc = 0; + barrier.incShield(1); } } @@ -326,14 +328,14 @@ public class CloakOfShadows extends Artifact { } private static final String TURNSTOCOST = "turnsToCost"; - private static final String HEAL_INC = "heal_inc"; + private static final String BARRIER_INC = "barrier_inc"; @Override public void storeInBundle(Bundle bundle) { super.storeInBundle(bundle); bundle.put( TURNSTOCOST , turnsToCost); - bundle.put( HEAL_INC, healInc); + bundle.put( BARRIER_INC, barrierInc); } @Override @@ -341,7 +343,7 @@ public class CloakOfShadows extends Artifact { super.restoreFromBundle(bundle); turnsToCost = bundle.getInt( TURNSTOCOST ); - healInc = bundle.getFloat( HEAL_INC ); + barrierInc = bundle.getFloat( BARRIER_INC ); } } } diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/food/Berry.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/food/Berry.java new file mode 100644 index 000000000..c6d450cac --- /dev/null +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/food/Berry.java @@ -0,0 +1,65 @@ +/* + * Pixel Dungeon + * Copyright (C) 2012-2015 Oleg Dolya + * + * Shattered Pixel Dungeon + * Copyright (C) 2014-2020 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 + */ + +package com.shatteredpixel.shatteredpixeldungeon.items.food; + +import com.shatteredpixel.shatteredpixeldungeon.Dungeon; +import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Buff; +import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.CounterBuff; +import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Hunger; +import com.shatteredpixel.shatteredpixeldungeon.actors.hero.Hero; +import com.shatteredpixel.shatteredpixeldungeon.actors.hero.Talent; +import com.shatteredpixel.shatteredpixeldungeon.items.Generator; +import com.shatteredpixel.shatteredpixeldungeon.sprites.ItemSpriteSheet; + +public class Berry extends Food { + + { + image = ItemSpriteSheet.BERRY; + energy = Hunger.HUNGRY/4f; //75 food value + } + + @Override + protected float eatingTime(){ + if (Dungeon.hero.hasTalent(Talent.INVIGORATING_MEAL)){ + return 0; + } else { + return 1; + } + } + + @Override + protected void satisfy(Hero hero) { + super.satisfy(hero); + SeedCounter counter = Buff.count(hero, SeedCounter.class, 1); + if (counter.count() >= 2){ + Dungeon.level.drop(Generator.random(Generator.Category.SEED), hero.pos).sprite.drop(); + counter.detach(); + } + } + + @Override + public int value() { + return 5 * quantity; + } + + public static class SeedCounter extends CounterBuff{}; +} diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/RegularLevel.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/RegularLevel.java index fa9d22641..e8df58aa2 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/RegularLevel.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/RegularLevel.java @@ -25,6 +25,8 @@ import com.shatteredpixel.shatteredpixeldungeon.Bones; import com.shatteredpixel.shatteredpixeldungeon.Dungeon; import com.shatteredpixel.shatteredpixeldungeon.actors.Actor; import com.shatteredpixel.shatteredpixeldungeon.actors.Char; +import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Buff; +import com.shatteredpixel.shatteredpixeldungeon.actors.hero.Talent; import com.shatteredpixel.shatteredpixeldungeon.actors.mobs.GoldenMimic; import com.shatteredpixel.shatteredpixeldungeon.actors.mobs.Mimic; import com.shatteredpixel.shatteredpixeldungeon.actors.mobs.Mob; @@ -33,6 +35,7 @@ import com.shatteredpixel.shatteredpixeldungeon.items.Heap; import com.shatteredpixel.shatteredpixeldungeon.items.Item; import com.shatteredpixel.shatteredpixeldungeon.items.artifacts.Artifact; import com.shatteredpixel.shatteredpixeldungeon.items.artifacts.DriedRose; +import com.shatteredpixel.shatteredpixeldungeon.items.food.SmallRation; import com.shatteredpixel.shatteredpixeldungeon.items.journal.GuidePage; import com.shatteredpixel.shatteredpixeldungeon.items.keys.GoldenKey; import com.shatteredpixel.shatteredpixeldungeon.journal.Document; @@ -378,7 +381,7 @@ public abstract class RegularLevel extends Level { } } - //use a separate generator for this to prevent held items and meta progress from affecting levelgen + //use a separate generator for this to prevent held items, meta progress, and talents from affecting levelgen Random.pushGenerator( Dungeon.seedCurDepth() ); Item item = Bones.get(); @@ -411,6 +414,24 @@ public abstract class RegularLevel extends Level { } } + //cached rations try to drop in a special room on floors 2/4/6/8/9, to a max of 3/5 + if (Dungeon.hero.hasTalent(Talent.CACHED_RATIONS)){ + Talent.CachedRationsDropped dropped = Buff.affect(Dungeon.hero, Talent.CachedRationsDropped.class); + if (dropped.count() < 1 + 2*Dungeon.hero.pointsInTalent(Talent.CACHED_RATIONS) + && Math.min(8, 1 + 2*dropped.count()) < Dungeon.depth){ + int cell; + do { + cell = randomDropCell(SpecialRoom.class); + } while (room(cell) instanceof SecretRoom); + if (map[cell] == Terrain.HIGH_GRASS || map[cell] == Terrain.FURROWED_GRASS) { + map[cell] = Terrain.GRASS; + losBlocking[cell] = false; + } + drop( new SmallRation(), cell).type = Heap.Type.CHEST; + dropped.countUp(1); + } + } + //guide pages Collection allPages = Document.ADVENTURERS_GUIDE.pages(); ArrayList missingPages = new ArrayList<>(); @@ -474,10 +495,14 @@ public abstract class RegularLevel extends Level { return null; } + + protected int randomDropCell(){ + return randomDropCell(StandardRoom.class); + } - protected int randomDropCell() { + protected int randomDropCell( Class roomType ) { while (true) { - Room room = randomRoom( StandardRoom.class ); + Room room = randomRoom( roomType ); if (room != null && room != roomEntrance) { int pos = pointToCell(room.random()); if (passable[pos] diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/features/HighGrass.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/features/HighGrass.java index 8b84007aa..ab63c229e 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/features/HighGrass.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/features/HighGrass.java @@ -30,12 +30,14 @@ import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Buff; import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Invisibility; import com.shatteredpixel.shatteredpixeldungeon.actors.hero.Hero; import com.shatteredpixel.shatteredpixeldungeon.actors.hero.HeroClass; +import com.shatteredpixel.shatteredpixeldungeon.actors.hero.Talent; import com.shatteredpixel.shatteredpixeldungeon.effects.CellEmitter; import com.shatteredpixel.shatteredpixeldungeon.effects.particles.LeafParticle; import com.shatteredpixel.shatteredpixeldungeon.items.Dewdrop; import com.shatteredpixel.shatteredpixeldungeon.items.Generator; import com.shatteredpixel.shatteredpixeldungeon.items.armor.glyphs.Camouflage; import com.shatteredpixel.shatteredpixeldungeon.items.artifacts.SandalsOfNature; +import com.shatteredpixel.shatteredpixeldungeon.items.food.Berry; import com.shatteredpixel.shatteredpixeldungeon.levels.Level; import com.shatteredpixel.shatteredpixeldungeon.levels.Terrain; import com.shatteredpixel.shatteredpixeldungeon.scenes.GameScene; @@ -82,6 +84,17 @@ public class HighGrass { naturalismLevel = -1; } } + + Talent.NatureBerriesAvailable berries = ch.buff(Talent.NatureBerriesAvailable.class); + if (berries != null && Random.Int(30) == 0){ + if (berries.count() > 0){ + berries.countDown(1); + level.drop(new Berry(), pos).sprite.drop(); + } + if (berries.count() <= 0){ + berries.detach(); + } + } } if (naturalismLevel >= 0) { diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/sprites/ItemSpriteSheet.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/sprites/ItemSpriteSheet.java index 99186771b..6dec30544 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/sprites/ItemSpriteSheet.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/sprites/ItemSpriteSheet.java @@ -626,6 +626,7 @@ public class ItemSpriteSheet { public static final int MEAT_PIE = FOOD+9; public static final int BLANDFRUIT = FOOD+10; public static final int BLAND_CHUNKS= FOOD+11; + public static final int BERRY = FOOD+12; static{ assignItemRect(MEAT, 15, 11); assignItemRect(STEAK, 15, 11); @@ -639,6 +640,7 @@ public class ItemSpriteSheet { assignItemRect(MEAT_PIE, 16, 12); assignItemRect(BLANDFRUIT, 9, 12); assignItemRect(BLAND_CHUNKS,14, 6); + assignItemRect(BERRY, 9, 11); } private static final int QUEST = xy(1, 29); //32 slots