diff --git a/core/src/com/riiablo/Fonts.java b/core/src/com/riiablo/Fonts.java index 5cbd0843..c190c635 100644 --- a/core/src/com/riiablo/Fonts.java +++ b/core/src/com/riiablo/Fonts.java @@ -49,7 +49,7 @@ public class Fonts { data = fontformal10.getData(); data.lineHeight = data.xHeight = data.capHeight = 14; - data.ascent = 14; + data.ascent = 17; data.down = -14; data = fontformal11.getData(); diff --git a/core/src/com/riiablo/codec/D2S.java b/core/src/com/riiablo/codec/D2S.java index 1ffc5166..49c774d8 100644 --- a/core/src/com/riiablo/codec/D2S.java +++ b/core/src/com/riiablo/codec/D2S.java @@ -601,15 +601,15 @@ public class D2S { } } - static class SkillData { + public static class SkillData { static final byte[] SECTION_HEADER = {0x69, 0x66}; static final int NUM_TREES = 3; static final int NUM_SKILLS = 10; static final int SIZE = SECTION_HEADER.length + (NUM_TREES * NUM_SKILLS); - byte header[]; - byte data[]; + public byte header[]; + public byte data[]; static SkillData obtain(ByteBuffer buffer) { return new SkillData().read(buffer); diff --git a/core/src/com/riiablo/codec/excel/SkillDesc.java b/core/src/com/riiablo/codec/excel/SkillDesc.java index 14076c1f..af47ab9b 100644 --- a/core/src/com/riiablo/codec/excel/SkillDesc.java +++ b/core/src/com/riiablo/codec/excel/SkillDesc.java @@ -26,7 +26,7 @@ public class SkillDesc extends Excel { public String str_alt; @Column(format = "str mana") public String str_mana; - @Column public String descdam; + @Column public int descdam; @Column(format = "ddam calc1") public String ddam_calc1; @Column(format = "ddam calc2") @@ -40,91 +40,91 @@ public class SkillDesc extends Excel { @Column public String p3dmelem; @Column public String p3dmmin; @Column public String p3dmmax; - @Column public String descatt; + @Column public int descatt; @Column public String descmissile1; @Column public String descmissile2; @Column public String descmissile3; - @Column public String descline1; + @Column public int descline1; @Column public String desctexta1; @Column public String desctextb1; @Column public String desccalca1; @Column public String desccalcb1; - @Column public String descline2; + @Column public int descline2; @Column public String desctexta2; @Column public String desctextb2; @Column public String desccalca2; @Column public String desccalcb2; - @Column public String descline3; + @Column public int descline3; @Column public String desctexta3; @Column public String desctextb3; @Column public String desccalca3; @Column public String desccalcb3; - @Column public String descline4; + @Column public int descline4; @Column public String desctexta4; @Column public String desctextb4; @Column public String desccalca4; @Column public String desccalcb4; - @Column public String descline5; + @Column public int descline5; @Column public String desctexta5; @Column public String desctextb5; @Column public String desccalca5; @Column public String desccalcb5; - @Column public String descline6; + @Column public int descline6; @Column public String desctexta6; @Column public String desctextb6; @Column public String desccalca6; @Column public String desccalcb6; - @Column public String dsc2line1; + @Column public int dsc2line1; @Column public String dsc2texta1; @Column public String dsc2textb1; @Column public String dsc2calca1; @Column public String dsc2calcb1; - @Column public String dsc2line2; + @Column public int dsc2line2; @Column public String dsc2texta2; @Column public String dsc2textb2; @Column public String dsc2calca2; @Column public String dsc2calcb2; - @Column public String dsc2line3; + @Column public int dsc2line3; @Column public String dsc2texta3; @Column public String dsc2textb3; @Column public String dsc2calca3; @Column public String dsc2calcb3; - @Column public String dsc2line4; + @Column public int dsc2line4; @Column public String dsc2texta4; @Column public String dsc2textb4; @Column public String dsc2calca4; @Column public String dsc2calcb4; - @Column public String dsc3line1; + @Column public int dsc3line1; @Column public String dsc3texta1; @Column public String dsc3textb1; @Column public String dsc3calca1; @Column public String dsc3calcb1; - @Column public String dsc3line2; + @Column public int dsc3line2; @Column public String dsc3texta2; @Column public String dsc3textb2; @Column public String dsc3calca2; @Column public String dsc3calcb2; - @Column public String dsc3line3; + @Column public int dsc3line3; @Column public String dsc3texta3; @Column public String dsc3textb3; @Column public String dsc3calca3; @Column public String dsc3calcb3; - @Column public String dsc3line4; + @Column public int dsc3line4; @Column public String dsc3texta4; @Column public String dsc3textb4; @Column public String dsc3calca4; @Column public String dsc3calcb4; - @Column public String dsc3line5; + @Column public int dsc3line5; @Column public String dsc3texta5; @Column public String dsc3textb5; @Column public String dsc3calca5; @Column public String dsc3calcb5; - @Column public String dsc3line6; + @Column public int dsc3line6; @Column public String dsc3texta6; @Column public String dsc3textb6; @Column public String dsc3calca6; @Column public String dsc3calcb6; - @Column public String dsc3line7; + @Column public int dsc3line7; @Column public String dsc3texta7; @Column public String dsc3textb7; @Column public String dsc3calca7; diff --git a/core/src/com/riiablo/codec/excel/Skills.java b/core/src/com/riiablo/codec/excel/Skills.java index 6d527d1b..1bc01bc5 100644 --- a/core/src/com/riiablo/codec/excel/Skills.java +++ b/core/src/com/riiablo/codec/excel/Skills.java @@ -20,5 +20,11 @@ public class Skills extends Excel { @Column public String monanim; @Column public int seqnum; @Column public int seqinput; + @Column public int reqlevel; + @Column public int startmana; + @Column public int minmana; + @Column public int manashift; + @Column public int mana; + @Column public int lvlmana; } } diff --git a/core/src/com/riiablo/entity/Player.java b/core/src/com/riiablo/entity/Player.java index a8e7b40c..b3efd221 100644 --- a/core/src/com/riiablo/entity/Player.java +++ b/core/src/com/riiablo/entity/Player.java @@ -86,6 +86,7 @@ public class Player extends Entity { boolean alternate; boolean ignoreUpdate; public Stats stats; + public Skills skills; public final CharacterClass charClass; Array inventory = new Array<>(); @@ -96,11 +97,13 @@ public class Player extends Entity { public Player(String name, CharacterClass characterClass) { this(name, characterClass.id); stats = new StatsImpl(name, characterClass.id); + skills = new SkillsImpl(); } public Player(D2S d2s) { this(d2s.name, d2s.charClass); stats = new D2SStats(d2s); + skills = new D2SSkills(d2s); loadEquipped(d2s.items.equipped); loadInventory(d2s.items.inventory); } @@ -541,4 +544,30 @@ public class Player extends Entity { return 0; } } + + public interface Skills { + int getLevel(int skill); + } + + public class SkillsImpl implements Skills { + SkillsImpl() {} + + @Override + public int getLevel(int skill) { + return 0; + } + } + + public class D2SSkills implements Skills { + public final D2S.SkillData skills; + D2SSkills(D2S d2s) { + this.skills = d2s.skills; + } + + @Override + public int getLevel(int skill) { + skill -= charClass.firstSpell; + return skills.data[skill]; + } + } } diff --git a/core/src/com/riiablo/panel/SpellsPanel.java b/core/src/com/riiablo/panel/SpellsPanel.java index 48898132..4c3798dd 100644 --- a/core/src/com/riiablo/panel/SpellsPanel.java +++ b/core/src/com/riiablo/panel/SpellsPanel.java @@ -2,6 +2,7 @@ package com.riiablo.panel; import com.badlogic.gdx.assets.AssetDescriptor; import com.badlogic.gdx.graphics.g2d.Batch; +import com.badlogic.gdx.graphics.g2d.BitmapFont; import com.badlogic.gdx.graphics.g2d.TextureRegion; import com.badlogic.gdx.scenes.scene2d.InputEvent; import com.badlogic.gdx.scenes.scene2d.Touchable; @@ -138,13 +139,14 @@ public class SpellsPanel extends WidgetGroup implements Disposable { float[] X = { 0, 15, 84, 153 }; float[] Y = { 0, 370, 302, 234, 166, 98, 30 }; for (int i = charClass.firstSpell; i < charClass.lastSpell; i++) { - Skills.Entry skill = Riiablo.files.skills.get(i); + final Skills.Entry skill = Riiablo.files.skills.get(i); final SkillDesc.Entry desc = Riiablo.files.skilldesc.get(skill.skilldesc); final Table details = new Table() {{ final float SPACING = 2; + final BitmapFont font = Riiablo.fonts.font16; setBackground(PaletteIndexedColorDrawable.MODAL_FONT16); - add(new Label(Riiablo.string.lookup(desc.str_name), Riiablo.fonts.font16, Riiablo.colors.green)).center().space(SPACING).row(); - add(new Label(Riiablo.fonts.font16) {{ + add(new Label(Riiablo.string.lookup(desc.str_name), font, Riiablo.colors.green)).center().space(SPACING).row(); + add(new Label(font) {{ // TODO: It might possible to optimize this more -- goal is to reverse lines since they are backwards for some reason String text = Riiablo.string.lookup(desc.str_long); String[] lines = StringUtils.split(text, '\n'); @@ -153,11 +155,17 @@ public class SpellsPanel extends WidgetGroup implements Disposable { setText(text); setAlignment(Align.center); }}).center().space(SPACING).row(); + add(new Label(Riiablo.string.lookup("skilldesc3") + skill.reqlevel, font)).center().space(SPACING).row(); + add().height(font.getLineHeight()).center().space(SPACING).row(); + add().height(font.getLineHeight()).center().space(SPACING).row(); + add(new Label(Riiablo.string.lookup("StrSkill2") + 0, font)).center().space(SPACING).row(); pack(); }}; Button button = new Button(new Button.ButtonStyle( new TextureRegionDrawable(Skillicon.getTexture(desc.IconCel)), - new TextureRegionDrawable(Skillicon.getTexture(desc.IconCel + 1)))) { + new TextureRegionDrawable(Skillicon.getTexture(desc.IconCel + 1))) {{ + disabled = up; + }}) { @Override public void draw(PaletteIndexedBatch batch, float parentAlpha) { super.draw(batch, parentAlpha); @@ -169,11 +177,15 @@ public class SpellsPanel extends WidgetGroup implements Disposable { button.setPosition(X[desc.SkillColumn], Y[desc.SkillRow]); //button.setSize(48, 48); - Label skillLevel = new Label("0", Riiablo.fonts.font16); + // TODO: can be lazily init if default is 0 + int sLvl = gameScreen.player.skills.getLevel(i); + Label skillLevel = new Label(sLvl > 0 ? Integer.toString(sLvl) : "", sLvl > 9 ? Riiablo.fonts.fontformal10 : Riiablo.fonts.font16); skillLevel.setAlignment(Align.center); - skillLevel.setSize(16, 14); - skillLevel.setPosition(X[desc.SkillColumn] + 44, Y[desc.SkillRow] - 12); + //skillLevel.setSize(16, 14); + //skillLevel.setPosition(X[desc.SkillColumn] + 44, Y[desc.SkillRow] - 12); + skillLevel.setPosition(X[desc.SkillColumn] + 52, Y[desc.SkillRow] - 5, Align.center); button.setUserObject(skillLevel); + button.setDisabled(sLvl <= 0); Tab tab = tabs[desc.SkillPage]; tab.addActor(button);