8 Commits
1.0.1 ... 1.0.2

18 changed files with 216 additions and 79 deletions

View File

@@ -20,8 +20,8 @@ android {
applicationId "com.eyecreate.miceandmystics.miceandmystics"
minSdkVersion 16
targetSdkVersion 21
versionCode 2
versionName "1.0.1"
versionCode 3
versionName "1.0.2"
}
compileOptions {

View File

@@ -63,7 +63,7 @@ public class CampaignActivity extends RecyclerViewActivity {
@Override
public void onClick(DialogInterface dialogInterface, int i) {
if(((EditText) dialogView.findViewById(R.id.campaign_name)).getText().length()>0) {
((CampaignAdapter) getAdapter()).addItem(((EditText) dialogView.findViewById(R.id.campaign_name)).getText().toString(), CampaignType.valueOfDisplayName(typeSpinner.getSelectedItem().toString()));
((CampaignAdapter) getAdapter()).addItem(((EditText) dialogView.findViewById(R.id.campaign_name)).getText().toString(), CampaignType.valueOf(((CampaignType)typeSpinner.getSelectedItem()).name()));
} else {
Toast.makeText(CampaignActivity.this,"Can not have blank name!",Toast.LENGTH_LONG).show();
}

View File

@@ -133,7 +133,7 @@ public class CampaignDetailsActivity extends RecyclerViewActivity {
RealmList<Achievement> currentPartyAchievements = MiceAndMysticsApplication.getRealmInstance().where(Campaign.class).equalTo("campaignName",campaign.getCampaignName()).findFirst().getPartyStoryAchievements();
boolean hasAlready = false;
for (Achievement achievement:currentPartyAchievements) {
if(achievementSpinner.getSelectedItem().toString().equals(achievement.getAchievementName())){
if(((com.eyecreate.miceandmystics.miceandmystics.model.Enums.Achievement)achievementSpinner.getSelectedItem()).name().equals(achievement.getAchievementName())){
hasAlready = true;
}
}
@@ -165,7 +165,7 @@ public class CampaignDetailsActivity extends RecyclerViewActivity {
@Override
public void onClick(DialogInterface dialogInterface, int i) {
if(playerSpinner.getSelectedItem() != null) {
((CampaignDetailsAdapter) getAdapter()).addCharacter(CharacterNames.valueOf(charSpinner.getSelectedItem().toString()), MiceAndMysticsApplication.getRealmInstance().where(Player.class).equalTo("playerName", playerSpinner.getSelectedItem().toString()).findFirst());
((CampaignDetailsAdapter) getAdapter()).addCharacter(((CharacterNames)charSpinner.getSelectedItem()), MiceAndMysticsApplication.getRealmInstance().where(Player.class).equalTo("playerName", playerSpinner.getSelectedItem().toString()).findFirst());
} else {
Toast.makeText(CampaignDetailsActivity.this,"No player selected. Maybe try making one first.",Toast.LENGTH_LONG).show();
}

View File

@@ -76,7 +76,7 @@ public class CharacterDetailsActivity extends RecyclerViewActivity {
.setPositiveButton("Add", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialogInterface, int i) {
RealmResults<Character> duplicates = MiceAndMysticsApplication.getRealmInstance().where(Character.class).equalTo("abilities.abilityName",abilitySpinner.getSelectedItem().toString()).equalTo("uuid",currentCharacter.getUuid()).findAll();
RealmResults<Character> duplicates = MiceAndMysticsApplication.getRealmInstance().where(Character.class).equalTo("abilities.abilityName", ((Abilities) abilitySpinner.getSelectedItem()).name()).equalTo("uuid", currentCharacter.getUuid()).findAll();
if(duplicates.size()==0) {
((CharacterDetailsAdapter) getAdapter()).addAbility((Abilities) abilitySpinner.getSelectedItem());
} else {

View File

@@ -1,7 +1,16 @@
package com.eyecreate.miceandmystics.miceandmystics;
import android.app.Application;
import android.content.SharedPreferences;
import com.eyecreate.miceandmystics.miceandmystics.model.*;
import com.eyecreate.miceandmystics.miceandmystics.model.Character;
import com.eyecreate.miceandmystics.miceandmystics.model.Enums.Abilities;
import com.eyecreate.miceandmystics.miceandmystics.model.Enums.CampaignType;
import com.eyecreate.miceandmystics.miceandmystics.model.Enums.CharacterNames;
import io.realm.Realm;
import io.realm.RealmResults;
import uk.co.chrisjenx.calligraphy.CalligraphyConfig;
public class MiceAndMysticsApplication extends Application {
@@ -19,6 +28,52 @@ public class MiceAndMysticsApplication extends Application {
.setFontAttrId(R.attr.fontPath)
.build()
);
checkForPreLocalization();
}
private void checkForPreLocalization() {
//Check if there are DB items and migration check flag isn't set yet.
//If so, take all abilities, achievements, campaign names, and character names and make them enum names.
//Optionally, be sad I didn't think of this before now.
if(!getSharedPreferences("dbcheck", MODE_PRIVATE).contains("localizationchecked") && getRealmInstance().where(Campaign.class).findAll().size()>0) {
getRealmInstance().beginTransaction();
RealmResults<Ability> abilities = getRealmInstance().where(Ability.class).findAll();
for(int i = 0; i<abilities.size();i++) {
Ability ability = abilities.get(i);
for(Abilities enums:Abilities.values()) {
if(enums.displayName().equals(ability.getAbilityName())) {
ability.setAbilityName(enums.name());
}
}
}
RealmResults<Achievement> achievements = getRealmInstance().where(Achievement.class).findAll();
for(int i = 0; i<achievements.size();i++) {
Achievement achievement = achievements.get(i);
for(com.eyecreate.miceandmystics.miceandmystics.model.Enums.Achievement enums: com.eyecreate.miceandmystics.miceandmystics.model.Enums.Achievement.values()) {
if(enums.displayName().equals(achievement.getAchievementName())) {
achievement.setAchievementName(enums.name());
}
}
}
RealmResults<Campaign> campaigns = getRealmInstance().where(Campaign.class).findAll();
for(int i = 0;i<campaigns.size();i++) {
Campaign campaign = campaigns.get(i);
if(campaign.getCampaignType().equals(CampaignType.Sorrow_and_Remembrance.displayName())) {
campaign.setCampaignType(CampaignType.Sorrow_and_Remembrance.name());
}
}
RealmResults<Character> characters = getRealmInstance().where(Character.class).findAll();
for(int i = 0;i<characters.size();i++) {
Character character = characters.get(i);
for(CharacterNames enums:CharacterNames.values()) {
if(enums.displayName().equals(character.getCharacterName())) {
character.setCharacterName(enums.name());
}
}
}
getRealmInstance().commitTransaction();
}
getSharedPreferences("dbcheck",MODE_PRIVATE).edit().putBoolean("localizationchecked",true).apply();
}
public static MiceAndMysticsApplication getInstance() {

View File

@@ -39,7 +39,7 @@ public class CampaignAdapter extends RecyclerView.Adapter<CampaignViewHolder> {
MiceAndMysticsApplication.getRealmInstance().beginTransaction();
com.eyecreate.miceandmystics.miceandmystics.model.Campaign campaign = new com.eyecreate.miceandmystics.miceandmystics.model.Campaign();
campaign.setCampaignName(campaignName);
campaign.setCampaignType(type.displayName());
campaign.setCampaignType(type.name());
MiceAndMysticsApplication.getRealmInstance().copyToRealm(campaign);
MiceAndMysticsApplication.getRealmInstance().commitTransaction();
fullRefresh();

View File

@@ -107,7 +107,7 @@ public class CampaignDetailsAdapter extends RecyclerView.Adapter<RecyclerView.Vi
MiceAndMysticsApplication.getRealmInstance().beginTransaction();
Achievement realmAchievement = MiceAndMysticsApplication.getRealmInstance().createObject(Achievement.class);
realmAchievement.setUuid(UUID.randomUUID().toString());
realmAchievement.setAchievementName(achievement.displayName());
realmAchievement.setAchievementName(achievement.name());
currentCampaign.getPartyStoryAchievements().add(realmAchievement);
MiceAndMysticsApplication.getRealmInstance().commitTransaction();
fullRefresh();

View File

@@ -73,7 +73,7 @@ public class CharacterDetailsAdapter extends RecyclerView.Adapter<RecyclerView.V
MiceAndMysticsApplication.getRealmInstance().beginTransaction();
Ability realmAbility = MiceAndMysticsApplication.getRealmInstance().createObject(Ability.class);
realmAbility.setUuid(UUID.randomUUID().toString());
realmAbility.setAbilityName(ability.displayName());
realmAbility.setAbilityName(ability.name());
currentCharacter.getAbilities().add(realmAbility);
MiceAndMysticsApplication.getRealmInstance().commitTransaction();
notifyDataSetChanged();

View File

@@ -1,44 +1,47 @@
package com.eyecreate.miceandmystics.miceandmystics.model.Enums;
import com.eyecreate.miceandmystics.miceandmystics.MiceAndMysticsApplication;
import com.eyecreate.miceandmystics.miceandmystics.R;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
public enum Abilities {
First_Aid("First Aid",new CharacterType[]{CharacterType.Mystic,CharacterType.Archer,CharacterType.Scamp,CharacterType.Leader,CharacterType.Healer,CharacterType.Tinkerer,CharacterType.Warrior}),
Chain_Lightning("Chain Lightning",new CharacterType[]{CharacterType.Mystic}),
Mystic_Blast("Mystic Blast",new CharacterType[]{CharacterType.Mystic}),
Major_Heal("Major Heal",new CharacterType[]{CharacterType.Healer}),
Feint("Feint",new CharacterType[]{CharacterType.Warrior}),
Battle_Squeak("Battle Squeak",new CharacterType[]{CharacterType.Warrior}),
Battle_Leader("Battle Leader",new CharacterType[]{CharacterType.Leader}),
Set_Trap("Set Trap",new CharacterType[]{CharacterType.Tinkerer}),
Fortify("Fortify",new CharacterType[]{CharacterType.Healer}),
Cure("Cure",new CharacterType[]{CharacterType.Healer}),
Knife_Strike("Knife Strike",new CharacterType[]{CharacterType.Scamp}),
Find("Find",new CharacterType[]{CharacterType.Scamp}),
Dodge("Dodge",new CharacterType[]{CharacterType.Scamp}),
Thundersqueak("Thundersqueak",new CharacterType[]{CharacterType.Warrior,CharacterType.Tinkerer,CharacterType.Healer}),
Backslash("Backslash",new CharacterType[]{CharacterType.Warrior}),
Mystic_Bolt("Mystic Bolt",new CharacterType[]{CharacterType.Mystic}),
Inspire("Inspire",new CharacterType[]{CharacterType.Leader}),
Keen_Eye("Keen Eye",new CharacterType[]{CharacterType.Scamp,CharacterType.Archer}),
Meeps("Meeps",new CharacterType[]{CharacterType.Maginos}),
Invisibility("Invisibility",new CharacterType[]{CharacterType.Mystic}),
Accurate_Shot("Accurate Shot",new CharacterType[]{CharacterType.Archer}),
Aimed_Shot("Aimed Shot",new CharacterType[]{CharacterType.Archer}),
Power_Shot("Power Shot",new CharacterType[]{CharacterType.Archer}),
Preemptive_Shot("Preemptive Shot",new CharacterType[]{CharacterType.Archer}),
Resolve("Resolve",new CharacterType[]{CharacterType.Warrior}),
Protect("Protect",new CharacterType[]{CharacterType.Warrior}),
Give_Order("Give Order",new CharacterType[]{CharacterType.Leader}),
Energy_Rush("Energy Rush",new CharacterType[]{CharacterType.Scamp});
First_Aid(R.string.ability_firstaid,new CharacterType[]{CharacterType.Mystic,CharacterType.Archer,CharacterType.Scamp,CharacterType.Leader,CharacterType.Healer,CharacterType.Tinkerer,CharacterType.Warrior}),
Chain_Lightning(R.string.ability_chainlighting,new CharacterType[]{CharacterType.Mystic}),
Mystic_Blast(R.string.ability_mysticblast,new CharacterType[]{CharacterType.Mystic}),
Major_Heal(R.string.ability_majorheal,new CharacterType[]{CharacterType.Healer}),
Feint(R.string.ability_feint,new CharacterType[]{CharacterType.Warrior}),
Battle_Squeak(R.string.ability_battlesqueak,new CharacterType[]{CharacterType.Warrior}),
Battle_Leader(R.string.ability_battleleader,new CharacterType[]{CharacterType.Leader}),
Set_Trap(R.string.ability_settrap,new CharacterType[]{CharacterType.Tinkerer}),
Fortify(R.string.ability_fortify,new CharacterType[]{CharacterType.Healer}),
Cure(R.string.ability_cure,new CharacterType[]{CharacterType.Healer}),
Knife_Strike(R.string.ability_knifestrike,new CharacterType[]{CharacterType.Scamp}),
Find(R.string.ability_find,new CharacterType[]{CharacterType.Scamp}),
Dodge(R.string.ability_dodge,new CharacterType[]{CharacterType.Scamp}),
Thundersqueak(R.string.ability_thundersqueak,new CharacterType[]{CharacterType.Warrior,CharacterType.Tinkerer,CharacterType.Healer}),
Backslash(R.string.ability_backslash,new CharacterType[]{CharacterType.Warrior}),
Mystic_Bolt(R.string.ability_mysticbolt,new CharacterType[]{CharacterType.Mystic}),
Inspire(R.string.ability_inspire,new CharacterType[]{CharacterType.Leader}),
Keen_Eye(R.string.ability_keeneye,new CharacterType[]{CharacterType.Scamp,CharacterType.Archer}),
Meeps(R.string.ability_meeps,new CharacterType[]{CharacterType.Maginos}),
Invisibility(R.string.ability_invisibility,new CharacterType[]{CharacterType.Mystic}),
Accurate_Shot(R.string.ability_accurateshot,new CharacterType[]{CharacterType.Archer}),
Aimed_Shot(R.string.ability_aimedshot,new CharacterType[]{CharacterType.Archer}),
Power_Shot(R.string.ability_powershot,new CharacterType[]{CharacterType.Archer}),
Preemptive_Shot(R.string.ability_prempshot,new CharacterType[]{CharacterType.Archer}),
Resolve(R.string.ability_resolve,new CharacterType[]{CharacterType.Warrior}),
Protect(R.string.ability_protect,new CharacterType[]{CharacterType.Warrior}),
Give_Order(R.string.ability_giveorder,new CharacterType[]{CharacterType.Leader}),
Energy_Rush(R.string.ability_energyrush,new CharacterType[]{CharacterType.Scamp});
private String displayName;
private int displayName;
private CharacterType[] appliesTo;
Abilities(String displayName,CharacterType[] appliesTo) {
Abilities(int displayName,CharacterType[] appliesTo) {
this.displayName = displayName;
this.appliesTo = appliesTo;
}
@@ -64,8 +67,7 @@ public enum Abilities {
return matchingList.toArray(new Abilities[matchingList.size()]);
}
public String displayName() { return displayName; }
public String displayName() { return MiceAndMysticsApplication.getInstance().getString(displayName); }
@Override public String toString() { return displayName; }
public static Abilities valueOfDisplayName(String valuedDisplayName) {return Abilities.valueOf(valuedDisplayName.replace(" ","_"));}
@Override public String toString() { return displayName(); }
}

View File

@@ -1,27 +1,27 @@
package com.eyecreate.miceandmystics.miceandmystics.model.Enums;
import com.eyecreate.miceandmystics.miceandmystics.MiceAndMysticsApplication;
import com.eyecreate.miceandmystics.miceandmystics.R;
public enum Achievement {
Miz_Maggie("Miz Maggie", R.mipmap.mizmaggie),
Vanestras_Brush("Vanestra's Brush",R.mipmap.vanbrush),
King("King",R.mipmap.king),
Cats_Horn_Claw("Cat's Horn Claw",R.mipmap.catclaw), //not sure if it matters this is the claw and not the horn side.
Catnip("Catnip",R.mipmap.catnip);
Miz_Maggie(R.string.ach_name_maggie, R.mipmap.mizmaggie),
Vanestras_Brush(R.string.ach_name_van_brush,R.mipmap.vanbrush),
King(R.string.ach_name_king,R.mipmap.king),
Cats_Horn_Claw(R.string.ach_name_horn_claw,R.mipmap.catclaw), //not sure if it matters this is the claw and not the horn side.
Catnip(R.string.ach_name_catnip,R.mipmap.catnip);
private String displayName;
private int displayName;
private int displayResource;
Achievement(String displayName,int resource) {
Achievement(int displayName,int resource) {
this.displayName = displayName;
this.displayResource = resource;
}
public String displayName() { return displayName; }
public String displayName() { return MiceAndMysticsApplication.getInstance().getString(displayName); }
public int getDisplayResource() { return displayResource; }
@Override public String toString() { return displayName; }
public static Achievement valueOfDisplayName(String valuedDisplayName) {return Achievement.valueOf(valuedDisplayName.replace(" ","_").replace("'",""));}
@Override public String toString() { return displayName(); }
}

View File

@@ -1,16 +1,18 @@
package com.eyecreate.miceandmystics.miceandmystics.model.Enums;
import com.eyecreate.miceandmystics.miceandmystics.MiceAndMysticsApplication;
import com.eyecreate.miceandmystics.miceandmystics.R;
public enum CampaignType {
Sorrow_and_Remembrance("Sorrow and Remembrance");
Sorrow_and_Remembrance(R.string.campaign_name_s_a_r);
private String displayName;
private int displayName;
CampaignType(String name) {
CampaignType(int name) {
this.displayName = name;
}
public String displayName() { return displayName; }
public String displayName() { return MiceAndMysticsApplication.getInstance().getString(displayName); }
@Override public String toString() { return displayName; }
public static CampaignType valueOfDisplayName(String valuedDisplayName) {return CampaignType.valueOf(valuedDisplayName.replace(" ","_"));}
@Override public String toString() { return displayName(); }
}

View File

@@ -1,24 +1,30 @@
package com.eyecreate.miceandmystics.miceandmystics.model.Enums;
import com.eyecreate.miceandmystics.miceandmystics.MiceAndMysticsApplication;
import com.eyecreate.miceandmystics.miceandmystics.R;
public enum CharacterNames {
Collin(new CharacterType[]{CharacterType.Warrior,CharacterType.Leader}, R.mipmap.collin),
Filch(new CharacterType[]{CharacterType.Scamp},R.mipmap.filch),
Lily(new CharacterType[]{CharacterType.Archer},R.mipmap.lily),
Maginos(new CharacterType[]{CharacterType.Mystic,CharacterType.Maginos},R.mipmap.maginos),
Nez(new CharacterType[]{CharacterType.Tinkerer,CharacterType.Warrior},R.mipmap.nez),
Tilda(new CharacterType[]{CharacterType.Healer},R.mipmap.tilda);
Collin(R.string.char_name_collin,new CharacterType[]{CharacterType.Warrior,CharacterType.Leader}, R.mipmap.collin),
Filch(R.string.char_name_filch,new CharacterType[]{CharacterType.Scamp},R.mipmap.filch),
Lily(R.string.char_name_lily,new CharacterType[]{CharacterType.Archer},R.mipmap.lily),
Maginos(R.string.char_name_maginos,new CharacterType[]{CharacterType.Mystic,CharacterType.Maginos},R.mipmap.maginos),
Nez(R.string.char_name_nez,new CharacterType[]{CharacterType.Tinkerer,CharacterType.Warrior},R.mipmap.nez),
Tilda(R.string.char_name_tilda,new CharacterType[]{CharacterType.Healer},R.mipmap.tilda);
private CharacterType[] types;
private int drawableIcon;
private int displayName;
CharacterNames(CharacterType[] types,int drawableIcon) {
CharacterNames(int displayName,CharacterType[] types,int drawableIcon) {
this.displayName = displayName;
this.types = types;
this.drawableIcon = drawableIcon;
}
public CharacterType[] characterTypes() { return types; }
public int getDrawableRes() {return drawableIcon;}
public String displayName() { return MiceAndMysticsApplication.getInstance().getString(displayName); }
@Override public String toString() { return displayName(); }
}

View File

@@ -1,12 +1,25 @@
package com.eyecreate.miceandmystics.miceandmystics.model.Enums;
import com.eyecreate.miceandmystics.miceandmystics.MiceAndMysticsApplication;
import com.eyecreate.miceandmystics.miceandmystics.R;
public enum CharacterType {
Warrior,
Leader,
Mystic,
Scamp,
Tinkerer,
Archer,
Healer,
Maginos
Warrior(R.string.char_type_warrior),
Leader(R.string.char_type_leader),
Mystic(R.string.char_type_mystic),
Scamp(R.string.char_type_scamp),
Tinkerer(R.string.char_type_tinkerer),
Archer(R.string.char_type_archer),
Healer(R.string.char_type_healer),
Maginos(R.string.char_type_maginos);
private int displayName;
CharacterType(int displayName) {
this.displayName = displayName;
}
public String displayName() { return MiceAndMysticsApplication.getInstance().getString(displayName); }
@Override public String toString() { return displayName(); }
}

View File

@@ -33,7 +33,7 @@ public class CampaignDetailsViewHolder extends RecyclerView.ViewHolder implement
public void bindModel(Character character) {
boundCharacter = character;
characterName.setText(character.getCharacterName());
characterName.setText(CharacterNames.valueOf(character.getCharacterName()).displayName());
playerName.setText(character.getControllingPlayer().getPlayerName());
characterIcon.setImageResource(CharacterNames.valueOf(character.getCharacterName()).getDrawableRes());
}

View File

@@ -5,6 +5,7 @@ import android.view.View;
import android.widget.TextView;
import com.eyecreate.miceandmystics.miceandmystics.R;
import com.eyecreate.miceandmystics.miceandmystics.model.Campaign;
import com.eyecreate.miceandmystics.miceandmystics.model.Enums.CampaignType;
public class CampaignHeaderViewHolder extends RecyclerView.ViewHolder {
@@ -18,6 +19,6 @@ public class CampaignHeaderViewHolder extends RecyclerView.ViewHolder {
public void bindModel(Campaign campaign) {
campaignName.setText(campaign.getCampaignName());
campaignType.setText(campaign.getCampaignType());
campaignType.setText(CampaignType.valueOf(campaign.getCampaignType()).displayName());
}
}

View File

@@ -9,6 +9,7 @@ import com.alertdialogpro.AlertDialogPro;
import com.eyecreate.miceandmystics.miceandmystics.R;
import com.eyecreate.miceandmystics.miceandmystics.adapters.CharacterDetailsAdapter;
import com.eyecreate.miceandmystics.miceandmystics.model.Ability;
import com.eyecreate.miceandmystics.miceandmystics.model.Enums.Abilities;
public class CharacterAbilityViewHolder extends RecyclerView.ViewHolder implements View.OnLongClickListener {
@@ -24,7 +25,7 @@ public class CharacterAbilityViewHolder extends RecyclerView.ViewHolder implemen
}
public void bindHolder(Ability ability) {
abilityName.setText(ability.getAbilityName());
abilityName.setText(Abilities.valueOf(ability.getAbilityName()).toString());
uuid = ability.getUuid();
}

View File

@@ -28,8 +28,8 @@ public class PartyAchievementViewHolder extends RecyclerView.ViewHolder implemen
public void bindHolder(Achievement achievement) {
this.boundAchievement = achievement;
achievementName.setText(achievement.getAchievementName());
achievementIcon.setImageResource(com.eyecreate.miceandmystics.miceandmystics.model.Enums.Achievement.valueOfDisplayName(achievement.getAchievementName()).getDisplayResource());
achievementName.setText(com.eyecreate.miceandmystics.miceandmystics.model.Enums.Achievement.valueOf(achievement.getAchievementName()).displayName());
achievementIcon.setImageResource(com.eyecreate.miceandmystics.miceandmystics.model.Enums.Achievement.valueOf(achievement.getAchievementName()).getDisplayResource());
}
@Override

View File

@@ -2,7 +2,64 @@
<string name="app_name">Mice and Mystics Tracker</string>
<string name="title_activity_campaign_details">CampaignDetailsActivity</string>
<string name="hello_world">Hello world!</string>
<string name="action_settings">Settings</string>
<!-- Character Names -->
<string name="char_name_collin">Collin</string>
<string name="char_name_filch">Filch</string>
<string name="char_name_lily">Lily</string>
<string name="char_name_maginos">Maginos</string>
<string name="char_name_nez">Nez</string>
<string name="char_name_tilda">Tilda</string>
<!-- Campaign Types -->
<string name="campaign_name_s_a_r">Sorrow and Remembrance</string>
<!-- Achievements -->
<string name="ach_name_maggie">Miz Maggie</string>
<string name="ach_name_van_brush">Vanestra\'s Brush</string>
<string name="ach_name_king">King</string>
<string name="ach_name_horn_claw">Cat\'s Horn Claw</string>
<string name="ach_name_catnip">Catnip</string>
<!-- Character Types -->
<string name="char_type_warrior">Warrior</string>
<string name="char_type_leader">Leader</string>
<string name="char_type_mystic">Mystic</string>
<string name="char_type_scamp">Scamp</string>
<string name="char_type_tinkerer">Tinkerer</string>
<string name="char_type_archer">Archer</string>
<string name="char_type_healer">Healer</string>
<string name="char_type_maginos">Maginos</string>
<!-- Abilities -->
<string name="ability_firstaid">First Aid</string>
<string name="ability_chainlighting">Chain Lightning</string>
<string name="ability_mysticblast">Mystic Blast</string>
<string name="ability_majorheal">Major Heal</string>
<string name="ability_feint">Feint</string>
<string name="ability_battlesqueak">Battle Squeak</string>
<string name="ability_battleleader">Battle Leader</string>
<string name="ability_settrap">Set Trap</string>
<string name="ability_fortify">Fortify</string>
<string name="ability_cure">Cure</string>
<string name="ability_knifestrike">Knife Strike</string>
<string name="ability_find">Find</string>
<string name="ability_dodge">Dodge</string>
<string name="ability_thundersqueak">Thundersqueak</string>
<string name="ability_backslash">Backslash</string>
<string name="ability_mysticbolt">Mystic Bolt</string>
<string name="ability_inspire">Inspire</string>
<string name="ability_keeneye">Keen Eye</string>
<string name="ability_meeps">Meeps</string>
<string name="ability_invisibility">Invisibility</string>
<string name="ability_accurateshot">Accurate Shot</string>
<string name="ability_aimedshot">Aimed Shot</string>
<string name="ability_powershot">Power Shot</string>
<string name="ability_prempshot">Preemptive Shot</string>
<string name="ability_resolve">Resolve</string>
<string name="ability_protect">Protect</string>
<string name="ability_giveorder">Give Order</string>
<string name="ability_energyrush">Energy Rush</string>
</resources>