commit 1a561321f820d025cee5b3a21f4a0eb9d1249ec9 Author: dtookey Date: Fri Sep 18 11:30:15 2020 -0400 initial commit. core of character is coded out and files are in place. core mechanic of blood mist is working diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..4de99b4 --- /dev/null +++ b/.gitignore @@ -0,0 +1,3 @@ +/target/ +/.idea/ +/hemomancer.iml diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..95566c3 --- /dev/null +++ b/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2019 Gremious + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/README.md b/README.md new file mode 100644 index 0000000..5c1d7a3 --- /dev/null +++ b/README.md @@ -0,0 +1,7 @@ +# Default Mod Base - Quick Start + +This is a cloneable branch of the Default with all comments removed. + +You can use this to quickly start up a brand new mod. + +I assume you know what you are doing. \ No newline at end of file diff --git a/pom.xml b/pom.xml new file mode 100644 index 0000000..4089a57 --- /dev/null +++ b/pom.xml @@ -0,0 +1,112 @@ + + 4.0.0 + + + + xyz.geniuscartel + Hemomancer + Hemomancer Mod + 0.0.1 + A custom bloodmage class. + + + 1.8 + 1.8 + 01-23-2019 + 3.8.0 + + /home/dtookey/.steam/debian-installation/steamapps + + + + + com.megacrit.cardcrawl + slaythespire + ${SlayTheSpire.version} + system + ${Steam.path}/common/SlayTheSpire/desktop-1.0.jar + + + + com.evacipated.cardcrawl + modthespire + ${ModTheSpire.version} + system + ${Steam.path}/workshop/content/646570/1605060445/ModTheSpire.jar + + + + basemod + basemod + 5.0.0 + system + ${Steam.path}/workshop/content/646570/1605833019/BaseMod.jar + + + + com.evacipated.cardcrawl.mod + StSLib + 1.3.2 + system + ${Steam.path}/workshop/content/646570/1609158507/StSLib.jar + + + + + + + + ${project.artifactId} + + + org.apache.maven.plugins + maven-jar-plugin + 2.4 + + + **/*.psd + + + + + org.apache.maven.plugins + maven-antrun-plugin + 1.8 + + + package + + + + + + + + run + + + + + + + + + src/main/resources + + + src/main/resources + false + + ModTheSpire.json + + + + src/main/resources + true + + ModTheSpire.json + + + + + diff --git a/src/main/java/hemomancer/HemomancerMod.java b/src/main/java/hemomancer/HemomancerMod.java new file mode 100644 index 0000000..5089b1d --- /dev/null +++ b/src/main/java/hemomancer/HemomancerMod.java @@ -0,0 +1,375 @@ +package hemomancer; + +import basemod.BaseMod; +import basemod.ModLabeledToggleButton; +import basemod.ModPanel; +import basemod.interfaces.*; +import com.badlogic.gdx.Gdx; +import com.badlogic.gdx.files.FileHandle; +import com.badlogic.gdx.graphics.Color; +import com.badlogic.gdx.graphics.Texture; +import com.badlogic.gdx.utils.compression.lzma.Base; +import com.evacipated.cardcrawl.mod.stslib.Keyword; +import com.evacipated.cardcrawl.modthespire.lib.SpireConfig; +import com.evacipated.cardcrawl.modthespire.lib.SpireInitializer; +import com.google.gson.Gson; +import com.megacrit.cardcrawl.core.Settings; +import com.megacrit.cardcrawl.dungeons.TheCity; +import com.megacrit.cardcrawl.helpers.CardHelper; +import com.megacrit.cardcrawl.helpers.FontHelper; +import com.megacrit.cardcrawl.localization.*; +import com.megacrit.cardcrawl.unlock.UnlockTracker; +import hemomancer.relics.BloodMistRelic; +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; +import hemomancer.cards.*; +import hemomancer.characters.Hemomancer; +import hemomancer.events.IdentityCrisisEvent; +import hemomancer.potions.PlaceholderPotion; +import hemomancer.relics.BottledPlaceholderRelic; +import hemomancer.util.IDCheckDontTouchPls; +import hemomancer.util.TextureLoader; +import hemomancer.variables.DefaultCustomVariable; +import hemomancer.variables.DefaultSecondMagicNumber; + +import java.io.InputStream; +import java.io.InputStreamReader; +import java.nio.charset.StandardCharsets; +import java.util.Properties; + +@SpireInitializer +public class HemomancerMod implements + EditCardsSubscriber, + EditRelicsSubscriber, + EditStringsSubscriber, + EditKeywordsSubscriber, + EditCharactersSubscriber, + PostInitializeSubscriber { + + public static final Logger logger = LogManager.getLogger(HemomancerMod.class.getName()); + private static String modID; + + public static Properties theDefaultDefaultSettings = new Properties(); + public static final String ENABLE_PLACEHOLDER_SETTINGS = "enablePlaceholder"; + public static boolean enablePlaceholder = true; + + private static final String MODNAME = "hemomancer"; + private static final String AUTHOR = "Virgil"; + private static final String DESCRIPTION = "A bloodmage character for Slay the Spire."; + + public static final Color DEFAULT_GRAY = CardHelper.getColor(64.0f, 10.0f, 50.0f); + + public static final Color PLACEHOLDER_POTION_LIQUID = CardHelper.getColor(209.0f, 53.0f, 18.0f); + public static final Color PLACEHOLDER_POTION_HYBRID = CardHelper.getColor(255.0f, 230.0f, 230.0f); + public static final Color PLACEHOLDER_POTION_SPOTS = CardHelper.getColor(100.0f, 25.0f, 10.0f); + + private static final String ATTACK_DEFAULT_GRAY = "hemomancerResources/images/512/bg_attack_default_gray.png"; + private static final String SKILL_DEFAULT_GRAY = "hemomancerResources/images/512/bg_skill_default_gray.png"; + private static final String POWER_DEFAULT_GRAY = "hemomancerResources/images/512/bg_power_default_gray.png"; + + private static final String ENERGY_ORB_DEFAULT_GRAY = "hemomancerResources/images/512/card_default_gray_orb.png"; + private static final String CARD_ENERGY_ORB = "hemomancerResources/images/512/card_small_orb.png"; + + private static final String ATTACK_DEFAULT_GRAY_PORTRAIT = "hemomancerResources/images/1024/bg_attack_default_gray.png"; + private static final String SKILL_DEFAULT_GRAY_PORTRAIT = "hemomancerResources/images/1024/bg_skill_default_gray.png"; + private static final String POWER_DEFAULT_GRAY_PORTRAIT = "hemomancerResources/images/1024/bg_power_default_gray.png"; + private static final String ENERGY_ORB_DEFAULT_GRAY_PORTRAIT = "hemomancerResources/images/1024/card_default_gray_orb.png"; + + private static final String THE_DEFAULT_BUTTON = "hemomancerResources/images/charSelect/DefaultCharacterButton.png"; + private static final String THE_DEFAULT_PORTRAIT = "hemomancerResources/images/charSelect/DefaultCharacterPortraitBG.png"; + public static final String THE_DEFAULT_SHOULDER_1 = "hemomancerResources/images/char/defaultCharacter/shoulder.png"; + public static final String THE_DEFAULT_SHOULDER_2 = "hemomancerResources/images/char/defaultCharacter/shoulder2.png"; + public static final String THE_DEFAULT_CORPSE = "hemomancerResources/images/char/defaultCharacter/corpse.png"; + + public static final String BADGE_IMAGE = "hemomancerResources/images/Badge.png"; + + public static final String THE_DEFAULT_SKELETON_ATLAS = "hemomancerResources/images/char/defaultCharacter/skeleton.atlas"; + public static final String THE_DEFAULT_SKELETON_JSON = "hemomancerResources/images/char/defaultCharacter/skeleton.json"; + + public static String makeCardPath(String resourcePath) { + return getModID() + "Resources/images/cards/" + resourcePath; + } + + public static String makeRelicPath(String resourcePath) { + return getModID() + "Resources/images/relics/" + resourcePath; + } + + public static String makeRelicOutlinePath(String resourcePath) { + return getModID() + "Resources/images/relics/outline/" + resourcePath; + } + + public static String makeOrbPath(String resourcePath) { + return getModID() + "Resources/images/orbs/" + resourcePath; + } + + public static String makePowerPath(String resourcePath) { + return getModID() + "Resources/images/powers/" + resourcePath; + } + + public static String makeEventPath(String resourcePath) { + return getModID() + "Resources/images/events/" + resourcePath; + } + + public HemomancerMod() { + + setModID("hemomancer"); + + + + logger.info("Creating the color " + Hemomancer.Enums.COLOR_GRAY.toString()); + + BaseMod.addColor(Hemomancer.Enums.COLOR_GRAY, DEFAULT_GRAY, DEFAULT_GRAY, DEFAULT_GRAY, + DEFAULT_GRAY, DEFAULT_GRAY, DEFAULT_GRAY, DEFAULT_GRAY, + ATTACK_DEFAULT_GRAY, SKILL_DEFAULT_GRAY, POWER_DEFAULT_GRAY, ENERGY_ORB_DEFAULT_GRAY, + ATTACK_DEFAULT_GRAY_PORTRAIT, SKILL_DEFAULT_GRAY_PORTRAIT, POWER_DEFAULT_GRAY_PORTRAIT, + ENERGY_ORB_DEFAULT_GRAY_PORTRAIT, CARD_ENERGY_ORB); + + logger.info("Done creating the color"); + + + logger.info("Adding mod settings"); + + + theDefaultDefaultSettings.setProperty(ENABLE_PLACEHOLDER_SETTINGS, "FALSE"); + try { + SpireConfig config = new SpireConfig("defaultMod", "theDefaultConfig", theDefaultDefaultSettings); + + config.load(); + enablePlaceholder = config.getBool(ENABLE_PLACEHOLDER_SETTINGS); + } catch (Exception e) { + e.printStackTrace(); + } + logger.info("Done adding mod settings"); + } + + public static void setModID(String ID) { + Gson coolG = new Gson(); + + InputStream in = HemomancerMod.class.getResourceAsStream("/IDCheckStringsDONT-EDIT-AT-ALL.json"); + IDCheckDontTouchPls EXCEPTION_STRINGS = coolG.fromJson(new InputStreamReader(in, StandardCharsets.UTF_8), IDCheckDontTouchPls.class); + logger.info("You are attempting to set your mod ID as: " + ID); + if (ID.equals(EXCEPTION_STRINGS.DEFAULTID)) { + throw new RuntimeException(EXCEPTION_STRINGS.EXCEPTION); + } else if (ID.equals(EXCEPTION_STRINGS.DEVID)) { + modID = EXCEPTION_STRINGS.DEFAULTID; + } else { + modID = ID; + } + logger.info("Success! ID is " + modID); + } + + public static String getModID() { + return modID; + } + + private static void pathCheck() { + Gson coolG = new Gson(); + + InputStream in = HemomancerMod.class.getResourceAsStream("/IDCheckStringsDONT-EDIT-AT-ALL.json"); + IDCheckDontTouchPls EXCEPTION_STRINGS = coolG.fromJson(new InputStreamReader(in, StandardCharsets.UTF_8), IDCheckDontTouchPls.class); + String packageName = HemomancerMod.class.getPackage().getName(); + FileHandle resourcePathExists = Gdx.files.internal(getModID() + "Resources"); + if (!modID.equals(EXCEPTION_STRINGS.DEVID)) { + if (!packageName.equals(getModID())) { + throw new RuntimeException(EXCEPTION_STRINGS.PACKAGE_EXCEPTION + getModID()); + } + if (!resourcePathExists.exists()) { + throw new RuntimeException(EXCEPTION_STRINGS.RESOURCE_FOLDER_EXCEPTION + getModID() + "Resources"); + } + } + } + + @SuppressWarnings("unused") + public static void initialize() { + logger.info("========================= Initializing Default Mod. Hi. ========================="); + BaseMod.subscribe(new HemomancerMod()); + logger.info("========================= /Default Mod Initialized. Hello World./ ========================="); + } + + @Override + public void receiveEditCharacters() { + logger.info("Beginning to edit characters. " + "Add " + Hemomancer.Enums.THE_DEFAULT.toString()); + + BaseMod.addCharacter(new Hemomancer("Hemomancer", Hemomancer.Enums.THE_DEFAULT), + THE_DEFAULT_BUTTON, THE_DEFAULT_PORTRAIT, Hemomancer.Enums.THE_DEFAULT); + + receiveEditPotions(); + logger.info("Added " + Hemomancer.Enums.THE_DEFAULT.toString()); + } + + @Override + public void receivePostInitialize() { + logger.info("Loading badge image and mod options"); + + + Texture badgeTexture = TextureLoader.getTexture(BADGE_IMAGE); + + + ModPanel settingsPanel = new ModPanel(); + + + ModLabeledToggleButton enableNormalsButton = new ModLabeledToggleButton("This is the text which goes next to the checkbox.", + 350.0f, 700.0f, Settings.CREAM_COLOR, FontHelper.charDescFont, + enablePlaceholder, + settingsPanel, + (label) -> { + }, + (button) -> { + + enablePlaceholder = button.enabled; + try { + + SpireConfig config = new SpireConfig("defaultMod", "theDefaultConfig", theDefaultDefaultSettings); + config.setBool(ENABLE_PLACEHOLDER_SETTINGS, enablePlaceholder); + config.save(); + } catch (Exception e) { + e.printStackTrace(); + } + }); + + settingsPanel.addUIElement(enableNormalsButton); + + BaseMod.registerModBadge(badgeTexture, MODNAME, AUTHOR, DESCRIPTION, settingsPanel); + + + BaseMod.addEvent(IdentityCrisisEvent.ID, IdentityCrisisEvent.class, TheCity.ID); + + + logger.info("Done loading badge Image and mod options"); + } + + public void receiveEditPotions() { + logger.info("Beginning to edit potions"); + + + BaseMod.addPotion(PlaceholderPotion.class, PLACEHOLDER_POTION_LIQUID, PLACEHOLDER_POTION_HYBRID, PLACEHOLDER_POTION_SPOTS, PlaceholderPotion.POTION_ID, Hemomancer.Enums.THE_DEFAULT); + + logger.info("Done editing potions"); + } + + @Override + public void receiveEditRelics() { + logger.info("Adding relics"); + + + BaseMod.addRelicToCustomPool(new BloodMistRelic(), Hemomancer.Enums.COLOR_GRAY); + + + + + UnlockTracker.markRelicAsSeen(BottledPlaceholderRelic.ID); + logger.info("Done adding relics!"); + } + + @Override + public void receiveEditCards() { + logger.info("Adding variables"); + + pathCheck(); + + logger.info("Add variabls"); + + BaseMod.addDynamicVariable(new DefaultCustomVariable()); + BaseMod.addDynamicVariable(new DefaultSecondMagicNumber()); + + logger.info("Adding cards"); + + BaseMod.addCard(new HemomancerStrike()); + BaseMod.addCard(new HemomancerBlock()); + BaseMod.addCard(new HemomancerBloodPump()); + BaseMod.addCard(new HemomancerFlay()); + + BaseMod.addCard(new HemomancerPHA1()); + BaseMod.addCard(new HemomancerPHA2()); + BaseMod.addCard(new HemomancerPHA3()); + BaseMod.addCard(new HemomancerPHA4()); + BaseMod.addCard(new HemomancerPHA5()); + + BaseMod.addCard(new HemomancerPHS1()); + BaseMod.addCard(new HemomancerPHS2()); + BaseMod.addCard(new HemomancerPHS3()); + BaseMod.addCard(new HemomancerPHS4()); + BaseMod.addCard(new HemomancerPHS5()); + + BaseMod.addCard(new HemomancerPHP1()); + BaseMod.addCard(new HemomancerPHP2()); + BaseMod.addCard(new HemomancerPHP3()); + + + UnlockTracker.unlockCard(HemomancerStrike.ID); + UnlockTracker.unlockCard(HemomancerBlock.ID); + UnlockTracker.unlockCard(HemomancerBloodPump.ID); + UnlockTracker.unlockCard(HemomancerFlay.ID); + UnlockTracker.unlockCard(HemomancerPHA1.ID); + UnlockTracker.unlockCard(HemomancerPHA2.ID); + UnlockTracker.unlockCard(HemomancerPHA3.ID); + UnlockTracker.unlockCard(HemomancerPHA4.ID); + UnlockTracker.unlockCard(HemomancerPHA5.ID); + UnlockTracker.unlockCard(HemomancerPHS1.ID); + UnlockTracker.unlockCard(HemomancerPHS2.ID); + UnlockTracker.unlockCard(HemomancerPHS3.ID); + UnlockTracker.unlockCard(HemomancerPHS4.ID); + UnlockTracker.unlockCard(HemomancerPHS5.ID); + UnlockTracker.unlockCard(HemomancerPHP1.ID); + UnlockTracker.unlockCard(HemomancerPHP2.ID); + UnlockTracker.unlockCard(HemomancerPHP3.ID); + + + logger.info("Done adding cards!"); + } + + @Override + public void receiveEditStrings() { + logger.info("You seeing this?"); + logger.info("Beginning to edit strings for mod with ID: " + getModID()); + + + BaseMod.loadCustomStringsFile(CardStrings.class, + getModID() + "Resources/localization/eng/HemomancerMod-Card-Strings.json"); + + + BaseMod.loadCustomStringsFile(PowerStrings.class, + getModID() + "Resources/localization/eng/HemomancerMod-Power-Strings.json"); + + + BaseMod.loadCustomStringsFile(RelicStrings.class, + getModID() + "Resources/localization/eng/HemomancerMod-Relic-Strings.json"); + + + BaseMod.loadCustomStringsFile(EventStrings.class, + getModID() + "Resources/localization/eng/HemomancerMod-Event-Strings.json"); + + + BaseMod.loadCustomStringsFile(PotionStrings.class, + getModID() + "Resources/localization/eng/HemomancerMod-Potion-Strings.json"); + + + BaseMod.loadCustomStringsFile(CharacterStrings.class, + getModID() + "Resources/localization/eng/HemomancerMod-Character-Strings.json"); + + + BaseMod.loadCustomStringsFile(OrbStrings.class, + getModID() + "Resources/localization/eng/HemomancerMod-Orb-Strings.json"); + + logger.info("Done edittting strings"); + } + + @Override + public void receiveEditKeywords() { + + + Gson gson = new Gson(); + String json = Gdx.files.internal(getModID() + "Resources/localization/eng/HemomancerMod-Keyword-Strings.json").readString(String.valueOf(StandardCharsets.UTF_8)); + com.evacipated.cardcrawl.mod.stslib.Keyword[] keywords = gson.fromJson(json, com.evacipated.cardcrawl.mod.stslib.Keyword[].class); + + if (keywords != null) { + for (Keyword keyword : keywords) { + BaseMod.addKeyword(getModID().toLowerCase(), keyword.PROPER_NAME, keyword.NAMES, keyword.DESCRIPTION); + } + } + } + + public static String makeID(String idText) { + return getModID() + ":" + idText; + } +} diff --git a/src/main/java/hemomancer/actions/UncommonPowerAction.java b/src/main/java/hemomancer/actions/UncommonPowerAction.java new file mode 100644 index 0000000..e808f3e --- /dev/null +++ b/src/main/java/hemomancer/actions/UncommonPowerAction.java @@ -0,0 +1,59 @@ +package hemomancer.actions; + +import com.megacrit.cardcrawl.actions.AbstractGameAction; +import com.megacrit.cardcrawl.actions.common.ApplyPowerAction; +import com.megacrit.cardcrawl.cards.DamageInfo; +import com.megacrit.cardcrawl.characters.AbstractPlayer; +import com.megacrit.cardcrawl.dungeons.AbstractDungeon; +import com.megacrit.cardcrawl.monsters.AbstractMonster; +import com.megacrit.cardcrawl.relics.ChemicalX; +import com.megacrit.cardcrawl.ui.panels.EnergyPanel; +import hemomancer.powers.CommonPower; + +public class UncommonPowerAction extends AbstractGameAction { + private boolean freeToPlayOnce; + private int magicNumber; + private AbstractPlayer p; + private int energyOnUse; + private boolean upgraded; + + public UncommonPowerAction(final AbstractPlayer p, final AbstractMonster m, + final int magicNumber, final boolean upgraded, + final DamageInfo.DamageType damageTypeForTurn, final boolean freeToPlayOnce, + final int energyOnUse) { + this.freeToPlayOnce = false; + this.p = p; + this.magicNumber = magicNumber; + this.freeToPlayOnce = freeToPlayOnce; + actionType = ActionType.SPECIAL; + this.energyOnUse = energyOnUse; + this.upgraded = upgraded; + } + + @Override + public void update() { + int effect = EnergyPanel.totalCount; + if (energyOnUse != -1) { + effect = energyOnUse; + } + if (p.hasRelic(ChemicalX.ID)) { + effect += 2; + p.getRelic(ChemicalX.ID).flash(); + } + if (upgraded) { + ++effect; + } + if (effect > 0) { + for (int i = 0; i < effect; ++i) { + + AbstractDungeon.actionManager.addToBottom(new ApplyPowerAction(p, p, + new CommonPower(p, p, magicNumber), magicNumber, + AttackEffect.BLUNT_LIGHT)); + } + if (!freeToPlayOnce) { + p.energy.use(EnergyPanel.totalCount); + } + } + isDone = true; + } +} diff --git a/src/main/java/hemomancer/cards/AbstractDynamicCard.java b/src/main/java/hemomancer/cards/AbstractDynamicCard.java new file mode 100644 index 0000000..ca82cd5 --- /dev/null +++ b/src/main/java/hemomancer/cards/AbstractDynamicCard.java @@ -0,0 +1,17 @@ +package hemomancer.cards; + +import static com.megacrit.cardcrawl.core.CardCrawlGame.languagePack; + +public abstract class AbstractDynamicCard extends AbstractHemomancerCard { + + public AbstractDynamicCard(final String id, + final String img, + final int cost, + final CardType type, + final CardColor color, + final CardRarity rarity, + final CardTarget target) { + + super(id, languagePack.getCardStrings(id).NAME, img, cost, languagePack.getCardStrings(id).DESCRIPTION, type, color, rarity, target); + } +} \ No newline at end of file diff --git a/src/main/java/hemomancer/cards/AbstractHemomancerCard.java b/src/main/java/hemomancer/cards/AbstractHemomancerCard.java new file mode 100644 index 0000000..adbac4d --- /dev/null +++ b/src/main/java/hemomancer/cards/AbstractHemomancerCard.java @@ -0,0 +1,44 @@ +package hemomancer.cards; + +import basemod.abstracts.CustomCard; + +public abstract class AbstractHemomancerCard extends CustomCard { + + public int defaultSecondMagicNumber; + public int defaultBaseSecondMagicNumber; + public boolean upgradedDefaultSecondMagicNumber; + public boolean isDefaultSecondMagicNumberModified; + + public AbstractHemomancerCard(final String id, + final String name, + final String img, + final int cost, + final String rawDescription, + final CardType type, + final CardColor color, + final CardRarity rarity, + final CardTarget target) { + + super(id, name, img, cost, rawDescription, type, color, rarity, target); + isCostModified = false; + isCostModifiedForTurn = false; + isDamageModified = false; + isBlockModified = false; + isMagicNumberModified = false; + isDefaultSecondMagicNumberModified = false; + } + + public void displayUpgrades() { + super.displayUpgrades(); + if (upgradedDefaultSecondMagicNumber) { + defaultSecondMagicNumber = defaultBaseSecondMagicNumber; + isDefaultSecondMagicNumberModified = true; + } + } + + public void upgradeDefaultSecondMagicNumber(int amount) { + defaultBaseSecondMagicNumber += amount; + defaultSecondMagicNumber = defaultBaseSecondMagicNumber; + upgradedDefaultSecondMagicNumber = true; + } +} \ No newline at end of file diff --git a/src/main/java/hemomancer/cards/CardTemplate.java b/src/main/java/hemomancer/cards/CardTemplate.java new file mode 100644 index 0000000..2e07298 --- /dev/null +++ b/src/main/java/hemomancer/cards/CardTemplate.java @@ -0,0 +1,50 @@ +package hemomancer.cards; + +import com.megacrit.cardcrawl.actions.AbstractGameAction; +import com.megacrit.cardcrawl.actions.common.DamageAction; +import com.megacrit.cardcrawl.cards.DamageInfo; +import com.megacrit.cardcrawl.characters.AbstractPlayer; +import com.megacrit.cardcrawl.dungeons.AbstractDungeon; +import com.megacrit.cardcrawl.monsters.AbstractMonster; +import hemomancer.HemomancerMod; +import hemomancer.characters.Hemomancer; + +import static hemomancer.HemomancerMod.makeCardPath; + +public class CardTemplate extends AbstractDynamicCard { + + public static final String ID = HemomancerMod.makeID("DefaultCommonAttack"); + public static final String IMG = makeCardPath("Attack.png"); + + private static final CardRarity RARITY = CardRarity.COMMON; + private static final CardTarget TARGET = CardTarget.ENEMY; + private static final CardType TYPE = CardType.ATTACK; + public static final CardColor COLOR = Hemomancer.Enums.COLOR_GRAY; + + private static final int COST = 1; + private static final int UPGRADED_COST = 0; + + private static final int DAMAGE = 7; + private static final int UPGRADE_PLUS_DMG = 2; + + public CardTemplate() { + super(ID, IMG, COST, TYPE, COLOR, RARITY, TARGET); + baseDamage = DAMAGE; + } + + @Override + public void use(AbstractPlayer p, AbstractMonster m) { + AbstractDungeon.actionManager.addToBottom( + new DamageAction(m, new DamageInfo(p, damage, damageTypeForTurn), AbstractGameAction.AttackEffect.SLASH_HORIZONTAL)); + } + + @Override + public void upgrade() { + if (!upgraded) { + upgradeName(); + upgradeDamage(UPGRADE_PLUS_DMG); + upgradeBaseCost(UPGRADED_COST); + initializeDescription(); + } + } +} diff --git a/src/main/java/hemomancer/cards/HemomancerAttackWithVariable.java b/src/main/java/hemomancer/cards/HemomancerAttackWithVariable.java new file mode 100644 index 0000000..1872f9f --- /dev/null +++ b/src/main/java/hemomancer/cards/HemomancerAttackWithVariable.java @@ -0,0 +1,55 @@ +package hemomancer.cards; + +import com.megacrit.cardcrawl.actions.AbstractGameAction; +import com.megacrit.cardcrawl.actions.common.DamageAction; +import com.megacrit.cardcrawl.cards.DamageInfo; +import com.megacrit.cardcrawl.characters.AbstractPlayer; +import com.megacrit.cardcrawl.dungeons.AbstractDungeon; +import com.megacrit.cardcrawl.monsters.AbstractMonster; +import com.megacrit.cardcrawl.ui.panels.EnergyPanel; +import hemomancer.HemomancerMod; +import hemomancer.characters.Hemomancer; + +import static hemomancer.HemomancerMod.makeCardPath; + +public class HemomancerAttackWithVariable extends AbstractDynamicCard { + + public static final String ID = HemomancerMod.makeID(HemomancerAttackWithVariable.class.getSimpleName()); + public static final String IMG = makeCardPath("Attack.png"); + + private static final CardRarity RARITY = CardRarity.COMMON; + private static final CardTarget TARGET = CardTarget.ENEMY; + private static final CardType TYPE = CardType.ATTACK; + public static final CardColor COLOR = Hemomancer.Enums.COLOR_GRAY; + + private static final int COST = 1; + private static final int DAMAGE = 7; + private static final int UPGRADE_PLUS_DMG = 1; + + public int specialDamage; + + public HemomancerAttackWithVariable() { + super(ID, IMG, COST, TYPE, COLOR, RARITY, TARGET); + baseDamage = DAMAGE; + isMultiDamage = true; + } + + @Override + public void use(AbstractPlayer p, AbstractMonster m) { + int effect = EnergyPanel.totalCount; + for (int i = 0; i < effect; i++) { + AbstractDungeon.actionManager.addToBottom( + new DamageAction(m, new DamageInfo(p, damage, damageTypeForTurn), + AbstractGameAction.AttackEffect.FIRE)); + } + } + + @Override + public void upgrade() { + if (!upgraded) { + upgradeName(); + upgradeDamage(UPGRADE_PLUS_DMG); + initializeDescription(); + } + } +} \ No newline at end of file diff --git a/src/main/java/hemomancer/cards/HemomancerBlock.java b/src/main/java/hemomancer/cards/HemomancerBlock.java new file mode 100644 index 0000000..c78a8a7 --- /dev/null +++ b/src/main/java/hemomancer/cards/HemomancerBlock.java @@ -0,0 +1,46 @@ +package hemomancer.cards; + +import basemod.helpers.BaseModCardTags; +import com.megacrit.cardcrawl.actions.common.GainBlockAction; +import com.megacrit.cardcrawl.characters.AbstractPlayer; +import com.megacrit.cardcrawl.dungeons.AbstractDungeon; +import com.megacrit.cardcrawl.monsters.AbstractMonster; +import hemomancer.HemomancerMod; +import hemomancer.characters.Hemomancer; + +import static hemomancer.HemomancerMod.makeCardPath; + +public class HemomancerBlock extends AbstractDynamicCard { + + public static final String ID = HemomancerMod.makeID(HemomancerBlock.class.getSimpleName()); + public static final String IMG = makeCardPath("blood_block.png"); + + private static final CardRarity RARITY = CardRarity.BASIC; + private static final CardTarget TARGET = CardTarget.SELF; + private static final CardType TYPE = CardType.SKILL; + public static final CardColor COLOR = Hemomancer.Enums.COLOR_GRAY; + + private static final int COST = 1; + private static final int BLOCK = 5; + private static final int UPGRADE_PLUS_BLOCK = 3; + + public HemomancerBlock() { + super(ID, IMG, COST, TYPE, COLOR, RARITY, TARGET); + baseBlock = BLOCK; + this.tags.add(BaseModCardTags.BASIC_DEFEND); + } + + @Override + public void use(AbstractPlayer p, AbstractMonster m) { + AbstractDungeon.actionManager.addToBottom(new GainBlockAction(p, p, block)); + } + + @Override + public void upgrade() { + if (!upgraded) { + upgradeName(); + upgradeBlock(UPGRADE_PLUS_BLOCK); + initializeDescription(); + } + } +} diff --git a/src/main/java/hemomancer/cards/HemomancerBloodPump.java b/src/main/java/hemomancer/cards/HemomancerBloodPump.java new file mode 100644 index 0000000..a3650d9 --- /dev/null +++ b/src/main/java/hemomancer/cards/HemomancerBloodPump.java @@ -0,0 +1,45 @@ +package hemomancer.cards; + +import com.megacrit.cardcrawl.characters.AbstractPlayer; +import com.megacrit.cardcrawl.core.CardCrawlGame; +import com.megacrit.cardcrawl.localization.CardStrings; +import com.megacrit.cardcrawl.monsters.AbstractMonster; +import hemomancer.HemomancerMod; +import hemomancer.characters.Hemomancer; +import hemomancer.orbs.BloodMistOrb; + + +public class HemomancerBloodPump extends AbstractDynamicCard { + public static final String ID = HemomancerMod.makeID("BloodPump"); + private static final CardStrings cardStrings = CardCrawlGame.languagePack.getCardStrings(ID); + + + private int pumpValue = 1; + + public HemomancerBloodPump() { + super( + ID, + HemomancerMod.makeCardPath("blood_pump.png"), + 1, + CardType.SKILL, + Hemomancer.Enums.COLOR_GRAY, + CardRarity.BASIC, + CardTarget.SELF + ); + } + + @Override + public void upgrade() { + if (!this.upgraded) { + this.upgradeName(); + this.rawDescription = cardStrings.UPGRADE_DESCRIPTION; + pumpValue = 2; + } + } + + @Override + public void use(AbstractPlayer player, AbstractMonster monster) { + BloodMistOrb orb = BloodMistOrb.getBloodMistOrb(player); + orb.pump(pumpValue); + } +} diff --git a/src/main/java/hemomancer/cards/HemomancerCommonPower.java b/src/main/java/hemomancer/cards/HemomancerCommonPower.java new file mode 100644 index 0000000..9c131ec --- /dev/null +++ b/src/main/java/hemomancer/cards/HemomancerCommonPower.java @@ -0,0 +1,52 @@ +package hemomancer.cards; + +import com.megacrit.cardcrawl.actions.common.ApplyPowerAction; +import com.megacrit.cardcrawl.characters.AbstractPlayer; +import com.megacrit.cardcrawl.core.CardCrawlGame; +import com.megacrit.cardcrawl.dungeons.AbstractDungeon; +import com.megacrit.cardcrawl.localization.CardStrings; +import com.megacrit.cardcrawl.monsters.AbstractMonster; +import hemomancer.HemomancerMod; +import hemomancer.characters.Hemomancer; +import hemomancer.powers.CommonPower; + +import static hemomancer.HemomancerMod.makeCardPath; + +public class HemomancerCommonPower extends AbstractDynamicCard { + + public static final String ID = HemomancerMod.makeID(HemomancerCommonPower.class.getSimpleName()); + public static final String IMG = makeCardPath("Power.png"); + + private static final CardStrings cardStrings = CardCrawlGame.languagePack.getCardStrings(ID); + public static final String UPGRADE_DESCRIPTION = cardStrings.UPGRADE_DESCRIPTION; + + private static final CardRarity RARITY = CardRarity.COMMON; + private static final CardTarget TARGET = CardTarget.SELF; + private static final CardType TYPE = CardType.POWER; + public static final CardColor COLOR = Hemomancer.Enums.COLOR_GRAY; + + private static final int COST = 1; + private static final int MAGIC = 1; + private static final int UPGRADE_MAGIC = 1; + + public HemomancerCommonPower() { + super(ID, IMG, COST, TYPE, COLOR, RARITY, TARGET); + magicNumber = baseMagicNumber = MAGIC; + } + + @Override + public void use(AbstractPlayer p, AbstractMonster m) { + AbstractDungeon.actionManager.addToBottom(new ApplyPowerAction(p, p, + new CommonPower(p, p, magicNumber), magicNumber)); + } + + @Override + public void upgrade() { + if (!upgraded) { + upgradeName(); + upgradeMagicNumber(UPGRADE_MAGIC); + rawDescription = UPGRADE_DESCRIPTION; + initializeDescription(); + } + } +} \ No newline at end of file diff --git a/src/main/java/hemomancer/cards/HemomancerFlay.java b/src/main/java/hemomancer/cards/HemomancerFlay.java new file mode 100644 index 0000000..5e0bfe0 --- /dev/null +++ b/src/main/java/hemomancer/cards/HemomancerFlay.java @@ -0,0 +1,66 @@ +package hemomancer.cards; + +import basemod.abstracts.CustomCard; +import basemod.helpers.BaseModCardTags; +import com.megacrit.cardcrawl.actions.AbstractGameAction; +import com.megacrit.cardcrawl.actions.common.DamageAction; +import com.megacrit.cardcrawl.cards.DamageInfo; +import com.megacrit.cardcrawl.characters.AbstractPlayer; +import com.megacrit.cardcrawl.core.CardCrawlGame; +import com.megacrit.cardcrawl.dungeons.AbstractDungeon; +import com.megacrit.cardcrawl.localization.CardStrings; +import com.megacrit.cardcrawl.monsters.AbstractMonster; +import hemomancer.HemomancerMod; +import hemomancer.characters.Hemomancer; +import hemomancer.orbs.BloodMistOrb; + +import static hemomancer.HemomancerMod.makeCardPath; + +public class HemomancerFlay extends CustomCard { + + public static final String ID = HemomancerMod.makeID(HemomancerFlay.class.getSimpleName()); + private static final CardStrings cardStrings = CardCrawlGame.languagePack.getCardStrings(ID); + + public static final String IMG = makeCardPath("blood_flay.png"); + + public static final String NAME = cardStrings.NAME; + public static final String DESCRIPTION = cardStrings.DESCRIPTION; + + private static final CardRarity RARITY = CardRarity.BASIC; + private static final CardTarget TARGET = CardTarget.ENEMY; + private static final CardType TYPE = CardType.ATTACK; + public static final CardColor COLOR = Hemomancer.Enums.COLOR_GRAY; + + private static final int COST = 1; + private static final int DAMAGE = 10; + private static final int UPGRADE_PLUS_DMG = 4; + + private static final int maxHPDecrease = 5; + + public HemomancerFlay(){ + super(ID, NAME, IMG, COST, DESCRIPTION, TYPE, COLOR, RARITY, TARGET); + baseDamage = DAMAGE; + } + + @Override + public void upgrade() { + if (!upgraded) { + upgradeName(); + upgradeDamage(UPGRADE_PLUS_DMG); + initializeDescription(); + } + } + + @Override + public void use(AbstractPlayer p, AbstractMonster m) { + AbstractDungeon.actionManager.addToBottom( + new DamageAction(m, new DamageInfo(p, damage, damageTypeForTurn), + AbstractGameAction.AttackEffect.SLASH_HORIZONTAL)); + BloodMistOrb orb = BloodMistOrb.getBloodMistOrb(p); + if(orb == null){ + p.decreaseMaxHealth(maxHPDecrease); + }else{ + orb.consume(p, maxHPDecrease); + } + } +} diff --git a/src/main/java/hemomancer/cards/HemomancerPHA1.java b/src/main/java/hemomancer/cards/HemomancerPHA1.java new file mode 100644 index 0000000..a0437a8 --- /dev/null +++ b/src/main/java/hemomancer/cards/HemomancerPHA1.java @@ -0,0 +1,59 @@ +package hemomancer.cards; + +import basemod.abstracts.CustomCard; +import basemod.helpers.BaseModCardTags; +import com.megacrit.cardcrawl.actions.AbstractGameAction; +import com.megacrit.cardcrawl.actions.common.DamageAction; +import com.megacrit.cardcrawl.cards.DamageInfo; +import com.megacrit.cardcrawl.characters.AbstractPlayer; +import com.megacrit.cardcrawl.core.CardCrawlGame; +import com.megacrit.cardcrawl.dungeons.AbstractDungeon; +import com.megacrit.cardcrawl.localization.CardStrings; +import com.megacrit.cardcrawl.monsters.AbstractMonster; +import hemomancer.HemomancerMod; +import hemomancer.characters.Hemomancer; + +import static hemomancer.HemomancerMod.makeCardPath; + +public class HemomancerPHA1 extends CustomCard { + + public static final String ID = HemomancerMod.makeID(HemomancerPHA1.class.getSimpleName()); + private static final CardStrings cardStrings = CardCrawlGame.languagePack.getCardStrings(ID); + + public static final String IMG = makeCardPath("blood_attack.png"); + + public static final String NAME = cardStrings.NAME; + public static final String DESCRIPTION = cardStrings.DESCRIPTION; + + private static final CardRarity RARITY = CardRarity.UNCOMMON; + private static final CardTarget TARGET = CardTarget.ENEMY; + private static final CardType TYPE = CardType.ATTACK; + public static final CardColor COLOR = Hemomancer.Enums.COLOR_GRAY; + + private static final int COST = 1; + private static final int DAMAGE = 6; + private static final int UPGRADE_PLUS_DMG = 3; + + public HemomancerPHA1() { + super(ID, NAME, IMG, COST, DESCRIPTION, TYPE, COLOR, RARITY, TARGET); + baseDamage = DAMAGE; + this.tags.add(BaseModCardTags.BASIC_STRIKE); + this.tags.add(CardTags.STRIKE); + } + + @Override + public void use(AbstractPlayer p, AbstractMonster m) { + AbstractDungeon.actionManager.addToBottom( + new DamageAction(m, new DamageInfo(p, damage, damageTypeForTurn), + AbstractGameAction.AttackEffect.SLASH_HORIZONTAL)); + } + + @Override + public void upgrade() { + if (!upgraded) { + upgradeName(); + upgradeDamage(UPGRADE_PLUS_DMG); + initializeDescription(); + } + } +} diff --git a/src/main/java/hemomancer/cards/HemomancerPHA2.java b/src/main/java/hemomancer/cards/HemomancerPHA2.java new file mode 100644 index 0000000..f5bbc98 --- /dev/null +++ b/src/main/java/hemomancer/cards/HemomancerPHA2.java @@ -0,0 +1,59 @@ +package hemomancer.cards; + +import basemod.abstracts.CustomCard; +import basemod.helpers.BaseModCardTags; +import com.megacrit.cardcrawl.actions.AbstractGameAction; +import com.megacrit.cardcrawl.actions.common.DamageAction; +import com.megacrit.cardcrawl.cards.DamageInfo; +import com.megacrit.cardcrawl.characters.AbstractPlayer; +import com.megacrit.cardcrawl.core.CardCrawlGame; +import com.megacrit.cardcrawl.dungeons.AbstractDungeon; +import com.megacrit.cardcrawl.localization.CardStrings; +import com.megacrit.cardcrawl.monsters.AbstractMonster; +import hemomancer.HemomancerMod; +import hemomancer.characters.Hemomancer; + +import static hemomancer.HemomancerMod.makeCardPath; + +public class HemomancerPHA2 extends CustomCard { + + public static final String ID = HemomancerMod.makeID(HemomancerPHA2.class.getSimpleName()); + private static final CardStrings cardStrings = CardCrawlGame.languagePack.getCardStrings(ID); + + public static final String IMG = makeCardPath("blood_attack.png"); + + public static final String NAME = cardStrings.NAME; + public static final String DESCRIPTION = cardStrings.DESCRIPTION; + + private static final CardRarity RARITY = CardRarity.COMMON; + private static final CardTarget TARGET = CardTarget.ENEMY; + private static final CardType TYPE = CardType.ATTACK; + public static final CardColor COLOR = Hemomancer.Enums.COLOR_GRAY; + + private static final int COST = 1; + private static final int DAMAGE = 6; + private static final int UPGRADE_PLUS_DMG = 3; + + public HemomancerPHA2() { + super(ID, NAME, IMG, COST, DESCRIPTION, TYPE, COLOR, RARITY, TARGET); + baseDamage = DAMAGE; + this.tags.add(BaseModCardTags.BASIC_STRIKE); + this.tags.add(CardTags.STRIKE); + } + + @Override + public void use(AbstractPlayer p, AbstractMonster m) { + AbstractDungeon.actionManager.addToBottom( + new DamageAction(m, new DamageInfo(p, damage, damageTypeForTurn), + AbstractGameAction.AttackEffect.SLASH_HORIZONTAL)); + } + + @Override + public void upgrade() { + if (!upgraded) { + upgradeName(); + upgradeDamage(UPGRADE_PLUS_DMG); + initializeDescription(); + } + } +} diff --git a/src/main/java/hemomancer/cards/HemomancerPHA3.java b/src/main/java/hemomancer/cards/HemomancerPHA3.java new file mode 100644 index 0000000..eb6615d --- /dev/null +++ b/src/main/java/hemomancer/cards/HemomancerPHA3.java @@ -0,0 +1,59 @@ +package hemomancer.cards; + +import basemod.abstracts.CustomCard; +import basemod.helpers.BaseModCardTags; +import com.megacrit.cardcrawl.actions.AbstractGameAction; +import com.megacrit.cardcrawl.actions.common.DamageAction; +import com.megacrit.cardcrawl.cards.DamageInfo; +import com.megacrit.cardcrawl.characters.AbstractPlayer; +import com.megacrit.cardcrawl.core.CardCrawlGame; +import com.megacrit.cardcrawl.dungeons.AbstractDungeon; +import com.megacrit.cardcrawl.localization.CardStrings; +import com.megacrit.cardcrawl.monsters.AbstractMonster; +import hemomancer.HemomancerMod; +import hemomancer.characters.Hemomancer; + +import static hemomancer.HemomancerMod.makeCardPath; + +public class HemomancerPHA3 extends CustomCard { + + public static final String ID = HemomancerMod.makeID(HemomancerPHA3.class.getSimpleName()); + private static final CardStrings cardStrings = CardCrawlGame.languagePack.getCardStrings(ID); + + public static final String IMG = makeCardPath("blood_attack.png"); + + public static final String NAME = cardStrings.NAME; + public static final String DESCRIPTION = cardStrings.DESCRIPTION; + + private static final CardRarity RARITY = CardRarity.COMMON; + private static final CardTarget TARGET = CardTarget.ENEMY; + private static final CardType TYPE = CardType.ATTACK; + public static final CardColor COLOR = Hemomancer.Enums.COLOR_GRAY; + + private static final int COST = 1; + private static final int DAMAGE = 6; + private static final int UPGRADE_PLUS_DMG = 3; + + public HemomancerPHA3() { + super(ID, NAME, IMG, COST, DESCRIPTION, TYPE, COLOR, RARITY, TARGET); + baseDamage = DAMAGE; + this.tags.add(BaseModCardTags.BASIC_STRIKE); + this.tags.add(CardTags.STRIKE); + } + + @Override + public void use(AbstractPlayer p, AbstractMonster m) { + AbstractDungeon.actionManager.addToBottom( + new DamageAction(m, new DamageInfo(p, damage, damageTypeForTurn), + AbstractGameAction.AttackEffect.SLASH_HORIZONTAL)); + } + + @Override + public void upgrade() { + if (!upgraded) { + upgradeName(); + upgradeDamage(UPGRADE_PLUS_DMG); + initializeDescription(); + } + } +} diff --git a/src/main/java/hemomancer/cards/HemomancerPHA4.java b/src/main/java/hemomancer/cards/HemomancerPHA4.java new file mode 100644 index 0000000..036ba6a --- /dev/null +++ b/src/main/java/hemomancer/cards/HemomancerPHA4.java @@ -0,0 +1,59 @@ +package hemomancer.cards; + +import basemod.abstracts.CustomCard; +import basemod.helpers.BaseModCardTags; +import com.megacrit.cardcrawl.actions.AbstractGameAction; +import com.megacrit.cardcrawl.actions.common.DamageAction; +import com.megacrit.cardcrawl.cards.DamageInfo; +import com.megacrit.cardcrawl.characters.AbstractPlayer; +import com.megacrit.cardcrawl.core.CardCrawlGame; +import com.megacrit.cardcrawl.dungeons.AbstractDungeon; +import com.megacrit.cardcrawl.localization.CardStrings; +import com.megacrit.cardcrawl.monsters.AbstractMonster; +import hemomancer.HemomancerMod; +import hemomancer.characters.Hemomancer; + +import static hemomancer.HemomancerMod.makeCardPath; + +public class HemomancerPHA4 extends CustomCard { + + public static final String ID = HemomancerMod.makeID(HemomancerPHA4.class.getSimpleName()); + private static final CardStrings cardStrings = CardCrawlGame.languagePack.getCardStrings(ID); + + public static final String IMG = makeCardPath("blood_attack.png"); + + public static final String NAME = cardStrings.NAME; + public static final String DESCRIPTION = cardStrings.DESCRIPTION; + + private static final CardRarity RARITY = CardRarity.UNCOMMON; + private static final CardTarget TARGET = CardTarget.ENEMY; + private static final CardType TYPE = CardType.ATTACK; + public static final CardColor COLOR = Hemomancer.Enums.COLOR_GRAY; + + private static final int COST = 1; + private static final int DAMAGE = 6; + private static final int UPGRADE_PLUS_DMG = 3; + + public HemomancerPHA4() { + super(ID, NAME, IMG, COST, DESCRIPTION, TYPE, COLOR, RARITY, TARGET); + baseDamage = DAMAGE; + this.tags.add(BaseModCardTags.BASIC_STRIKE); + this.tags.add(CardTags.STRIKE); + } + + @Override + public void use(AbstractPlayer p, AbstractMonster m) { + AbstractDungeon.actionManager.addToBottom( + new DamageAction(m, new DamageInfo(p, damage, damageTypeForTurn), + AbstractGameAction.AttackEffect.SLASH_HORIZONTAL)); + } + + @Override + public void upgrade() { + if (!upgraded) { + upgradeName(); + upgradeDamage(UPGRADE_PLUS_DMG); + initializeDescription(); + } + } +} diff --git a/src/main/java/hemomancer/cards/HemomancerPHA5.java b/src/main/java/hemomancer/cards/HemomancerPHA5.java new file mode 100644 index 0000000..877f415 --- /dev/null +++ b/src/main/java/hemomancer/cards/HemomancerPHA5.java @@ -0,0 +1,59 @@ +package hemomancer.cards; + +import basemod.abstracts.CustomCard; +import basemod.helpers.BaseModCardTags; +import com.megacrit.cardcrawl.actions.AbstractGameAction; +import com.megacrit.cardcrawl.actions.common.DamageAction; +import com.megacrit.cardcrawl.cards.DamageInfo; +import com.megacrit.cardcrawl.characters.AbstractPlayer; +import com.megacrit.cardcrawl.core.CardCrawlGame; +import com.megacrit.cardcrawl.dungeons.AbstractDungeon; +import com.megacrit.cardcrawl.localization.CardStrings; +import com.megacrit.cardcrawl.monsters.AbstractMonster; +import hemomancer.HemomancerMod; +import hemomancer.characters.Hemomancer; + +import static hemomancer.HemomancerMod.makeCardPath; + +public class HemomancerPHA5 extends CustomCard { + + public static final String ID = HemomancerMod.makeID(HemomancerPHA5.class.getSimpleName()); + private static final CardStrings cardStrings = CardCrawlGame.languagePack.getCardStrings(ID); + + public static final String IMG = makeCardPath("blood_attack.png"); + + public static final String NAME = cardStrings.NAME; + public static final String DESCRIPTION = cardStrings.DESCRIPTION; + + private static final CardRarity RARITY = CardRarity.RARE; + private static final CardTarget TARGET = CardTarget.ENEMY; + private static final CardType TYPE = CardType.ATTACK; + public static final CardColor COLOR = Hemomancer.Enums.COLOR_GRAY; + + private static final int COST = 1; + private static final int DAMAGE = 6; + private static final int UPGRADE_PLUS_DMG = 3; + + public HemomancerPHA5() { + super(ID, NAME, IMG, COST, DESCRIPTION, TYPE, COLOR, RARITY, TARGET); + baseDamage = DAMAGE; + this.tags.add(BaseModCardTags.BASIC_STRIKE); + this.tags.add(CardTags.STRIKE); + } + + @Override + public void use(AbstractPlayer p, AbstractMonster m) { + AbstractDungeon.actionManager.addToBottom( + new DamageAction(m, new DamageInfo(p, damage, damageTypeForTurn), + AbstractGameAction.AttackEffect.SLASH_HORIZONTAL)); + } + + @Override + public void upgrade() { + if (!upgraded) { + upgradeName(); + upgradeDamage(UPGRADE_PLUS_DMG); + initializeDescription(); + } + } +} diff --git a/src/main/java/hemomancer/cards/HemomancerPHP1.java b/src/main/java/hemomancer/cards/HemomancerPHP1.java new file mode 100644 index 0000000..a4bfdca --- /dev/null +++ b/src/main/java/hemomancer/cards/HemomancerPHP1.java @@ -0,0 +1,49 @@ +package hemomancer.cards; + +import basemod.helpers.BaseModCardTags; +import com.megacrit.cardcrawl.actions.common.ApplyPowerAction; +import com.megacrit.cardcrawl.characters.AbstractPlayer; +import com.megacrit.cardcrawl.dungeons.AbstractDungeon; +import com.megacrit.cardcrawl.monsters.AbstractMonster; +import hemomancer.HemomancerMod; +import hemomancer.characters.Hemomancer; +import hemomancer.powers.RarePower; + +import static hemomancer.HemomancerMod.makeCardPath; + +public class HemomancerPHP1 extends AbstractDynamicCard { + + public static final String ID = HemomancerMod.makeID(HemomancerPHP1.class.getSimpleName()); + public static final String IMG = makeCardPath("Power.png"); + + private static final CardRarity RARITY = CardRarity.UNCOMMON; + private static final CardTarget TARGET = CardTarget.SELF; + private static final CardType TYPE = CardType.POWER; + public static final CardColor COLOR = Hemomancer.Enums.COLOR_GRAY; + + private static final int COST = 3; + private static final int UPGRADE_COST = 2; + + private static final int MAGIC = 1; + + public HemomancerPHP1() { + super(ID, IMG, COST, TYPE, COLOR, RARITY, TARGET); + magicNumber = baseMagicNumber = MAGIC; + tags.add(BaseModCardTags.FORM); + } + + @Override + public void use(AbstractPlayer p, AbstractMonster m) { + AbstractDungeon.actionManager.addToBottom( + new ApplyPowerAction(p, p, new RarePower(p, p, magicNumber), magicNumber)); + } + + @Override + public void upgrade() { + if (!upgraded) { + upgradeName(); + upgradeBaseCost(UPGRADE_COST); + initializeDescription(); + } + } +} diff --git a/src/main/java/hemomancer/cards/HemomancerPHP2.java b/src/main/java/hemomancer/cards/HemomancerPHP2.java new file mode 100644 index 0000000..6dc7a4c --- /dev/null +++ b/src/main/java/hemomancer/cards/HemomancerPHP2.java @@ -0,0 +1,49 @@ +package hemomancer.cards; + +import basemod.helpers.BaseModCardTags; +import com.megacrit.cardcrawl.actions.common.ApplyPowerAction; +import com.megacrit.cardcrawl.characters.AbstractPlayer; +import com.megacrit.cardcrawl.dungeons.AbstractDungeon; +import com.megacrit.cardcrawl.monsters.AbstractMonster; +import hemomancer.HemomancerMod; +import hemomancer.characters.Hemomancer; +import hemomancer.powers.RarePower; + +import static hemomancer.HemomancerMod.makeCardPath; + +public class HemomancerPHP2 extends AbstractDynamicCard { + + public static final String ID = HemomancerMod.makeID(HemomancerPHP2.class.getSimpleName()); + public static final String IMG = makeCardPath("Power.png"); + + private static final CardRarity RARITY = CardRarity.UNCOMMON; + private static final CardTarget TARGET = CardTarget.SELF; + private static final CardType TYPE = CardType.POWER; + public static final CardColor COLOR = Hemomancer.Enums.COLOR_GRAY; + + private static final int COST = 3; + private static final int UPGRADE_COST = 2; + + private static final int MAGIC = 1; + + public HemomancerPHP2() { + super(ID, IMG, COST, TYPE, COLOR, RARITY, TARGET); + magicNumber = baseMagicNumber = MAGIC; + tags.add(BaseModCardTags.FORM); + } + + @Override + public void use(AbstractPlayer p, AbstractMonster m) { + AbstractDungeon.actionManager.addToBottom( + new ApplyPowerAction(p, p, new RarePower(p, p, magicNumber), magicNumber)); + } + + @Override + public void upgrade() { + if (!upgraded) { + upgradeName(); + upgradeBaseCost(UPGRADE_COST); + initializeDescription(); + } + } +} diff --git a/src/main/java/hemomancer/cards/HemomancerPHP3.java b/src/main/java/hemomancer/cards/HemomancerPHP3.java new file mode 100644 index 0000000..e8a0594 --- /dev/null +++ b/src/main/java/hemomancer/cards/HemomancerPHP3.java @@ -0,0 +1,49 @@ +package hemomancer.cards; + +import basemod.helpers.BaseModCardTags; +import com.megacrit.cardcrawl.actions.common.ApplyPowerAction; +import com.megacrit.cardcrawl.characters.AbstractPlayer; +import com.megacrit.cardcrawl.dungeons.AbstractDungeon; +import com.megacrit.cardcrawl.monsters.AbstractMonster; +import hemomancer.HemomancerMod; +import hemomancer.characters.Hemomancer; +import hemomancer.powers.RarePower; + +import static hemomancer.HemomancerMod.makeCardPath; + +public class HemomancerPHP3 extends AbstractDynamicCard { + + public static final String ID = HemomancerMod.makeID(HemomancerPHP3.class.getSimpleName()); + public static final String IMG = makeCardPath("Power.png"); + + private static final CardRarity RARITY = CardRarity.RARE; + private static final CardTarget TARGET = CardTarget.SELF; + private static final CardType TYPE = CardType.POWER; + public static final CardColor COLOR = Hemomancer.Enums.COLOR_GRAY; + + private static final int COST = 3; + private static final int UPGRADE_COST = 2; + + private static final int MAGIC = 1; + + public HemomancerPHP3() { + super(ID, IMG, COST, TYPE, COLOR, RARITY, TARGET); + magicNumber = baseMagicNumber = MAGIC; + tags.add(BaseModCardTags.FORM); + } + + @Override + public void use(AbstractPlayer p, AbstractMonster m) { + AbstractDungeon.actionManager.addToBottom( + new ApplyPowerAction(p, p, new RarePower(p, p, magicNumber), magicNumber)); + } + + @Override + public void upgrade() { + if (!upgraded) { + upgradeName(); + upgradeBaseCost(UPGRADE_COST); + initializeDescription(); + } + } +} diff --git a/src/main/java/hemomancer/cards/HemomancerPHS1.java b/src/main/java/hemomancer/cards/HemomancerPHS1.java new file mode 100644 index 0000000..b016471 --- /dev/null +++ b/src/main/java/hemomancer/cards/HemomancerPHS1.java @@ -0,0 +1,46 @@ +package hemomancer.cards; + +import basemod.helpers.BaseModCardTags; +import com.megacrit.cardcrawl.actions.common.GainBlockAction; +import com.megacrit.cardcrawl.characters.AbstractPlayer; +import com.megacrit.cardcrawl.dungeons.AbstractDungeon; +import com.megacrit.cardcrawl.monsters.AbstractMonster; +import hemomancer.HemomancerMod; +import hemomancer.characters.Hemomancer; + +import static hemomancer.HemomancerMod.makeCardPath; + +public class HemomancerPHS1 extends AbstractDynamicCard { + + public static final String ID = HemomancerMod.makeID(HemomancerPHS1.class.getSimpleName()); + public static final String IMG = makeCardPath("blood_block.png"); + + private static final CardRarity RARITY = CardRarity.COMMON; + private static final CardTarget TARGET = CardTarget.SELF; + private static final CardType TYPE = CardType.SKILL; + public static final CardColor COLOR = Hemomancer.Enums.COLOR_GRAY; + + private static final int COST = 1; + private static final int BLOCK = 5; + private static final int UPGRADE_PLUS_BLOCK = 3; + + public HemomancerPHS1() { + super(ID, IMG, COST, TYPE, COLOR, RARITY, TARGET); + baseBlock = BLOCK; + this.tags.add(BaseModCardTags.BASIC_DEFEND); + } + + @Override + public void use(AbstractPlayer p, AbstractMonster m) { + AbstractDungeon.actionManager.addToBottom(new GainBlockAction(p, p, block)); + } + + @Override + public void upgrade() { + if (!upgraded) { + upgradeName(); + upgradeBlock(UPGRADE_PLUS_BLOCK); + initializeDescription(); + } + } +} diff --git a/src/main/java/hemomancer/cards/HemomancerPHS2.java b/src/main/java/hemomancer/cards/HemomancerPHS2.java new file mode 100644 index 0000000..6bd7b9d --- /dev/null +++ b/src/main/java/hemomancer/cards/HemomancerPHS2.java @@ -0,0 +1,46 @@ +package hemomancer.cards; + +import basemod.helpers.BaseModCardTags; +import com.megacrit.cardcrawl.actions.common.GainBlockAction; +import com.megacrit.cardcrawl.characters.AbstractPlayer; +import com.megacrit.cardcrawl.dungeons.AbstractDungeon; +import com.megacrit.cardcrawl.monsters.AbstractMonster; +import hemomancer.HemomancerMod; +import hemomancer.characters.Hemomancer; + +import static hemomancer.HemomancerMod.makeCardPath; + +public class HemomancerPHS2 extends AbstractDynamicCard { + + public static final String ID = HemomancerMod.makeID(HemomancerPHS2.class.getSimpleName()); + public static final String IMG = makeCardPath("blood_block.png"); + + private static final CardRarity RARITY = CardRarity.COMMON; + private static final CardTarget TARGET = CardTarget.SELF; + private static final CardType TYPE = CardType.SKILL; + public static final CardColor COLOR = Hemomancer.Enums.COLOR_GRAY; + + private static final int COST = 1; + private static final int BLOCK = 5; + private static final int UPGRADE_PLUS_BLOCK = 3; + + public HemomancerPHS2() { + super(ID, IMG, COST, TYPE, COLOR, RARITY, TARGET); + baseBlock = BLOCK; + this.tags.add(BaseModCardTags.BASIC_DEFEND); + } + + @Override + public void use(AbstractPlayer p, AbstractMonster m) { + AbstractDungeon.actionManager.addToBottom(new GainBlockAction(p, p, block)); + } + + @Override + public void upgrade() { + if (!upgraded) { + upgradeName(); + upgradeBlock(UPGRADE_PLUS_BLOCK); + initializeDescription(); + } + } +} diff --git a/src/main/java/hemomancer/cards/HemomancerPHS3.java b/src/main/java/hemomancer/cards/HemomancerPHS3.java new file mode 100644 index 0000000..c75ea1c --- /dev/null +++ b/src/main/java/hemomancer/cards/HemomancerPHS3.java @@ -0,0 +1,46 @@ +package hemomancer.cards; + +import basemod.helpers.BaseModCardTags; +import com.megacrit.cardcrawl.actions.common.GainBlockAction; +import com.megacrit.cardcrawl.characters.AbstractPlayer; +import com.megacrit.cardcrawl.dungeons.AbstractDungeon; +import com.megacrit.cardcrawl.monsters.AbstractMonster; +import hemomancer.HemomancerMod; +import hemomancer.characters.Hemomancer; + +import static hemomancer.HemomancerMod.makeCardPath; + +public class HemomancerPHS3 extends AbstractDynamicCard { + + public static final String ID = HemomancerMod.makeID(HemomancerPHS3.class.getSimpleName()); + public static final String IMG = makeCardPath("blood_block.png"); + + private static final CardRarity RARITY = CardRarity.UNCOMMON; + private static final CardTarget TARGET = CardTarget.SELF; + private static final CardType TYPE = CardType.SKILL; + public static final CardColor COLOR = Hemomancer.Enums.COLOR_GRAY; + + private static final int COST = 1; + private static final int BLOCK = 5; + private static final int UPGRADE_PLUS_BLOCK = 3; + + public HemomancerPHS3() { + super(ID, IMG, COST, TYPE, COLOR, RARITY, TARGET); + baseBlock = BLOCK; + this.tags.add(BaseModCardTags.BASIC_DEFEND); + } + + @Override + public void use(AbstractPlayer p, AbstractMonster m) { + AbstractDungeon.actionManager.addToBottom(new GainBlockAction(p, p, block)); + } + + @Override + public void upgrade() { + if (!upgraded) { + upgradeName(); + upgradeBlock(UPGRADE_PLUS_BLOCK); + initializeDescription(); + } + } +} diff --git a/src/main/java/hemomancer/cards/HemomancerPHS4.java b/src/main/java/hemomancer/cards/HemomancerPHS4.java new file mode 100644 index 0000000..95ad6f1 --- /dev/null +++ b/src/main/java/hemomancer/cards/HemomancerPHS4.java @@ -0,0 +1,46 @@ +package hemomancer.cards; + +import basemod.helpers.BaseModCardTags; +import com.megacrit.cardcrawl.actions.common.GainBlockAction; +import com.megacrit.cardcrawl.characters.AbstractPlayer; +import com.megacrit.cardcrawl.dungeons.AbstractDungeon; +import com.megacrit.cardcrawl.monsters.AbstractMonster; +import hemomancer.HemomancerMod; +import hemomancer.characters.Hemomancer; + +import static hemomancer.HemomancerMod.makeCardPath; + +public class HemomancerPHS4 extends AbstractDynamicCard { + + public static final String ID = HemomancerMod.makeID(HemomancerPHS4.class.getSimpleName()); + public static final String IMG = makeCardPath("blood_block.png"); + + private static final CardRarity RARITY = CardRarity.UNCOMMON; + private static final CardTarget TARGET = CardTarget.SELF; + private static final CardType TYPE = CardType.SKILL; + public static final CardColor COLOR = Hemomancer.Enums.COLOR_GRAY; + + private static final int COST = 1; + private static final int BLOCK = 5; + private static final int UPGRADE_PLUS_BLOCK = 3; + + public HemomancerPHS4() { + super(ID, IMG, COST, TYPE, COLOR, RARITY, TARGET); + baseBlock = BLOCK; + this.tags.add(BaseModCardTags.BASIC_DEFEND); + } + + @Override + public void use(AbstractPlayer p, AbstractMonster m) { + AbstractDungeon.actionManager.addToBottom(new GainBlockAction(p, p, block)); + } + + @Override + public void upgrade() { + if (!upgraded) { + upgradeName(); + upgradeBlock(UPGRADE_PLUS_BLOCK); + initializeDescription(); + } + } +} diff --git a/src/main/java/hemomancer/cards/HemomancerPHS5.java b/src/main/java/hemomancer/cards/HemomancerPHS5.java new file mode 100644 index 0000000..31920af --- /dev/null +++ b/src/main/java/hemomancer/cards/HemomancerPHS5.java @@ -0,0 +1,46 @@ +package hemomancer.cards; + +import basemod.helpers.BaseModCardTags; +import com.megacrit.cardcrawl.actions.common.GainBlockAction; +import com.megacrit.cardcrawl.characters.AbstractPlayer; +import com.megacrit.cardcrawl.dungeons.AbstractDungeon; +import com.megacrit.cardcrawl.monsters.AbstractMonster; +import hemomancer.HemomancerMod; +import hemomancer.characters.Hemomancer; + +import static hemomancer.HemomancerMod.makeCardPath; + +public class HemomancerPHS5 extends AbstractDynamicCard { + + public static final String ID = HemomancerMod.makeID(HemomancerPHS5.class.getSimpleName()); + public static final String IMG = makeCardPath("blood_block.png"); + + private static final CardRarity RARITY = CardRarity.RARE; + private static final CardTarget TARGET = CardTarget.SELF; + private static final CardType TYPE = CardType.SKILL; + public static final CardColor COLOR = Hemomancer.Enums.COLOR_GRAY; + + private static final int COST = 1; + private static final int BLOCK = 5; + private static final int UPGRADE_PLUS_BLOCK = 3; + + public HemomancerPHS5() { + super(ID, IMG, COST, TYPE, COLOR, RARITY, TARGET); + baseBlock = BLOCK; + this.tags.add(BaseModCardTags.BASIC_DEFEND); + } + + @Override + public void use(AbstractPlayer p, AbstractMonster m) { + AbstractDungeon.actionManager.addToBottom(new GainBlockAction(p, p, block)); + } + + @Override + public void upgrade() { + if (!upgraded) { + upgradeName(); + upgradeBlock(UPGRADE_PLUS_BLOCK); + initializeDescription(); + } + } +} diff --git a/src/main/java/hemomancer/cards/HemomancerRareAttack.java b/src/main/java/hemomancer/cards/HemomancerRareAttack.java new file mode 100644 index 0000000..63711b2 --- /dev/null +++ b/src/main/java/hemomancer/cards/HemomancerRareAttack.java @@ -0,0 +1,53 @@ +package hemomancer.cards; + +import com.megacrit.cardcrawl.actions.AbstractGameAction; +import com.megacrit.cardcrawl.actions.animations.VFXAction; +import com.megacrit.cardcrawl.actions.common.DamageAction; +import com.megacrit.cardcrawl.cards.DamageInfo; +import com.megacrit.cardcrawl.characters.AbstractPlayer; +import com.megacrit.cardcrawl.dungeons.AbstractDungeon; +import com.megacrit.cardcrawl.monsters.AbstractMonster; +import com.megacrit.cardcrawl.vfx.combat.WeightyImpactEffect; +import hemomancer.HemomancerMod; +import hemomancer.characters.Hemomancer; + +import static hemomancer.HemomancerMod.makeCardPath; + +public class HemomancerRareAttack extends AbstractDynamicCard { + + public static final String ID = HemomancerMod.makeID(HemomancerRareAttack.class.getSimpleName()); + public static final String IMG = makeCardPath("Attack.png"); + + private static final CardRarity RARITY = CardRarity.RARE; + private static final CardTarget TARGET = CardTarget.ENEMY; + private static final CardType TYPE = CardType.ATTACK; + public static final CardColor COLOR = Hemomancer.Enums.COLOR_GRAY; + + private static final int COST = 2; + + private static final int DAMAGE = 30; + private static final int UPGRADE_PLUS_DMG = 5; + + public HemomancerRareAttack() { + super(ID, IMG, COST, TYPE, COLOR, RARITY, TARGET); + baseDamage = DAMAGE; + } + + @Override + public void use(AbstractPlayer p, AbstractMonster m) { + if (m != null) { + AbstractDungeon.actionManager.addToBottom(new VFXAction(new WeightyImpactEffect(m.hb.cX, m.hb.cY))); + } + AbstractDungeon.actionManager.addToBottom( + new DamageAction(m, new DamageInfo(p, damage, damageTypeForTurn), + AbstractGameAction.AttackEffect.NONE)); + } + + @Override + public void upgrade() { + if (!upgraded) { + upgradeName(); + upgradeDamage(UPGRADE_PLUS_DMG); + } + } +} \ No newline at end of file diff --git a/src/main/java/hemomancer/cards/HemomancerRarePower.java b/src/main/java/hemomancer/cards/HemomancerRarePower.java new file mode 100644 index 0000000..78b7137 --- /dev/null +++ b/src/main/java/hemomancer/cards/HemomancerRarePower.java @@ -0,0 +1,49 @@ +package hemomancer.cards; + +import basemod.helpers.BaseModCardTags; +import com.megacrit.cardcrawl.actions.common.ApplyPowerAction; +import com.megacrit.cardcrawl.characters.AbstractPlayer; +import com.megacrit.cardcrawl.dungeons.AbstractDungeon; +import com.megacrit.cardcrawl.monsters.AbstractMonster; +import hemomancer.HemomancerMod; +import hemomancer.characters.Hemomancer; +import hemomancer.powers.RarePower; + +import static hemomancer.HemomancerMod.makeCardPath; + +public class HemomancerRarePower extends AbstractDynamicCard { + + public static final String ID = HemomancerMod.makeID(HemomancerRarePower.class.getSimpleName()); + public static final String IMG = makeCardPath("Power.png"); + + private static final CardRarity RARITY = CardRarity.RARE; + private static final CardTarget TARGET = CardTarget.SELF; + private static final CardType TYPE = CardType.POWER; + public static final CardColor COLOR = Hemomancer.Enums.COLOR_GRAY; + + private static final int COST = 3; + private static final int UPGRADE_COST = 2; + + private static final int MAGIC = 1; + + public HemomancerRarePower() { + super(ID, IMG, COST, TYPE, COLOR, RARITY, TARGET); + magicNumber = baseMagicNumber = MAGIC; + tags.add(BaseModCardTags.FORM); + } + + @Override + public void use(AbstractPlayer p, AbstractMonster m) { + AbstractDungeon.actionManager.addToBottom( + new ApplyPowerAction(p, p, new RarePower(p, p, magicNumber), magicNumber)); + } + + @Override + public void upgrade() { + if (!upgraded) { + upgradeName(); + upgradeBaseCost(UPGRADE_COST); + initializeDescription(); + } + } +} diff --git a/src/main/java/hemomancer/cards/HemomancerRareSkill.java b/src/main/java/hemomancer/cards/HemomancerRareSkill.java new file mode 100644 index 0000000..6d6831f --- /dev/null +++ b/src/main/java/hemomancer/cards/HemomancerRareSkill.java @@ -0,0 +1,59 @@ +package hemomancer.cards; + +import com.megacrit.cardcrawl.actions.common.ApplyPowerAction; +import com.megacrit.cardcrawl.characters.AbstractPlayer; +import com.megacrit.cardcrawl.core.CardCrawlGame; +import com.megacrit.cardcrawl.dungeons.AbstractDungeon; +import com.megacrit.cardcrawl.localization.CardStrings; +import com.megacrit.cardcrawl.monsters.AbstractMonster; +import com.megacrit.cardcrawl.powers.VulnerablePower; +import hemomancer.HemomancerMod; +import hemomancer.characters.Hemomancer; + +import static hemomancer.HemomancerMod.makeCardPath; + +public class HemomancerRareSkill extends AbstractDynamicCard { + + public static final String ID = HemomancerMod.makeID(HemomancerRareSkill.class.getSimpleName()); + public static final String IMG = makeCardPath("Skill.png"); + + private static final CardStrings cardStrings = CardCrawlGame.languagePack.getCardStrings(ID); + public static final String UPGRADE_DESCRIPTION = cardStrings.UPGRADE_DESCRIPTION; + + private static final CardRarity RARITY = CardRarity.RARE; + private static final CardTarget TARGET = CardTarget.ALL_ENEMY; + private static final CardType TYPE = CardType.SKILL; + public static final CardColor COLOR = Hemomancer.Enums.COLOR_GRAY; + + private static final int COST = 1; + + private int TIMES = 2; + private final int UPGRADE_TIMES = 3; + + private int AMOUNT = 1; + + public HemomancerRareSkill() { + super(ID, IMG, COST, TYPE, COLOR, RARITY, TARGET); + baseMagicNumber = magicNumber = AMOUNT; + } + + @Override + public void use(AbstractPlayer p, AbstractMonster m) { + for (int i = 0; i < TIMES; i++) { + for (final AbstractMonster mo : AbstractDungeon.getCurrRoom().monsters.monsters) { + AbstractDungeon.actionManager.addToBottom(new ApplyPowerAction(mo, p, + new VulnerablePower(mo, magicNumber, false), magicNumber)); + } + } + } + + @Override + public void upgrade() { + if (!upgraded) { + upgradeName(); + rawDescription = UPGRADE_DESCRIPTION; + TIMES = UPGRADE_TIMES; + initializeDescription(); + } + } +} \ No newline at end of file diff --git a/src/main/java/hemomancer/cards/HemomancerSecondMagicNumberSkill.java b/src/main/java/hemomancer/cards/HemomancerSecondMagicNumberSkill.java new file mode 100644 index 0000000..c6ec7a2 --- /dev/null +++ b/src/main/java/hemomancer/cards/HemomancerSecondMagicNumberSkill.java @@ -0,0 +1,56 @@ +package hemomancer.cards; + +import com.megacrit.cardcrawl.actions.common.ApplyPowerAction; +import com.megacrit.cardcrawl.characters.AbstractPlayer; +import com.megacrit.cardcrawl.dungeons.AbstractDungeon; +import com.megacrit.cardcrawl.monsters.AbstractMonster; +import com.megacrit.cardcrawl.powers.PoisonPower; +import com.megacrit.cardcrawl.powers.VulnerablePower; +import hemomancer.HemomancerMod; +import hemomancer.characters.Hemomancer; + +import static hemomancer.HemomancerMod.makeCardPath; + +public class HemomancerSecondMagicNumberSkill extends AbstractDynamicCard { + + public static final String ID = HemomancerMod.makeID(HemomancerSecondMagicNumberSkill.class.getSimpleName()); + public static final String IMG = makeCardPath("Skill.png"); + + private static final CardRarity RARITY = CardRarity.COMMON; + private static final CardTarget TARGET = CardTarget.ENEMY; + private static final CardType TYPE = CardType.SKILL; + public static final CardColor COLOR = Hemomancer.Enums.COLOR_GRAY; + + private static final int COST = 1; + + private static final int VULNERABLE = 2; + private static final int UPGRADE_PLUS_VULNERABLE = 3; + + private static final int POISON = 4; + private static final int UPGRADE_PLUS_POISON = 5; + + public HemomancerSecondMagicNumberSkill() { + super(ID, IMG, COST, TYPE, COLOR, RARITY, TARGET); + magicNumber = baseMagicNumber = VULNERABLE; + defaultSecondMagicNumber = defaultBaseSecondMagicNumber = POISON; + } + + @Override + public void use(AbstractPlayer p, AbstractMonster m) { + AbstractDungeon.actionManager.addToBottom( + new ApplyPowerAction(m, p, new VulnerablePower(m, magicNumber, false), this.magicNumber)); + + AbstractDungeon.actionManager.addToBottom( + new ApplyPowerAction(m, p, new PoisonPower(m, p, this.defaultSecondMagicNumber), this.defaultSecondMagicNumber)); + } + + @Override + public void upgrade() { + if (!this.upgraded) { + this.upgradeName(); + this.upgradeMagicNumber(UPGRADE_PLUS_VULNERABLE); + this.upgradeDefaultSecondMagicNumber(UPGRADE_PLUS_POISON); + this.initializeDescription(); + } + } +} \ No newline at end of file diff --git a/src/main/java/hemomancer/cards/HemomancerStrike.java b/src/main/java/hemomancer/cards/HemomancerStrike.java new file mode 100644 index 0000000..68f5e80 --- /dev/null +++ b/src/main/java/hemomancer/cards/HemomancerStrike.java @@ -0,0 +1,59 @@ +package hemomancer.cards; + +import basemod.abstracts.CustomCard; +import basemod.helpers.BaseModCardTags; +import com.megacrit.cardcrawl.actions.AbstractGameAction; +import com.megacrit.cardcrawl.actions.common.DamageAction; +import com.megacrit.cardcrawl.cards.DamageInfo; +import com.megacrit.cardcrawl.characters.AbstractPlayer; +import com.megacrit.cardcrawl.core.CardCrawlGame; +import com.megacrit.cardcrawl.dungeons.AbstractDungeon; +import com.megacrit.cardcrawl.localization.CardStrings; +import com.megacrit.cardcrawl.monsters.AbstractMonster; +import hemomancer.HemomancerMod; +import hemomancer.characters.Hemomancer; + +import static hemomancer.HemomancerMod.makeCardPath; + +public class HemomancerStrike extends CustomCard { + + public static final String ID = HemomancerMod.makeID(HemomancerStrike.class.getSimpleName()); + private static final CardStrings cardStrings = CardCrawlGame.languagePack.getCardStrings(ID); + + public static final String IMG = makeCardPath("blood_attack.png"); + + public static final String NAME = cardStrings.NAME; + public static final String DESCRIPTION = cardStrings.DESCRIPTION; + + private static final CardRarity RARITY = CardRarity.BASIC; + private static final CardTarget TARGET = CardTarget.ENEMY; + private static final CardType TYPE = CardType.ATTACK; + public static final CardColor COLOR = Hemomancer.Enums.COLOR_GRAY; + + private static final int COST = 1; + private static final int DAMAGE = 6; + private static final int UPGRADE_PLUS_DMG = 3; + + public HemomancerStrike() { + super(ID, NAME, IMG, COST, DESCRIPTION, TYPE, COLOR, RARITY, TARGET); + baseDamage = DAMAGE; + this.tags.add(BaseModCardTags.BASIC_STRIKE); + this.tags.add(CardTags.STRIKE); + } + + @Override + public void use(AbstractPlayer p, AbstractMonster m) { + AbstractDungeon.actionManager.addToBottom( + new DamageAction(m, new DamageInfo(p, damage, damageTypeForTurn), + AbstractGameAction.AttackEffect.SLASH_HORIZONTAL)); + } + + @Override + public void upgrade() { + if (!upgraded) { + upgradeName(); + upgradeDamage(UPGRADE_PLUS_DMG); + initializeDescription(); + } + } +} diff --git a/src/main/java/hemomancer/cards/HemomancerUncommonAttack.java b/src/main/java/hemomancer/cards/HemomancerUncommonAttack.java new file mode 100644 index 0000000..9523721 --- /dev/null +++ b/src/main/java/hemomancer/cards/HemomancerUncommonAttack.java @@ -0,0 +1,48 @@ +package hemomancer.cards; + +import com.megacrit.cardcrawl.actions.AbstractGameAction; +import com.megacrit.cardcrawl.actions.common.DamageAction; +import com.megacrit.cardcrawl.cards.DamageInfo; +import com.megacrit.cardcrawl.characters.AbstractPlayer; +import com.megacrit.cardcrawl.dungeons.AbstractDungeon; +import com.megacrit.cardcrawl.monsters.AbstractMonster; +import hemomancer.HemomancerMod; +import hemomancer.characters.Hemomancer; + +import static hemomancer.HemomancerMod.makeCardPath; + +public class HemomancerUncommonAttack extends AbstractDynamicCard { + + public static final String ID = HemomancerMod.makeID(HemomancerUncommonAttack.class.getSimpleName()); + public static final String IMG = makeCardPath("Attack.png"); + + private static final CardRarity RARITY = CardRarity.UNCOMMON; + private static final CardTarget TARGET = CardTarget.ENEMY; + private static final CardType TYPE = CardType.ATTACK; + public static final CardColor COLOR = Hemomancer.Enums.COLOR_GRAY; + + private static final int COST = 1; + private static final int DAMAGE = 10; + private static final int UPGRADE_PLUS_DMG = 5; + + public HemomancerUncommonAttack() { + super(ID, IMG, COST, TYPE, COLOR, RARITY, TARGET); + baseDamage = DAMAGE; + } + + @Override + public void use(AbstractPlayer p, AbstractMonster m) { + AbstractDungeon.actionManager.addToBottom( + new DamageAction(m, new DamageInfo(p, damage, damageTypeForTurn), + AbstractGameAction.AttackEffect.BLUNT_LIGHT)); + } + + @Override + public void upgrade() { + if (!upgraded) { + upgradeName(); + upgradeDamage(UPGRADE_PLUS_DMG); + initializeDescription(); + } + } +} \ No newline at end of file diff --git a/src/main/java/hemomancer/cards/HemomancerUncommonPower.java b/src/main/java/hemomancer/cards/HemomancerUncommonPower.java new file mode 100644 index 0000000..8ea4e1b --- /dev/null +++ b/src/main/java/hemomancer/cards/HemomancerUncommonPower.java @@ -0,0 +1,53 @@ +package hemomancer.cards; + +import com.megacrit.cardcrawl.characters.AbstractPlayer; +import com.megacrit.cardcrawl.core.CardCrawlGame; +import com.megacrit.cardcrawl.dungeons.AbstractDungeon; +import com.megacrit.cardcrawl.localization.CardStrings; +import com.megacrit.cardcrawl.monsters.AbstractMonster; +import com.megacrit.cardcrawl.ui.panels.EnergyPanel; +import hemomancer.HemomancerMod; +import hemomancer.actions.UncommonPowerAction; +import hemomancer.characters.Hemomancer; + +import static hemomancer.HemomancerMod.makeCardPath; + +public class HemomancerUncommonPower extends AbstractDynamicCard { + + public static final String ID = HemomancerMod.makeID(HemomancerUncommonPower.class.getSimpleName()); + public static final String IMG = makeCardPath("Power.png"); + + private static final CardStrings cardStrings = CardCrawlGame.languagePack.getCardStrings(ID); + public static final String UPGRADE_DESCRIPTION = cardStrings.UPGRADE_DESCRIPTION; + + private static final CardRarity RARITY = CardRarity.UNCOMMON; + private static final CardTarget TARGET = CardTarget.SELF; + private static final CardType TYPE = CardType.POWER; + public static final CardColor COLOR = Hemomancer.Enums.COLOR_GRAY; + + private static final int COST = -1; + private static final int MAGIC = 1; + + public HemomancerUncommonPower() { + super(ID, IMG, COST, TYPE, COLOR, RARITY, TARGET); + magicNumber = baseMagicNumber = MAGIC; + } + + @Override + public void use(final AbstractPlayer p, final AbstractMonster m) { + if (energyOnUse < EnergyPanel.totalCount) { + energyOnUse = EnergyPanel.totalCount; + } + AbstractDungeon.actionManager.addToBottom(new UncommonPowerAction(p, m, magicNumber, + upgraded, damageTypeForTurn, freeToPlayOnce, energyOnUse)); + } + + @Override + public void upgrade() { + if (!upgraded) { + upgradeName(); + rawDescription = UPGRADE_DESCRIPTION; + initializeDescription(); + } + } +} \ No newline at end of file diff --git a/src/main/java/hemomancer/cards/HemomancerUncommonSkill.java b/src/main/java/hemomancer/cards/HemomancerUncommonSkill.java new file mode 100644 index 0000000..dad8acf --- /dev/null +++ b/src/main/java/hemomancer/cards/HemomancerUncommonSkill.java @@ -0,0 +1,49 @@ +package hemomancer.cards; + +import com.megacrit.cardcrawl.actions.common.ApplyPowerAction; +import com.megacrit.cardcrawl.characters.AbstractPlayer; +import com.megacrit.cardcrawl.dungeons.AbstractDungeon; +import com.megacrit.cardcrawl.monsters.AbstractMonster; +import com.megacrit.cardcrawl.powers.PlatedArmorPower; +import hemomancer.HemomancerMod; +import hemomancer.characters.Hemomancer; + +import static hemomancer.HemomancerMod.makeCardPath; + +public class HemomancerUncommonSkill extends AbstractDynamicCard { + + public static final String ID = HemomancerMod.makeID(HemomancerUncommonSkill.class.getSimpleName()); + public static final String IMG = makeCardPath("Skill.png"); + + private static final CardRarity RARITY = CardRarity.UNCOMMON; + private static final CardTarget TARGET = CardTarget.SELF; + private static final CardType TYPE = CardType.SKILL; + public static final CardColor COLOR = Hemomancer.Enums.COLOR_GRAY; + + private static final int COST = 1; + private static final int UPGRADE_REDUCED_COST = 0; + + private static final int BLOCK = 1; + private static final int UPGRADE_PLUS_BLOCK = 2; + + public HemomancerUncommonSkill() { + super(ID, IMG, COST, TYPE, COLOR, RARITY, TARGET); + baseBlock = BLOCK; + } + + @Override + public void use(AbstractPlayer p, AbstractMonster m) { + AbstractDungeon.actionManager.addToBottom( + new ApplyPowerAction(p, p, new PlatedArmorPower(p, block), block)); + } + + @Override + public void upgrade() { + if (!upgraded) { + upgradeName(); + upgradeBlock(UPGRADE_PLUS_BLOCK); + upgradeBaseCost(UPGRADE_REDUCED_COST); + initializeDescription(); + } + } +} \ No newline at end of file diff --git a/src/main/java/hemomancer/cards/OrbSkill.java b/src/main/java/hemomancer/cards/OrbSkill.java new file mode 100644 index 0000000..af28c31 --- /dev/null +++ b/src/main/java/hemomancer/cards/OrbSkill.java @@ -0,0 +1,48 @@ +package hemomancer.cards; + +import com.megacrit.cardcrawl.actions.defect.ChannelAction; +import com.megacrit.cardcrawl.characters.AbstractPlayer; +import com.megacrit.cardcrawl.core.CardCrawlGame; +import com.megacrit.cardcrawl.dungeons.AbstractDungeon; +import com.megacrit.cardcrawl.localization.CardStrings; +import com.megacrit.cardcrawl.monsters.AbstractMonster; +import hemomancer.HemomancerMod; +import hemomancer.characters.Hemomancer; +import hemomancer.orbs.DefaultOrb; + +import static hemomancer.HemomancerMod.makeCardPath; + +public class OrbSkill extends AbstractDynamicCard { + + public static final String ID = HemomancerMod.makeID(OrbSkill.class.getSimpleName()); + private static final CardStrings cardStrings = CardCrawlGame.languagePack.getCardStrings(ID); + + public static final String IMG = makeCardPath("Skill.png"); + + public static final String NAME = cardStrings.NAME; + public static final String DESCRIPTION = cardStrings.DESCRIPTION; + + private static final CardRarity RARITY = CardRarity.UNCOMMON; + private static final CardTarget TARGET = CardTarget.SELF; + private static final CardType TYPE = CardType.SKILL; + public static final CardColor COLOR = Hemomancer.Enums.COLOR_GRAY; + + private static final int COST = 1; + + public OrbSkill() { + super(ID, IMG, COST, TYPE, COLOR, RARITY, TARGET); + } + + @Override + public void use(AbstractPlayer p, AbstractMonster m) { + AbstractDungeon.actionManager.addToBottom(new ChannelAction(new DefaultOrb())); + } + + @Override + public void upgrade() { + if (!this.upgraded) { + this.upgradeName(); + this.initializeDescription(); + } + } +} \ No newline at end of file diff --git a/src/main/java/hemomancer/characters/Hemomancer.java b/src/main/java/hemomancer/characters/Hemomancer.java new file mode 100644 index 0000000..65dbd67 --- /dev/null +++ b/src/main/java/hemomancer/characters/Hemomancer.java @@ -0,0 +1,212 @@ +package hemomancer.characters; + +import basemod.abstracts.CustomPlayer; +import basemod.animations.SpriterAnimation; +import com.badlogic.gdx.graphics.Color; +import com.badlogic.gdx.graphics.g2d.BitmapFont; +import com.badlogic.gdx.math.MathUtils; +import com.esotericsoftware.spine.AnimationState; +import com.evacipated.cardcrawl.modthespire.lib.SpireEnum; +import com.megacrit.cardcrawl.actions.AbstractGameAction; +import com.megacrit.cardcrawl.cards.AbstractCard; +import com.megacrit.cardcrawl.characters.AbstractPlayer; +import com.megacrit.cardcrawl.core.CardCrawlGame; +import com.megacrit.cardcrawl.core.EnergyManager; +import com.megacrit.cardcrawl.core.Settings; +import com.megacrit.cardcrawl.helpers.CardLibrary; +import com.megacrit.cardcrawl.helpers.FontHelper; +import com.megacrit.cardcrawl.helpers.ScreenShake; +import com.megacrit.cardcrawl.localization.CharacterStrings; +import com.megacrit.cardcrawl.screens.CharSelectInfo; +import com.megacrit.cardcrawl.unlock.UnlockTracker; +import hemomancer.relics.BloodMistRelic; +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; +import hemomancer.HemomancerMod; +import hemomancer.cards.*; + +import java.util.ArrayList; + +import static hemomancer.HemomancerMod.*; +import static hemomancer.characters.Hemomancer.Enums.COLOR_GRAY; + +public class Hemomancer extends CustomPlayer { + public static final Logger logger = LogManager.getLogger(HemomancerMod.class.getName()); + + public static class Enums { + @SpireEnum + public static AbstractPlayer.PlayerClass THE_DEFAULT; + @SpireEnum(name = "DEFAULT_GRAY_COLOR") + public static AbstractCard.CardColor COLOR_GRAY; + @SpireEnum(name = "DEFAULT_GRAY_COLOR") + @SuppressWarnings("unused") + public static CardLibrary.LibraryType LIBRARY_COLOR; + } + + public static final int ENERGY_PER_TURN = 3; + public static final int STARTING_HP = 75; + public static final int MAX_HP = 75; + public static final int STARTING_GOLD = 99; + public static final int CARD_DRAW = 6; + public static final int ORB_SLOTS = 1; + + private static final String ID = makeID("HemomancerCharacter"); + private static final CharacterStrings characterStrings = CardCrawlGame.languagePack.getCharacterString(ID); + private static final String[] NAMES = characterStrings.NAMES; + private static final String[] TEXT = characterStrings.TEXT; + + public static final String[] orbTextures = { + "hemomancerResources/images/char/defaultCharacter/orb/layer1.png", + "hemomancerResources/images/char/defaultCharacter/orb/layer2.png", + "hemomancerResources/images/char/defaultCharacter/orb/layer3.png", + "hemomancerResources/images/char/defaultCharacter/orb/layer4.png", + "hemomancerResources/images/char/defaultCharacter/orb/layer5.png", + "hemomancerResources/images/char/defaultCharacter/orb/layer6.png", + "hemomancerResources/images/char/defaultCharacter/orb/layer1d.png", + "hemomancerResources/images/char/defaultCharacter/orb/layer2d.png", + "hemomancerResources/images/char/defaultCharacter/orb/layer3d.png", + "hemomancerResources/images/char/defaultCharacter/orb/layer4d.png", + "hemomancerResources/images/char/defaultCharacter/orb/layer5d.png",}; + + public Hemomancer(String name, PlayerClass setClass) { + super(name, setClass, orbTextures, + "hemomancerResources/images/char/defaultCharacter/orb/vfx.png", null, + new SpriterAnimation( + "hemomancerResources/images/char/defaultCharacter/Spriter/theDefaultAnimation.scml")); + + + initializeClass(null, + THE_DEFAULT_SHOULDER_1, + THE_DEFAULT_SHOULDER_2, + THE_DEFAULT_CORPSE, + getLoadout(), 20.0F, -10.0F, 220.0F, 290.0F, new EnergyManager(ENERGY_PER_TURN)); + + + loadAnimation( + THE_DEFAULT_SKELETON_ATLAS, + THE_DEFAULT_SKELETON_JSON, + 1.0f); + AnimationState.TrackEntry e = state.setAnimation(0, "animation", true); + e.setTime(e.getEndTime() * MathUtils.random()); + + + dialogX = (drawX + 0.0F * Settings.scale); + dialogY = (drawY + 220.0F * Settings.scale); + } + + @Override + public CharSelectInfo getLoadout() { + return new CharSelectInfo(NAMES[0], TEXT[0], + STARTING_HP, MAX_HP, ORB_SLOTS, STARTING_GOLD, CARD_DRAW, this, getStartingRelics(), + getStartingDeck(), false); + } + + @Override + public ArrayList getStartingDeck() { + ArrayList retVal = new ArrayList<>(); + + retVal.add(HemomancerStrike.ID); +// retVal.add(HemomancerStrike.ID); +// retVal.add(HemomancerStrike.ID); +// retVal.add(HemomancerStrike.ID); + + + retVal.add(HemomancerBlock.ID); +// retVal.add(HemomancerBlock.ID); +// retVal.add(HemomancerBlock.ID); +// retVal.add(HemomancerBlock.ID); + retVal.add(HemomancerBloodPump.ID); + retVal.add(HemomancerFlay.ID); + return retVal; + } + + public ArrayList getStartingRelics() { + ArrayList retVal = new ArrayList<>(); + + retVal.add(BloodMistRelic.ID); + + UnlockTracker.markRelicAsSeen(BloodMistRelic.ID); + + return retVal; + } + + @Override + public void doCharSelectScreenSelectEffect() { + CardCrawlGame.sound.playA("ATTACK_DAGGER_1", 1.25f); + CardCrawlGame.screenShake.shake(ScreenShake.ShakeIntensity.LOW, ScreenShake.ShakeDur.SHORT, + false); + } + + @Override + public String getCustomModeCharacterButtonSoundKey() { + return "ATTACK_DAGGER_1"; + } + + @Override + public int getAscensionMaxHPLoss() { + return 0; + } + + @Override + public AbstractCard.CardColor getCardColor() { + return COLOR_GRAY; + } + + @Override + public Color getCardTrailColor() { + return HemomancerMod.DEFAULT_GRAY; + } + + @Override + public BitmapFont getEnergyNumFont() { + return FontHelper.energyNumFontRed; + } + + @Override + public String getLocalizedCharacterName() { + return NAMES[0]; + } + + @Override + public AbstractCard getStartCardForEvent() { + return new HemomancerStrike(); + } + + @Override + public String getTitle(AbstractPlayer.PlayerClass playerClass) { + return NAMES[1]; + } + + @Override + public AbstractPlayer newInstance() { + return new Hemomancer(name, chosenClass); + } + + @Override + public Color getCardRenderColor() { + return HemomancerMod.DEFAULT_GRAY; + } + + @Override + public Color getSlashAttackColor() { + return HemomancerMod.DEFAULT_GRAY; + } + + @Override + public AbstractGameAction.AttackEffect[] getSpireHeartSlashEffect() { + return new AbstractGameAction.AttackEffect[]{ + AbstractGameAction.AttackEffect.BLUNT_HEAVY, + AbstractGameAction.AttackEffect.BLUNT_HEAVY, + AbstractGameAction.AttackEffect.BLUNT_HEAVY}; + } + + @Override + public String getSpireHeartText() { + return TEXT[1]; + } + + @Override + public String getVampireText() { + return TEXT[2]; + } +} diff --git a/src/main/java/hemomancer/events/IdentityCrisisEvent.java b/src/main/java/hemomancer/events/IdentityCrisisEvent.java new file mode 100644 index 0000000..736eeeb --- /dev/null +++ b/src/main/java/hemomancer/events/IdentityCrisisEvent.java @@ -0,0 +1,117 @@ +package hemomancer.events; + +import com.megacrit.cardcrawl.cards.AbstractCard; +import com.megacrit.cardcrawl.cards.CardGroup; +import com.megacrit.cardcrawl.cards.colorless.Apotheosis; +import com.megacrit.cardcrawl.core.CardCrawlGame; +import com.megacrit.cardcrawl.core.Settings; +import com.megacrit.cardcrawl.dungeons.AbstractDungeon; +import com.megacrit.cardcrawl.events.AbstractImageEvent; +import com.megacrit.cardcrawl.helpers.RelicLibrary; +import com.megacrit.cardcrawl.helpers.ScreenShake; +import com.megacrit.cardcrawl.localization.EventStrings; +import com.megacrit.cardcrawl.relics.AbstractRelic; +import com.megacrit.cardcrawl.vfx.cardManip.PurgeCardEffect; +import com.megacrit.cardcrawl.vfx.cardManip.ShowCardAndObtainEffect; +import hemomancer.HemomancerMod; + +import static hemomancer.HemomancerMod.makeEventPath; + +public class IdentityCrisisEvent extends AbstractImageEvent { + + public static final String ID = HemomancerMod.makeID("IdentityCrisisEvent"); + private static final EventStrings eventStrings = CardCrawlGame.languagePack.getEventString(ID); + + private static final String NAME = eventStrings.NAME; + private static final String[] DESCRIPTIONS = eventStrings.DESCRIPTIONS; + private static final String[] OPTIONS = eventStrings.OPTIONS; + public static final String IMG = makeEventPath("IdentityCrisisEvent.png"); + + private int screenNum = 0; + + private float HEALTH_LOSS_PERCENTAGE = 0.03F; + private float HEALTH_LOSS_PERCENTAGE_LOW_ASCENSION = 0.05F; + + private int healthdamage; + + public IdentityCrisisEvent() { + super(NAME, DESCRIPTIONS[0], IMG); + + if (AbstractDungeon.ascensionLevel >= 15) { + healthdamage = (int) ((float) AbstractDungeon.player.maxHealth * HEALTH_LOSS_PERCENTAGE); + } else { + healthdamage = (int) ((float) AbstractDungeon.player.maxHealth * HEALTH_LOSS_PERCENTAGE_LOW_ASCENSION); + } + + imageEventText.setDialogOption(OPTIONS[0]); + imageEventText.setDialogOption(OPTIONS[1] + healthdamage + OPTIONS[2]); + imageEventText.setDialogOption(OPTIONS[3], new Apotheosis()); + imageEventText.setDialogOption(OPTIONS[4]); + } + + @Override + protected void buttonEffect(int i) { + switch (screenNum) { + case 0: + switch (i) { + case 0: + this.imageEventText.updateBodyText(DESCRIPTIONS[1]); + this.imageEventText.updateDialogOption(0, OPTIONS[5]); + this.imageEventText.clearRemainingOptions(); + screenNum = 1; + AbstractRelic relicToAdd = RelicLibrary.starterList.get(AbstractDungeon.relicRng.random(RelicLibrary.starterList.size() - 1)).makeCopy(); + AbstractDungeon.getCurrRoom().spawnRelicAndObtain((float) (Settings.WIDTH / 2), (float) (Settings.HEIGHT / 2), relicToAdd); + break; + case 1: + CardCrawlGame.screenShake.shake(ScreenShake.ShakeIntensity.MED, ScreenShake.ShakeDur.MED, false); + CardCrawlGame.sound.play("BLUNT_FAST"); + AbstractDungeon.player.decreaseMaxHealth(healthdamage); + if (CardGroup.getGroupWithoutBottledCards(AbstractDungeon.player.masterDeck.getPurgeableCards()).size() > 0) { + AbstractDungeon.gridSelectScreen.open( + CardGroup.getGroupWithoutBottledCards( + AbstractDungeon.player.masterDeck.getPurgeableCards()), + 1, OPTIONS[6], false, false, false, true); + } + + this.imageEventText.updateBodyText(DESCRIPTIONS[2]); + this.imageEventText.updateDialogOption(0, OPTIONS[5]); + this.imageEventText.clearRemainingOptions(); + screenNum = 1; + break; + case 2: + AbstractCard c = new Apotheosis().makeCopy(); + AbstractDungeon.effectList.add(new ShowCardAndObtainEffect(c, (float) (Settings.WIDTH / 2), (float) (Settings.HEIGHT / 2))); + this.imageEventText.updateBodyText(DESCRIPTIONS[3]); + this.imageEventText.updateDialogOption(0, OPTIONS[5]); + this.imageEventText.clearRemainingOptions(); + screenNum = 1; + break; + case 3: + imageEventText.loadImage("hemomancerResources/images/events/IdentityCrisisEvent2.png"); + this.imageEventText.updateBodyText(DESCRIPTIONS[4]); + this.imageEventText.updateDialogOption(0, OPTIONS[5]); + this.imageEventText.clearRemainingOptions(); + screenNum = 1; + break; + } + break; + case 1: + switch (i) { + case 0: + openMap(); + break; + } + break; + } + } + + public void update() { + super.update(); + if (!AbstractDungeon.gridSelectScreen.selectedCards.isEmpty()) { + AbstractCard c = AbstractDungeon.gridSelectScreen.selectedCards.get(0); + AbstractDungeon.topLevelEffects.add(new PurgeCardEffect(c, (float) (Settings.WIDTH / 2), (float) (Settings.HEIGHT / 2))); + AbstractDungeon.player.masterDeck.removeCard(c); + AbstractDungeon.gridSelectScreen.selectedCards.clear(); + } + } +} diff --git a/src/main/java/hemomancer/orbs/BloodMistOrb.java b/src/main/java/hemomancer/orbs/BloodMistOrb.java new file mode 100644 index 0000000..e4f06ea --- /dev/null +++ b/src/main/java/hemomancer/orbs/BloodMistOrb.java @@ -0,0 +1,91 @@ +package hemomancer.orbs; + +import basemod.abstracts.CustomOrb; +import com.megacrit.cardcrawl.actions.animations.VFXAction; +import com.megacrit.cardcrawl.characters.AbstractPlayer; +import com.megacrit.cardcrawl.core.CardCrawlGame; +import com.megacrit.cardcrawl.dungeons.AbstractDungeon; +import com.megacrit.cardcrawl.localization.OrbStrings; +import com.megacrit.cardcrawl.orbs.AbstractOrb; +import com.megacrit.cardcrawl.vfx.combat.OrbFlareEffect; +import hemomancer.HemomancerMod; + +import java.util.Iterator; + +public class BloodMistOrb extends CustomOrb { + public static final String BLOODMIST_ID = HemomancerMod.makeID("BloodMistOrb"); + private static final OrbStrings orbString = CardCrawlGame.languagePack.getOrbString(BLOODMIST_ID); + public static final String[] DESC = orbString.DESCRIPTION; + + public BloodMistOrb() { + super( + BLOODMIST_ID, + orbString.NAME, + 0, + 0, + DESC[0], + DESC[1], + HemomancerMod.makeOrbPath("default_orb.png") + ); + } + + @Override + public void onEvoke() { + AbstractDungeon.player.heal(evokeAmount); + } + + @Override + public void updateDescription() { + this.description = "Supplies " + this.evokeAmount + " maximum hit points for the purpose of sanguine cards."; + + } + + public void pump(int pumpAmount) { + float speedTime = 0.25F; + AbstractDungeon.actionManager.addToBottom(new VFXAction(new OrbFlareEffect(this, OrbFlareEffect.OrbFlareColor.DARK), speedTime)); + this.evokeAmount += pumpAmount; + this.passiveAmount += pumpAmount; + this.updateDescription(); + } + + public void consume(AbstractPlayer player, int x) { + int diff = this.evokeAmount - x; + this.evokeAmount = Math.max(0, diff); + this.passiveAmount = Math.max(0, diff); + if (diff < 0) { + player.decreaseMaxHealth(-diff); + } + } + + @Override + public AbstractOrb makeCopy() { + return new BloodMistOrb(); + } + + @Override + public void playChannelSFX() { + CardCrawlGame.sound.play("STS_SFX_VampireBite_v2", 0.1f); + } + + public static int getBloodMistStacks(AbstractPlayer player) { + BloodMistOrb orb = getBloodMistOrb(player); + if (orb == null) { + return 0; + } else { + return orb.evokeAmount; + } + } + + public static BloodMistOrb getBloodMistOrb(AbstractPlayer player) { + Iterator orbs = player.orbs.iterator(); + BloodMistOrb orb = null; + while (orbs.hasNext()) { + AbstractOrb rawOrb = orbs.next(); + if (rawOrb instanceof BloodMistOrb) { + orb = (BloodMistOrb) rawOrb; + break; + } + } + return orb; + } +} diff --git a/src/main/java/hemomancer/orbs/DefaultOrb.java b/src/main/java/hemomancer/orbs/DefaultOrb.java new file mode 100644 index 0000000..ff17aa6 --- /dev/null +++ b/src/main/java/hemomancer/orbs/DefaultOrb.java @@ -0,0 +1,120 @@ +package hemomancer.orbs; + +import com.badlogic.gdx.Gdx; +import com.badlogic.gdx.graphics.Color; +import com.badlogic.gdx.graphics.Texture; +import com.badlogic.gdx.graphics.g2d.SpriteBatch; +import com.badlogic.gdx.math.MathUtils; +import com.megacrit.cardcrawl.actions.AbstractGameAction; +import com.megacrit.cardcrawl.actions.animations.VFXAction; +import com.megacrit.cardcrawl.actions.common.DamageAllEnemiesAction; +import com.megacrit.cardcrawl.actions.common.DrawCardAction; +import com.megacrit.cardcrawl.actions.utility.SFXAction; +import com.megacrit.cardcrawl.cards.DamageInfo; +import com.megacrit.cardcrawl.core.CardCrawlGame; +import com.megacrit.cardcrawl.core.Settings; +import com.megacrit.cardcrawl.dungeons.AbstractDungeon; +import com.megacrit.cardcrawl.localization.OrbStrings; +import com.megacrit.cardcrawl.orbs.AbstractOrb; +import com.megacrit.cardcrawl.vfx.combat.DarkOrbActivateEffect; +import com.megacrit.cardcrawl.vfx.combat.DarkOrbPassiveEffect; +import com.megacrit.cardcrawl.vfx.combat.OrbFlareEffect; +import hemomancer.HemomancerMod; +import hemomancer.util.TextureLoader; + +import static hemomancer.HemomancerMod.makeOrbPath; + +public class DefaultOrb extends AbstractOrb { + + public static final String ORB_ID = HemomancerMod.makeID("DefaultOrb"); + private static final OrbStrings orbString = CardCrawlGame.languagePack.getOrbString(ORB_ID); + public static final String[] DESC = orbString.DESCRIPTION; + + private static final Texture IMG = TextureLoader.getTexture(makeOrbPath("default_orb.png")); + + private float vfxTimer = 1.0f; + private float vfxIntervalMin = 0.1f; + private float vfxIntervalMax = 0.4f; + private static final float ORB_WAVY_DIST = 0.04f; + private static final float PI_4 = 12.566371f; + + public DefaultOrb() { + ID = ORB_ID; + name = orbString.NAME; + img = IMG; + evokeAmount = baseEvokeAmount = 1; + passiveAmount = basePassiveAmount = 3; + updateDescription(); + angle = MathUtils.random(360.0f); + channelAnimTimer = 0.5f; + } + + @Override + public void updateDescription() { + applyFocus(); + description = DESC[0] + evokeAmount + DESC[1] + passiveAmount + DESC[2]; + } + + @Override + public void applyFocus() { + passiveAmount = basePassiveAmount; + evokeAmount = baseEvokeAmount; + } + + @Override + public void onEvoke() { + AbstractDungeon.actionManager.addToBottom( + new DamageAllEnemiesAction(AbstractDungeon.player, + DamageInfo.createDamageMatrix(evokeAmount, true, true), + DamageInfo.DamageType.THORNS, AbstractGameAction.AttackEffect.NONE)); + + AbstractDungeon.actionManager.addToBottom(new SFXAction("TINGSHA")); + } + + @Override + public void onStartOfTurn() { + AbstractDungeon.actionManager.addToBottom( + new VFXAction(new OrbFlareEffect(this, OrbFlareEffect.OrbFlareColor.FROST), 0.1f)); + AbstractDungeon.actionManager.addToBottom( + new DrawCardAction(AbstractDungeon.player, passiveAmount)); + } + + @Override + public void updateAnimation() { + + super.updateAnimation(); + angle += Gdx.graphics.getDeltaTime() * 45.0f; + vfxTimer -= Gdx.graphics.getDeltaTime(); + if (vfxTimer < 0.0f) { + AbstractDungeon.effectList.add(new DarkOrbPassiveEffect(cX, cY)); + vfxTimer = MathUtils.random(vfxIntervalMin, vfxIntervalMax); + } + } + + @Override + public void render(SpriteBatch sb) { + sb.setColor(new Color(1.0f, 1.0f, 1.0f, c.a / 2.0f)); + sb.draw(img, cX - 48.0f, cY - 48.0f + bobEffect.y, 48.0f, 48.0f, 96.0f, 96.0f, scale + MathUtils.sin(angle / PI_4) * ORB_WAVY_DIST * Settings.scale, scale, angle, 0, 0, 96, 96, false, false); + sb.setColor(new Color(1.0f, 1.0f, 1.0f, this.c.a / 2.0f)); + sb.setBlendFunction(770, 1); + sb.draw(img, cX - 48.0f, cY - 48.0f + bobEffect.y, 48.0f, 48.0f, 96.0f, 96.0f, scale, scale + MathUtils.sin(angle / PI_4) * ORB_WAVY_DIST * Settings.scale, -angle, 0, 0, 96, 96, false, false); + sb.setBlendFunction(770, 771); + renderText(sb); + hb.render(sb); + } + + @Override + public void triggerEvokeAnimation() { + AbstractDungeon.effectsQueue.add(new DarkOrbActivateEffect(cX, cY)); + } + + @Override + public void playChannelSFX() { + CardCrawlGame.sound.play("ATTACK_FIRE", 0.1f); + } + + @Override + public AbstractOrb makeCopy() { + return new DefaultOrb(); + } +} diff --git a/src/main/java/hemomancer/patches/DefaultInsertPatch.java b/src/main/java/hemomancer/patches/DefaultInsertPatch.java new file mode 100644 index 0000000..5634a5a --- /dev/null +++ b/src/main/java/hemomancer/patches/DefaultInsertPatch.java @@ -0,0 +1,35 @@ +package hemomancer.patches; + +import com.evacipated.cardcrawl.modthespire.lib.*; +import com.megacrit.cardcrawl.dungeons.AbstractDungeon; +import com.megacrit.cardcrawl.helpers.RelicLibrary; +import com.megacrit.cardcrawl.relics.AbstractRelic; +import javassist.CtBehavior; +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; + +@SpirePatch( + clz = AbstractDungeon.class, + method = "returnRandomRelicKey" + +) +public class DefaultInsertPatch { + private static final Logger logger = LogManager.getLogger(DefaultInsertPatch.class.getName()); + + @SpireInsertPatch( + locator = Locator.class, + localvars = {"retVal"} + ) + public static void thisIsOurActualPatchMethod( + AbstractRelic.RelicTier tier, String retVal) { + logger.info("Hey our patch triggered. The relic we're about to get is " + retVal); + } + + private static class Locator extends SpireInsertLocator { + @Override + public int[] Locate(CtBehavior ctMethodToPatch) throws Exception { + Matcher finalMatcher = new Matcher.MethodCallMatcher(RelicLibrary.class, "getRelic"); + return LineFinder.findInOrder(ctMethodToPatch, finalMatcher); + } + } +} \ No newline at end of file diff --git a/src/main/java/hemomancer/patches/relics/BottledPlaceholderField.java b/src/main/java/hemomancer/patches/relics/BottledPlaceholderField.java new file mode 100644 index 0000000..b10d7f4 --- /dev/null +++ b/src/main/java/hemomancer/patches/relics/BottledPlaceholderField.java @@ -0,0 +1,18 @@ +package hemomancer.patches.relics; + +import com.evacipated.cardcrawl.modthespire.lib.SpireField; +import com.evacipated.cardcrawl.modthespire.lib.SpirePatch; +import com.megacrit.cardcrawl.cards.AbstractCard; + +@SpirePatch(clz = AbstractCard.class, method = SpirePatch.CLASS) +public class BottledPlaceholderField { + public static SpireField inBottledPlaceholderField = new SpireField<>(() -> false); + + @SpirePatch(clz = AbstractCard.class, method = "makeStatEquivalentCopy") + public static class MakeStatEquivalentCopy { + public static AbstractCard Postfix(AbstractCard result, AbstractCard self) { + inBottledPlaceholderField.set(result, inBottledPlaceholderField.get(self)); + return result; + } + } +} \ No newline at end of file diff --git a/src/main/java/hemomancer/potions/PlaceholderPotion.java b/src/main/java/hemomancer/potions/PlaceholderPotion.java new file mode 100644 index 0000000..3c8ef31 --- /dev/null +++ b/src/main/java/hemomancer/potions/PlaceholderPotion.java @@ -0,0 +1,55 @@ +package hemomancer.potions; + +import com.megacrit.cardcrawl.actions.common.ApplyPowerAction; +import com.megacrit.cardcrawl.core.AbstractCreature; +import com.megacrit.cardcrawl.core.CardCrawlGame; +import com.megacrit.cardcrawl.dungeons.AbstractDungeon; +import com.megacrit.cardcrawl.helpers.PowerTip; +import com.megacrit.cardcrawl.localization.PotionStrings; +import com.megacrit.cardcrawl.potions.AbstractPotion; +import com.megacrit.cardcrawl.powers.LoseStrengthPower; +import com.megacrit.cardcrawl.powers.StrengthPower; +import com.megacrit.cardcrawl.rooms.AbstractRoom; +import hemomancer.HemomancerMod; + +public class PlaceholderPotion extends AbstractPotion { + + public static final String POTION_ID = HemomancerMod.makeID("PlaceholderPotion"); + private static final PotionStrings potionStrings = CardCrawlGame.languagePack.getPotionString(POTION_ID); + + public static final String NAME = potionStrings.NAME; + public static final String[] DESCRIPTIONS = potionStrings.DESCRIPTIONS; + + public PlaceholderPotion() { + super(NAME, POTION_ID, PotionRarity.COMMON, PotionSize.M, PotionColor.SMOKE); + potency = getPotency(); + description = DESCRIPTIONS[0] + potency + DESCRIPTIONS[2] + DESCRIPTIONS[1] + potency + DESCRIPTIONS[2]; + isThrown = false; + tips.add(new PowerTip(name, description)); + } + + @Override + public void use(AbstractCreature target) { + target = AbstractDungeon.player; + if (AbstractDungeon.getCurrRoom().phase == AbstractRoom.RoomPhase.COMBAT) { + AbstractDungeon.actionManager.addToBottom(new ApplyPowerAction(target, AbstractDungeon.player, new StrengthPower(target, potency), potency)); + AbstractDungeon.actionManager.addToBottom(new ApplyPowerAction(target, AbstractDungeon.player, new LoseStrengthPower(target, potency), potency)); + } + } + + @Override + public AbstractPotion makeCopy() { + return new PlaceholderPotion(); + } + + @Override + public int getPotency(final int potency) { + return 2; + } + + public void upgradePotion() { + potency += 1; + tips.clear(); + tips.add(new PowerTip(name, description)); + } +} diff --git a/src/main/java/hemomancer/powers/CommonPower.java b/src/main/java/hemomancer/powers/CommonPower.java new file mode 100644 index 0000000..cc0bbd5 --- /dev/null +++ b/src/main/java/hemomancer/powers/CommonPower.java @@ -0,0 +1,85 @@ +package hemomancer.powers; + +import basemod.interfaces.CloneablePowerInterface; +import com.badlogic.gdx.graphics.Texture; +import com.badlogic.gdx.graphics.g2d.TextureAtlas; +import com.megacrit.cardcrawl.actions.common.ApplyPowerAction; +import com.megacrit.cardcrawl.actions.common.ReducePowerAction; +import com.megacrit.cardcrawl.actions.utility.UseCardAction; +import com.megacrit.cardcrawl.cards.AbstractCard; +import com.megacrit.cardcrawl.core.AbstractCreature; +import com.megacrit.cardcrawl.core.CardCrawlGame; +import com.megacrit.cardcrawl.dungeons.AbstractDungeon; +import com.megacrit.cardcrawl.localization.PowerStrings; +import com.megacrit.cardcrawl.powers.AbstractPower; +import com.megacrit.cardcrawl.powers.DexterityPower; +import hemomancer.HemomancerMod; +import hemomancer.util.TextureLoader; + +import static hemomancer.HemomancerMod.makePowerPath; + +public class CommonPower extends AbstractPower implements CloneablePowerInterface { + public AbstractCreature source; + + public static final String POWER_ID = HemomancerMod.makeID("CommonPower"); + private static final PowerStrings powerStrings = CardCrawlGame.languagePack.getPowerStrings(POWER_ID); + public static final String NAME = powerStrings.NAME; + public static final String[] DESCRIPTIONS = powerStrings.DESCRIPTIONS; + + private static final Texture tex84 = TextureLoader.getTexture(makePowerPath("placeholder_power84.png")); + private static final Texture tex32 = TextureLoader.getTexture(makePowerPath("placeholder_power32.png")); + + public CommonPower(final AbstractCreature owner, final AbstractCreature source, final int amount) { + name = NAME; + ID = POWER_ID; + + this.owner = owner; + this.amount = amount; + this.source = source; + + type = PowerType.BUFF; + isTurnBased = false; + + + this.region128 = new TextureAtlas.AtlasRegion(tex84, 0, 0, 84, 84); + this.region48 = new TextureAtlas.AtlasRegion(tex32, 0, 0, 32, 32); + + updateDescription(); + } + + @Override + public void onUseCard(final AbstractCard card, final UseCardAction action) { + AbstractDungeon.actionManager.addToBottom(new ApplyPowerAction(owner, owner, + new DexterityPower(owner, amount), amount)); + } + + @Override + public void atEndOfTurn(final boolean isPlayer) { + int count = 0; + for (final AbstractCard c : AbstractDungeon.actionManager.cardsPlayedThisTurn) { + ++count; + } + + if (count > 0) { + flash(); + for (int i = 0; i < count; ++i) { + AbstractDungeon.actionManager.addToBottom( + new ReducePowerAction(owner, owner, DexterityPower.POWER_ID, amount)); + } + } + } + + @Override + public void updateDescription() { + if (amount == 1) { + description = DESCRIPTIONS[0] + amount + DESCRIPTIONS[1]; + } else if (amount > 1) { + description = DESCRIPTIONS[0] + amount + DESCRIPTIONS[2]; + } + } + + @Override + public AbstractPower makeCopy() { + return new CommonPower(owner, source, amount); + } +} diff --git a/src/main/java/hemomancer/powers/RarePower.java b/src/main/java/hemomancer/powers/RarePower.java new file mode 100644 index 0000000..8f358e7 --- /dev/null +++ b/src/main/java/hemomancer/powers/RarePower.java @@ -0,0 +1,72 @@ +package hemomancer.powers; + +import basemod.interfaces.CloneablePowerInterface; +import com.badlogic.gdx.graphics.Texture; +import com.badlogic.gdx.graphics.g2d.TextureAtlas; +import com.megacrit.cardcrawl.actions.utility.QueueCardAction; +import com.megacrit.cardcrawl.cards.AbstractCard; +import com.megacrit.cardcrawl.core.AbstractCreature; +import com.megacrit.cardcrawl.core.CardCrawlGame; +import com.megacrit.cardcrawl.dungeons.AbstractDungeon; +import com.megacrit.cardcrawl.localization.PowerStrings; +import com.megacrit.cardcrawl.monsters.AbstractMonster; +import com.megacrit.cardcrawl.powers.AbstractPower; +import hemomancer.HemomancerMod; +import hemomancer.cards.HemomancerRareAttack; +import hemomancer.util.TextureLoader; + +public class RarePower extends AbstractPower implements CloneablePowerInterface { + public AbstractCreature source; + + public static final String POWER_ID = HemomancerMod.makeID("RarePower"); + private static final PowerStrings powerStrings = CardCrawlGame.languagePack.getPowerStrings(POWER_ID); + public static final String NAME = powerStrings.NAME; + public static final String[] DESCRIPTIONS = powerStrings.DESCRIPTIONS; + + private static final Texture tex84 = TextureLoader.getTexture("hemomancerResources/images/powers/placeholder_power84.png"); + private static final Texture tex32 = TextureLoader.getTexture("hemomancerResources/images/powers/placeholder_power32.png"); + + public RarePower(final AbstractCreature owner, final AbstractCreature source, final int amount) { + name = NAME; + ID = POWER_ID; + + this.owner = owner; + this.amount = amount; + this.source = source; + + type = PowerType.DEBUFF; + isTurnBased = false; + + this.region128 = new TextureAtlas.AtlasRegion(tex84, 0, 0, 84, 84); + this.region48 = new TextureAtlas.AtlasRegion(tex32, 0, 0, 32, 32); + + updateDescription(); + } + + @Override + public void atStartOfTurn() { + AbstractCard playCard = new HemomancerRareAttack(); + AbstractMonster targetMonster = AbstractDungeon.getRandomMonster(); + playCard.freeToPlayOnce = true; + + if (playCard.type != AbstractCard.CardType.POWER) { + playCard.purgeOnUse = true; + } + + AbstractDungeon.actionManager.addToBottom(new QueueCardAction(playCard, targetMonster)); + } + + @Override + public void updateDescription() { + if (amount == 1) { + description = DESCRIPTIONS[0] + amount + DESCRIPTIONS[1]; + } else if (amount > 1) { + description = DESCRIPTIONS[0] + amount + DESCRIPTIONS[2]; + } + } + + @Override + public AbstractPower makeCopy() { + return new RarePower(owner, source, amount); + } +} diff --git a/src/main/java/hemomancer/relics/BloodMistRelic.java b/src/main/java/hemomancer/relics/BloodMistRelic.java new file mode 100644 index 0000000..05d6743 --- /dev/null +++ b/src/main/java/hemomancer/relics/BloodMistRelic.java @@ -0,0 +1,27 @@ +package hemomancer.relics; + +import basemod.abstracts.CustomRelic; +import com.badlogic.gdx.graphics.Texture; +import com.megacrit.cardcrawl.actions.defect.ChannelAction; +import com.megacrit.cardcrawl.dungeons.AbstractDungeon; +import hemomancer.HemomancerMod; +import hemomancer.orbs.BloodMistOrb; +import hemomancer.orbs.DefaultOrb; +import hemomancer.util.TextureLoader; + + +public class BloodMistRelic extends CustomRelic { + public static final String ID = HemomancerMod.makeID("BloodMistRelic"); + + private static final Texture IMG = TextureLoader.getTexture(HemomancerMod.makeRelicPath("placeholder_relic.png")); + private static final Texture OUTLINE = TextureLoader.getTexture(HemomancerMod.makeRelicOutlinePath("placeholder_relic.png")); + + public BloodMistRelic() { + super(ID, IMG, OUTLINE, RelicTier.STARTER, LandingSound.CLINK); + } + + @Override + public void atBattleStartPreDraw() { + AbstractDungeon.actionManager.addToBottom(new ChannelAction(new BloodMistOrb())); + } +} diff --git a/src/main/java/hemomancer/relics/BottledPlaceholderRelic.java b/src/main/java/hemomancer/relics/BottledPlaceholderRelic.java new file mode 100644 index 0000000..27386b8 --- /dev/null +++ b/src/main/java/hemomancer/relics/BottledPlaceholderRelic.java @@ -0,0 +1,151 @@ +package hemomancer.relics; + +import basemod.BaseMod; +import basemod.abstracts.CustomBottleRelic; +import basemod.abstracts.CustomRelic; +import basemod.abstracts.CustomSavable; +import com.badlogic.gdx.graphics.Texture; +import com.evacipated.cardcrawl.mod.stslib.actions.common.AutoplayCardAction; +import com.evacipated.cardcrawl.mod.stslib.fields.cards.AbstractCard.AutoplayField; +import com.megacrit.cardcrawl.actions.utility.UseCardAction; +import com.megacrit.cardcrawl.cards.AbstractCard; +import com.megacrit.cardcrawl.cards.CardGroup; +import com.megacrit.cardcrawl.dungeons.AbstractDungeon; +import com.megacrit.cardcrawl.helpers.FontHelper; +import com.megacrit.cardcrawl.helpers.PowerTip; +import com.megacrit.cardcrawl.relics.AbstractRelic; +import com.megacrit.cardcrawl.rooms.AbstractRoom; +import hemomancer.HemomancerMod; +import hemomancer.patches.relics.BottledPlaceholderField; +import hemomancer.util.TextureLoader; + +import java.util.Iterator; +import java.util.function.Predicate; + +import static hemomancer.HemomancerMod.makeRelicOutlinePath; +import static hemomancer.HemomancerMod.makeRelicPath; + +public class BottledPlaceholderRelic extends CustomRelic implements CustomBottleRelic, CustomSavable { + + private static AbstractCard card; + private boolean cardSelected = true; + + public static final String ID = HemomancerMod.makeID("BottledPlaceholderRelic"); + private static final Texture IMG = TextureLoader.getTexture(makeRelicPath("BottledPlaceholder.png")); + private static final Texture OUTLINE = TextureLoader.getTexture(makeRelicOutlinePath("BottledPlaceholder.png")); + + public BottledPlaceholderRelic() { + super(ID, IMG, OUTLINE, RelicTier.COMMON, LandingSound.CLINK); + tips.clear(); + tips.add(new PowerTip(name, description)); + } + + @Override + public Predicate isOnCard() { + return BottledPlaceholderField.inBottledPlaceholderField::get; + } + + @Override + public Integer onSave() { + if (card != null) { + return AbstractDungeon.player.masterDeck.group.indexOf(card); + } else { + return -1; + } + } + + @Override + public void onLoad(Integer cardIndex) { + if (cardIndex == null) { + return; + } + if (cardIndex >= 0 && cardIndex < AbstractDungeon.player.masterDeck.group.size()) { + card = AbstractDungeon.player.masterDeck.group.get(cardIndex); + if (card != null) { + BottledPlaceholderField.inBottledPlaceholderField.set(card, true); + setDescriptionAfterLoading(); + } + } + } + + @Override + public void onEquip() { + cardSelected = false; + if (AbstractDungeon.isScreenUp) { + AbstractDungeon.dynamicBanner.hide(); + AbstractDungeon.overlayMenu.cancelButton.hide(); + AbstractDungeon.previousScreen = AbstractDungeon.screen; + } + AbstractDungeon.getCurrRoom().phase = AbstractRoom.RoomPhase.INCOMPLETE; + + CardGroup group = CardGroup.getGroupWithoutBottledCards(AbstractDungeon.player.masterDeck); + AbstractDungeon.gridSelectScreen.open(group, 1, DESCRIPTIONS[3] + name + DESCRIPTIONS[2], false, false, false, false); + } + + @Override + public void onUnequip() { + if (card != null) { + AbstractCard cardInDeck = AbstractDungeon.player.masterDeck.getSpecificCard(card); + if (cardInDeck != null) { + BottledPlaceholderField.inBottledPlaceholderField.set(cardInDeck, false); + } + } + } + + @Override + public void update() { + super.update(); + if (!cardSelected && !AbstractDungeon.gridSelectScreen.selectedCards.isEmpty()) { + cardSelected = true; + card = AbstractDungeon.gridSelectScreen.selectedCards.get(0); + + BottledPlaceholderField.inBottledPlaceholderField.set(card, true); + if (AbstractDungeon.getCurrRoom().phase == AbstractRoom.RoomPhase.INCOMPLETE) { + AbstractDungeon.getCurrRoom().phase = AbstractRoom.RoomPhase.COMPLETE; + } + AbstractDungeon.getCurrRoom().phase = AbstractRoom.RoomPhase.COMPLETE; + AbstractDungeon.gridSelectScreen.selectedCards.clear(); + setDescriptionAfterLoading(); + } + } + + public void onUseCard(AbstractCard targetCard, UseCardAction useCardAction) { + boolean fullHandDialog = false; + for (Iterator it = AbstractDungeon.player.drawPile.group.iterator(); it.hasNext(); ) { + AbstractCard card = it.next(); + if (BottledPlaceholderField.inBottledPlaceholderField.get(card)) { + this.flash(); + it.remove(); + if (AbstractDungeon.player.hand.size() < BaseMod.MAX_HAND_SIZE) { + if (AutoplayField.autoplay.get(card)) { + AbstractDungeon.actionManager.addToBottom(new AutoplayCardAction(card, AbstractDungeon.player.hand)); + } + card.triggerWhenDrawn(); + AbstractDungeon.player.drawPile.moveToHand(card, AbstractDungeon.player.drawPile); + + for (AbstractRelic r : AbstractDungeon.player.relics) { + r.onCardDraw(card); + } + } else { + if (!fullHandDialog) { + AbstractDungeon.player.createHandIsFullDialog(); + fullHandDialog = true; + } + AbstractDungeon.player.drawPile.moveToDiscardPile(card); + } + } + } + } + + public void setDescriptionAfterLoading() { + this.description = DESCRIPTIONS[1] + FontHelper.colorString(card.name, "y") + DESCRIPTIONS[2]; + this.tips.clear(); + this.tips.add(new PowerTip(this.name, this.description)); + this.initializeTips(); + } + + @Override + public String getUpdatedDescription() { + return DESCRIPTIONS[0]; + } +} diff --git a/src/main/java/hemomancer/relics/DefaultClickableRelic.java b/src/main/java/hemomancer/relics/DefaultClickableRelic.java new file mode 100644 index 0000000..98f1bf8 --- /dev/null +++ b/src/main/java/hemomancer/relics/DefaultClickableRelic.java @@ -0,0 +1,75 @@ +package hemomancer.relics; + +import basemod.abstracts.CustomRelic; +import com.badlogic.gdx.graphics.Texture; +import com.evacipated.cardcrawl.mod.stslib.relics.ClickableRelic; +import com.megacrit.cardcrawl.actions.animations.TalkAction; +import com.megacrit.cardcrawl.actions.animations.VFXAction; +import com.megacrit.cardcrawl.actions.defect.EvokeOrbAction; +import com.megacrit.cardcrawl.actions.utility.SFXAction; +import com.megacrit.cardcrawl.dungeons.AbstractDungeon; +import com.megacrit.cardcrawl.helpers.PowerTip; +import com.megacrit.cardcrawl.rooms.AbstractRoom; +import com.megacrit.cardcrawl.vfx.CollectorCurseEffect; +import hemomancer.HemomancerMod; +import hemomancer.util.TextureLoader; + +import static hemomancer.HemomancerMod.makeRelicOutlinePath; +import static hemomancer.HemomancerMod.makeRelicPath; + +public class DefaultClickableRelic extends CustomRelic implements ClickableRelic { + + public static final String ID = HemomancerMod.makeID("DefaultClickableRelic"); + + private static final Texture IMG = TextureLoader.getTexture(makeRelicPath("default_clickable_relic.png")); + private static final Texture OUTLINE = TextureLoader.getTexture(makeRelicOutlinePath("default_clickable_relic.png")); + + private boolean usedThisTurn = false; + + public DefaultClickableRelic() { + super(ID, IMG, OUTLINE, RelicTier.COMMON, LandingSound.CLINK); + + tips.clear(); + tips.add(new PowerTip(name, description)); + } + + @Override + public void onRightClick() { + if (!isObtained || usedThisTurn) { + return; + } + if (AbstractDungeon.getCurrRoom() != null && AbstractDungeon.getCurrRoom().phase == AbstractRoom.RoomPhase.COMBAT) { + usedThisTurn = true; + flash(); + stopPulse(); + + AbstractDungeon.actionManager.addToBottom(new TalkAction(true, DESCRIPTIONS[1], 4.0f, 2.0f)); + AbstractDungeon.actionManager.addToBottom(new SFXAction("MONSTER_COLLECTOR_DEBUFF")); + AbstractDungeon.actionManager.addToBottom(new VFXAction( + new CollectorCurseEffect(AbstractDungeon.getRandomMonster().hb.cX, AbstractDungeon.getRandomMonster().hb.cY), 2.0F)); + + AbstractDungeon.actionManager.addToBottom(new EvokeOrbAction(1)); + } + } + + public void atTurnStart() { + usedThisTurn = false; + beginLongPulse(); + } + + @Override + public void atPreBattle() { + usedThisTurn = false; + beginLongPulse(); + } + + @Override + public void onVictory() { + stopPulse(); + } + + @Override + public String getUpdatedDescription() { + return DESCRIPTIONS[0]; + } +} diff --git a/src/main/java/hemomancer/relics/PlaceholderRelic.java b/src/main/java/hemomancer/relics/PlaceholderRelic.java new file mode 100644 index 0000000..2cf8d12 --- /dev/null +++ b/src/main/java/hemomancer/relics/PlaceholderRelic.java @@ -0,0 +1,42 @@ +package hemomancer.relics; + +import basemod.abstracts.CustomRelic; +import com.badlogic.gdx.graphics.Texture; +import com.megacrit.cardcrawl.dungeons.AbstractDungeon; +import hemomancer.HemomancerMod; +import hemomancer.util.TextureLoader; + +import static hemomancer.HemomancerMod.makeRelicOutlinePath; +import static hemomancer.HemomancerMod.makeRelicPath; + +public class PlaceholderRelic extends CustomRelic { + + public static final String ID = HemomancerMod.makeID("PlaceholderRelic"); + + private static final Texture IMG = TextureLoader.getTexture(makeRelicPath("placeholder_relic.png")); + private static final Texture OUTLINE = TextureLoader.getTexture(makeRelicOutlinePath("placeholder_relic.png")); + + public PlaceholderRelic() { + super(ID, IMG, OUTLINE, RelicTier.STARTER, LandingSound.MAGICAL); + } + + @Override + public void atBattleStartPreDraw() { + flash(); + } + + @Override + public void onEquip() { + AbstractDungeon.player.energy.energyMaster += 1; + } + + @Override + public void onUnequip() { + AbstractDungeon.player.energy.energyMaster -= 1; + } + + @Override + public String getUpdatedDescription() { + return DESCRIPTIONS[0]; + } +} diff --git a/src/main/java/hemomancer/relics/PlaceholderRelic2.java b/src/main/java/hemomancer/relics/PlaceholderRelic2.java new file mode 100644 index 0000000..6127ec8 --- /dev/null +++ b/src/main/java/hemomancer/relics/PlaceholderRelic2.java @@ -0,0 +1,37 @@ +package hemomancer.relics; + +import basemod.abstracts.CustomRelic; +import com.badlogic.gdx.graphics.Texture; +import com.megacrit.cardcrawl.actions.common.ApplyPowerAction; +import com.megacrit.cardcrawl.actions.common.RelicAboveCreatureAction; +import com.megacrit.cardcrawl.dungeons.AbstractDungeon; +import com.megacrit.cardcrawl.powers.StrengthPower; +import hemomancer.HemomancerMod; +import hemomancer.util.TextureLoader; + +import static hemomancer.HemomancerMod.makeRelicOutlinePath; +import static hemomancer.HemomancerMod.makeRelicPath; + +public class PlaceholderRelic2 extends CustomRelic { + + public static final String ID = HemomancerMod.makeID("PlaceholderRelic2"); + + private static final Texture IMG = TextureLoader.getTexture(makeRelicPath("placeholder_relic2.png")); + private static final Texture OUTLINE = TextureLoader.getTexture(makeRelicOutlinePath("placeholder_relic2.png")); + + public PlaceholderRelic2() { + super(ID, IMG, OUTLINE, RelicTier.COMMON, LandingSound.FLAT); + } + + @Override + public void atBattleStart() { + flash(); + AbstractDungeon.actionManager.addToTop(new ApplyPowerAction(AbstractDungeon.player, AbstractDungeon.player, new StrengthPower(AbstractDungeon.player, 1), 1)); + AbstractDungeon.actionManager.addToTop(new RelicAboveCreatureAction(AbstractDungeon.player, this)); + } + + @Override + public String getUpdatedDescription() { + return DESCRIPTIONS[0]; + } +} diff --git a/src/main/java/hemomancer/util/IDCheckDontTouchPls.java b/src/main/java/hemomancer/util/IDCheckDontTouchPls.java new file mode 100644 index 0000000..43dbb1d --- /dev/null +++ b/src/main/java/hemomancer/util/IDCheckDontTouchPls.java @@ -0,0 +1,10 @@ +package hemomancer.util; + +public class IDCheckDontTouchPls { + public String DEFAULTID; + public String DEVID; + public String EXCEPTION; + public String PACKAGE_EXCEPTION; + public String RESOURCE_FOLDER_EXCEPTION; + public String RESOURCES; +} diff --git a/src/main/java/hemomancer/util/TextureLoader.java b/src/main/java/hemomancer/util/TextureLoader.java new file mode 100644 index 0000000..5dd91fa --- /dev/null +++ b/src/main/java/hemomancer/util/TextureLoader.java @@ -0,0 +1,45 @@ +package hemomancer.util; + +import com.badlogic.gdx.graphics.Texture; +import com.badlogic.gdx.graphics.Texture.TextureFilter; +import com.badlogic.gdx.utils.GdxRuntimeException; +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; + +import java.util.HashMap; + +public class TextureLoader { + private static HashMap textures = new HashMap(); + public static final Logger logger = LogManager.getLogger(TextureLoader.class.getName()); + + /** + * @param textureString - String path to the texture you want to load relative to resources, + * Example: "theDefaultResources/images/ui/missing_texture.png" + * @return com.badlogic.gdx.graphics.Texture - The texture from the path provided + */ + public static Texture getTexture(final String textureString) { + if (textures.get(textureString) == null) { + try { + loadTexture(textureString); + } catch (GdxRuntimeException e) { + logger.error("Could not find texture: " + textureString); + return getTexture("hemomancerResources/images/ui/missing_texture.png"); + } + } + return textures.get(textureString); + } + + /** + * Creates an instance of the texture, applies a linear filter to it, and places it in the HashMap + * + * @param textureString - String path to the texture you want to load relative to resources, + * Example: "img/ui/missingtexture.png" + * @throws GdxRuntimeException + */ + private static void loadTexture(final String textureString) throws GdxRuntimeException { + logger.info("DefaultMod | Loading Texture: " + textureString); + Texture texture = new Texture(textureString); + texture.setFilter(TextureFilter.Linear, TextureFilter.Linear); + textures.put(textureString, texture); + } +} diff --git a/src/main/java/hemomancer/variables/DefaultCustomVariable.java b/src/main/java/hemomancer/variables/DefaultCustomVariable.java new file mode 100644 index 0000000..dfde39b --- /dev/null +++ b/src/main/java/hemomancer/variables/DefaultCustomVariable.java @@ -0,0 +1,46 @@ +package hemomancer.variables; + +import basemod.abstracts.DynamicVariable; +import com.megacrit.cardcrawl.cards.AbstractCard; +import com.megacrit.cardcrawl.ui.panels.EnergyPanel; + +import static hemomancer.HemomancerMod.makeID; + +public class DefaultCustomVariable extends DynamicVariable { + + private int currentValue = 0; + + @Override + public String key() { + return makeID("ENERGY_DAMAGE"); + } + + @Override + public boolean isModified(AbstractCard card) { + return card.isDamageModified; + } + + @Override + public int value(AbstractCard card) { + return getCurrentValue(); + } + + @Override + public int baseValue(AbstractCard card) { + return card.baseDamage * EnergyPanel.getCurrentEnergy(); + } + + @Override + public boolean upgraded(AbstractCard card) { + return card.upgradedDamage; + } + + + public int getCurrentValue() { + return currentValue; + } + + public void setCurrentValue(int currentValue) { + this.currentValue = currentValue; + } +} \ No newline at end of file diff --git a/src/main/java/hemomancer/variables/DefaultSecondMagicNumber.java b/src/main/java/hemomancer/variables/DefaultSecondMagicNumber.java new file mode 100644 index 0000000..9689304 --- /dev/null +++ b/src/main/java/hemomancer/variables/DefaultSecondMagicNumber.java @@ -0,0 +1,35 @@ +package hemomancer.variables; + +import basemod.abstracts.DynamicVariable; +import com.megacrit.cardcrawl.cards.AbstractCard; +import hemomancer.cards.AbstractHemomancerCard; + +import static hemomancer.HemomancerMod.makeID; + +public class DefaultSecondMagicNumber extends DynamicVariable { + + @Override + public String key() { + return makeID("SecondMagic"); + } + + @Override + public boolean isModified(AbstractCard card) { + return ((AbstractHemomancerCard) card).isDefaultSecondMagicNumberModified; + } + + @Override + public int value(AbstractCard card) { + return ((AbstractHemomancerCard) card).defaultSecondMagicNumber; + } + + @Override + public int baseValue(AbstractCard card) { + return ((AbstractHemomancerCard) card).defaultBaseSecondMagicNumber; + } + + @Override + public boolean upgraded(AbstractCard card) { + return ((AbstractHemomancerCard) card).upgradedDefaultSecondMagicNumber; + } +} \ No newline at end of file diff --git a/src/main/java/hemomancer/variables/HemomancerBloodMistVar.java b/src/main/java/hemomancer/variables/HemomancerBloodMistVar.java new file mode 100644 index 0000000..0fd494c --- /dev/null +++ b/src/main/java/hemomancer/variables/HemomancerBloodMistVar.java @@ -0,0 +1,32 @@ +package hemomancer.variables; + +import basemod.abstracts.DynamicVariable; +import com.megacrit.cardcrawl.cards.AbstractCard; +import hemomancer.HemomancerMod; + +public class HemomancerBloodMistVar extends DynamicVariable { + @Override + public String key() { + return HemomancerMod.makeID("BloodMistVar"); + } + + @Override + public boolean isModified(AbstractCard abstractCard) { + return false; + } + + @Override + public int value(AbstractCard abstractCard) { + return 0; + } + + @Override + public int baseValue(AbstractCard abstractCard) { + return 0; + } + + @Override + public boolean upgraded(AbstractCard abstractCard) { + return false; + } +} diff --git a/src/main/resources/IDCheckStringsDONT-EDIT-AT-ALL.json b/src/main/resources/IDCheckStringsDONT-EDIT-AT-ALL.json new file mode 100644 index 0000000..30865e3 --- /dev/null +++ b/src/main/resources/IDCheckStringsDONT-EDIT-AT-ALL.json @@ -0,0 +1,8 @@ +{ + "DEFAULTID": "theDefault", + "DEVID": "theDefaultDev", + "EXCEPTION": "Go to your constructor in your class with SpireInitializer and change your mod ID from \"theDefault\"", + "PACKAGE_EXCEPTION": "Rename your theDefault folder (package) to match your mod ID! ", + "RESOURCE_FOLDER_EXCEPTION": "Rename your theDefaultResources folder to match your mod ID!", + "RESOURCES": "Resources" +} diff --git a/src/main/resources/ModTheSpire.json b/src/main/resources/ModTheSpire.json new file mode 100644 index 0000000..1984ce7 --- /dev/null +++ b/src/main/resources/ModTheSpire.json @@ -0,0 +1,12 @@ +{ + "modid": "${project.artifactId}", + "name": "${project.name}", + "author_list": ["Virgil"], + "description": "${project.description}", + "version": "${project.version}", + "sts_version": "${SlayTheSpire.version}", + "mts_version": "${ModTheSpire.version}", + "dependencies": ["basemod", "stslib"], + "update_json": "" +} + diff --git a/src/main/resources/hemomancerResources/images/1024/Cardback.psd b/src/main/resources/hemomancerResources/images/1024/Cardback.psd new file mode 100644 index 0000000..f36b3ad Binary files /dev/null and b/src/main/resources/hemomancerResources/images/1024/Cardback.psd differ diff --git a/src/main/resources/hemomancerResources/images/1024/bg_attack_default_gray.png b/src/main/resources/hemomancerResources/images/1024/bg_attack_default_gray.png new file mode 100644 index 0000000..c3d82ec Binary files /dev/null and b/src/main/resources/hemomancerResources/images/1024/bg_attack_default_gray.png differ diff --git a/src/main/resources/hemomancerResources/images/1024/bg_power_default_gray.png b/src/main/resources/hemomancerResources/images/1024/bg_power_default_gray.png new file mode 100644 index 0000000..66ecd37 Binary files /dev/null and b/src/main/resources/hemomancerResources/images/1024/bg_power_default_gray.png differ diff --git a/src/main/resources/hemomancerResources/images/1024/bg_skill_default_gray.png b/src/main/resources/hemomancerResources/images/1024/bg_skill_default_gray.png new file mode 100644 index 0000000..4b95662 Binary files /dev/null and b/src/main/resources/hemomancerResources/images/1024/bg_skill_default_gray.png differ diff --git a/src/main/resources/hemomancerResources/images/1024/card_default_gray_orb.png b/src/main/resources/hemomancerResources/images/1024/card_default_gray_orb.png new file mode 100644 index 0000000..e31958e Binary files /dev/null and b/src/main/resources/hemomancerResources/images/1024/card_default_gray_orb.png differ diff --git a/src/main/resources/hemomancerResources/images/1024/card_default_gray_orb.psd b/src/main/resources/hemomancerResources/images/1024/card_default_gray_orb.psd new file mode 100644 index 0000000..6110d01 Binary files /dev/null and b/src/main/resources/hemomancerResources/images/1024/card_default_gray_orb.psd differ diff --git a/src/main/resources/hemomancerResources/images/512/bg_attack_default_gray.png b/src/main/resources/hemomancerResources/images/512/bg_attack_default_gray.png new file mode 100644 index 0000000..82d9a26 Binary files /dev/null and b/src/main/resources/hemomancerResources/images/512/bg_attack_default_gray.png differ diff --git a/src/main/resources/hemomancerResources/images/512/bg_power_default_gray.png b/src/main/resources/hemomancerResources/images/512/bg_power_default_gray.png new file mode 100644 index 0000000..e0803a3 Binary files /dev/null and b/src/main/resources/hemomancerResources/images/512/bg_power_default_gray.png differ diff --git a/src/main/resources/hemomancerResources/images/512/bg_skill_default_gray.png b/src/main/resources/hemomancerResources/images/512/bg_skill_default_gray.png new file mode 100644 index 0000000..0393d4d Binary files /dev/null and b/src/main/resources/hemomancerResources/images/512/bg_skill_default_gray.png differ diff --git a/src/main/resources/hemomancerResources/images/512/card_default_gray_orb.png b/src/main/resources/hemomancerResources/images/512/card_default_gray_orb.png new file mode 100644 index 0000000..28f78fb Binary files /dev/null and b/src/main/resources/hemomancerResources/images/512/card_default_gray_orb.png differ diff --git a/src/main/resources/hemomancerResources/images/512/card_small_orb.png b/src/main/resources/hemomancerResources/images/512/card_small_orb.png new file mode 100644 index 0000000..298b768 Binary files /dev/null and b/src/main/resources/hemomancerResources/images/512/card_small_orb.png differ diff --git a/src/main/resources/hemomancerResources/images/Badge.png b/src/main/resources/hemomancerResources/images/Badge.png new file mode 100644 index 0000000..246ddf4 Binary files /dev/null and b/src/main/resources/hemomancerResources/images/Badge.png differ diff --git a/src/main/resources/hemomancerResources/images/cards/Attack.png b/src/main/resources/hemomancerResources/images/cards/Attack.png new file mode 100644 index 0000000..d94b642 Binary files /dev/null and b/src/main/resources/hemomancerResources/images/cards/Attack.png differ diff --git a/src/main/resources/hemomancerResources/images/cards/Attack_p.png b/src/main/resources/hemomancerResources/images/cards/Attack_p.png new file mode 100644 index 0000000..ba43e0b Binary files /dev/null and b/src/main/resources/hemomancerResources/images/cards/Attack_p.png differ diff --git a/src/main/resources/hemomancerResources/images/cards/Attack_p.psd b/src/main/resources/hemomancerResources/images/cards/Attack_p.psd new file mode 100644 index 0000000..d6b5a68 Binary files /dev/null and b/src/main/resources/hemomancerResources/images/cards/Attack_p.psd differ diff --git a/src/main/resources/hemomancerResources/images/cards/Power.png b/src/main/resources/hemomancerResources/images/cards/Power.png new file mode 100644 index 0000000..10692a1 Binary files /dev/null and b/src/main/resources/hemomancerResources/images/cards/Power.png differ diff --git a/src/main/resources/hemomancerResources/images/cards/Power_p.png b/src/main/resources/hemomancerResources/images/cards/Power_p.png new file mode 100644 index 0000000..1d991fd Binary files /dev/null and b/src/main/resources/hemomancerResources/images/cards/Power_p.png differ diff --git a/src/main/resources/hemomancerResources/images/cards/Power_p.psd b/src/main/resources/hemomancerResources/images/cards/Power_p.psd new file mode 100644 index 0000000..06dbe76 Binary files /dev/null and b/src/main/resources/hemomancerResources/images/cards/Power_p.psd differ diff --git a/src/main/resources/hemomancerResources/images/cards/Skill.png b/src/main/resources/hemomancerResources/images/cards/Skill.png new file mode 100644 index 0000000..ca870bc Binary files /dev/null and b/src/main/resources/hemomancerResources/images/cards/Skill.png differ diff --git a/src/main/resources/hemomancerResources/images/cards/Skill_p.png b/src/main/resources/hemomancerResources/images/cards/Skill_p.png new file mode 100644 index 0000000..3b4a2a7 Binary files /dev/null and b/src/main/resources/hemomancerResources/images/cards/Skill_p.png differ diff --git a/src/main/resources/hemomancerResources/images/cards/Skill_p.psd b/src/main/resources/hemomancerResources/images/cards/Skill_p.psd new file mode 100644 index 0000000..df96703 Binary files /dev/null and b/src/main/resources/hemomancerResources/images/cards/Skill_p.psd differ diff --git a/src/main/resources/hemomancerResources/images/cards/beautifu -bouquet color by Studio 7042.jpg b/src/main/resources/hemomancerResources/images/cards/beautifu -bouquet color by Studio 7042.jpg new file mode 100644 index 0000000..ed6f959 Binary files /dev/null and b/src/main/resources/hemomancerResources/images/cards/beautifu -bouquet color by Studio 7042.jpg differ diff --git a/src/main/resources/hemomancerResources/images/cards/blood_attack.png b/src/main/resources/hemomancerResources/images/cards/blood_attack.png new file mode 100644 index 0000000..e3d2ba0 Binary files /dev/null and b/src/main/resources/hemomancerResources/images/cards/blood_attack.png differ diff --git a/src/main/resources/hemomancerResources/images/cards/blood_block.png b/src/main/resources/hemomancerResources/images/cards/blood_block.png new file mode 100644 index 0000000..8854f1a Binary files /dev/null and b/src/main/resources/hemomancerResources/images/cards/blood_block.png differ diff --git a/src/main/resources/hemomancerResources/images/cards/blood_flay.png b/src/main/resources/hemomancerResources/images/cards/blood_flay.png new file mode 100644 index 0000000..fff27bf Binary files /dev/null and b/src/main/resources/hemomancerResources/images/cards/blood_flay.png differ diff --git a/src/main/resources/hemomancerResources/images/cards/blood_pump.png b/src/main/resources/hemomancerResources/images/cards/blood_pump.png new file mode 100644 index 0000000..aca3cc7 Binary files /dev/null and b/src/main/resources/hemomancerResources/images/cards/blood_pump.png differ diff --git a/src/main/resources/hemomancerResources/images/char/defaultCharacter/Spriter/object1.png b/src/main/resources/hemomancerResources/images/char/defaultCharacter/Spriter/object1.png new file mode 100644 index 0000000..0a6c65d Binary files /dev/null and b/src/main/resources/hemomancerResources/images/char/defaultCharacter/Spriter/object1.png differ diff --git a/src/main/resources/hemomancerResources/images/char/defaultCharacter/Spriter/object2.png b/src/main/resources/hemomancerResources/images/char/defaultCharacter/Spriter/object2.png new file mode 100644 index 0000000..282f29d Binary files /dev/null and b/src/main/resources/hemomancerResources/images/char/defaultCharacter/Spriter/object2.png differ diff --git a/src/main/resources/hemomancerResources/images/char/defaultCharacter/Spriter/object3.png b/src/main/resources/hemomancerResources/images/char/defaultCharacter/Spriter/object3.png new file mode 100644 index 0000000..ac63e7d Binary files /dev/null and b/src/main/resources/hemomancerResources/images/char/defaultCharacter/Spriter/object3.png differ diff --git a/src/main/resources/hemomancerResources/images/char/defaultCharacter/Spriter/skeleton.png b/src/main/resources/hemomancerResources/images/char/defaultCharacter/Spriter/skeleton.png new file mode 100644 index 0000000..4547809 Binary files /dev/null and b/src/main/resources/hemomancerResources/images/char/defaultCharacter/Spriter/skeleton.png differ diff --git a/src/main/resources/hemomancerResources/images/char/defaultCharacter/Spriter/theDefaultAnimation.autosave.scml b/src/main/resources/hemomancerResources/images/char/defaultCharacter/Spriter/theDefaultAnimation.autosave.scml new file mode 100644 index 0000000..38ddcab --- /dev/null +++ b/src/main/resources/hemomancerResources/images/char/defaultCharacter/Spriter/theDefaultAnimation.autosave.scml @@ -0,0 +1,149 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/main/resources/hemomancerResources/images/char/defaultCharacter/Spriter/theDefaultAnimation.scml b/src/main/resources/hemomancerResources/images/char/defaultCharacter/Spriter/theDefaultAnimation.scml new file mode 100644 index 0000000..38ddcab --- /dev/null +++ b/src/main/resources/hemomancerResources/images/char/defaultCharacter/Spriter/theDefaultAnimation.scml @@ -0,0 +1,149 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/main/resources/hemomancerResources/images/char/defaultCharacter/corpse.png b/src/main/resources/hemomancerResources/images/char/defaultCharacter/corpse.png new file mode 100644 index 0000000..a464bd7 Binary files /dev/null and b/src/main/resources/hemomancerResources/images/char/defaultCharacter/corpse.png differ diff --git a/src/main/resources/hemomancerResources/images/char/defaultCharacter/main2.png b/src/main/resources/hemomancerResources/images/char/defaultCharacter/main2.png new file mode 100644 index 0000000..a046091 Binary files /dev/null and b/src/main/resources/hemomancerResources/images/char/defaultCharacter/main2.png differ diff --git a/src/main/resources/hemomancerResources/images/char/defaultCharacter/orb/layer1.png b/src/main/resources/hemomancerResources/images/char/defaultCharacter/orb/layer1.png new file mode 100644 index 0000000..55519fc Binary files /dev/null and b/src/main/resources/hemomancerResources/images/char/defaultCharacter/orb/layer1.png differ diff --git a/src/main/resources/hemomancerResources/images/char/defaultCharacter/orb/layer1d.png b/src/main/resources/hemomancerResources/images/char/defaultCharacter/orb/layer1d.png new file mode 100644 index 0000000..6ec30c4 Binary files /dev/null and b/src/main/resources/hemomancerResources/images/char/defaultCharacter/orb/layer1d.png differ diff --git a/src/main/resources/hemomancerResources/images/char/defaultCharacter/orb/layer2.png b/src/main/resources/hemomancerResources/images/char/defaultCharacter/orb/layer2.png new file mode 100644 index 0000000..958f977 Binary files /dev/null and b/src/main/resources/hemomancerResources/images/char/defaultCharacter/orb/layer2.png differ diff --git a/src/main/resources/hemomancerResources/images/char/defaultCharacter/orb/layer2d.png b/src/main/resources/hemomancerResources/images/char/defaultCharacter/orb/layer2d.png new file mode 100644 index 0000000..2f86089 Binary files /dev/null and b/src/main/resources/hemomancerResources/images/char/defaultCharacter/orb/layer2d.png differ diff --git a/src/main/resources/hemomancerResources/images/char/defaultCharacter/orb/layer3.png b/src/main/resources/hemomancerResources/images/char/defaultCharacter/orb/layer3.png new file mode 100644 index 0000000..bdcf28e Binary files /dev/null and b/src/main/resources/hemomancerResources/images/char/defaultCharacter/orb/layer3.png differ diff --git a/src/main/resources/hemomancerResources/images/char/defaultCharacter/orb/layer3d.png b/src/main/resources/hemomancerResources/images/char/defaultCharacter/orb/layer3d.png new file mode 100644 index 0000000..92e37a7 Binary files /dev/null and b/src/main/resources/hemomancerResources/images/char/defaultCharacter/orb/layer3d.png differ diff --git a/src/main/resources/hemomancerResources/images/char/defaultCharacter/orb/layer4.png b/src/main/resources/hemomancerResources/images/char/defaultCharacter/orb/layer4.png new file mode 100644 index 0000000..ebffafb Binary files /dev/null and b/src/main/resources/hemomancerResources/images/char/defaultCharacter/orb/layer4.png differ diff --git a/src/main/resources/hemomancerResources/images/char/defaultCharacter/orb/layer4d.png b/src/main/resources/hemomancerResources/images/char/defaultCharacter/orb/layer4d.png new file mode 100644 index 0000000..095f4f0 Binary files /dev/null and b/src/main/resources/hemomancerResources/images/char/defaultCharacter/orb/layer4d.png differ diff --git a/src/main/resources/hemomancerResources/images/char/defaultCharacter/orb/layer5.png b/src/main/resources/hemomancerResources/images/char/defaultCharacter/orb/layer5.png new file mode 100644 index 0000000..e13e944 Binary files /dev/null and b/src/main/resources/hemomancerResources/images/char/defaultCharacter/orb/layer5.png differ diff --git a/src/main/resources/hemomancerResources/images/char/defaultCharacter/orb/layer5d.png b/src/main/resources/hemomancerResources/images/char/defaultCharacter/orb/layer5d.png new file mode 100644 index 0000000..165ea17 Binary files /dev/null and b/src/main/resources/hemomancerResources/images/char/defaultCharacter/orb/layer5d.png differ diff --git a/src/main/resources/hemomancerResources/images/char/defaultCharacter/orb/layer6.png b/src/main/resources/hemomancerResources/images/char/defaultCharacter/orb/layer6.png new file mode 100644 index 0000000..3025403 Binary files /dev/null and b/src/main/resources/hemomancerResources/images/char/defaultCharacter/orb/layer6.png differ diff --git a/src/main/resources/hemomancerResources/images/char/defaultCharacter/orb/vfx.png b/src/main/resources/hemomancerResources/images/char/defaultCharacter/orb/vfx.png new file mode 100644 index 0000000..0163d04 Binary files /dev/null and b/src/main/resources/hemomancerResources/images/char/defaultCharacter/orb/vfx.png differ diff --git a/src/main/resources/hemomancerResources/images/char/defaultCharacter/shoulder.png b/src/main/resources/hemomancerResources/images/char/defaultCharacter/shoulder.png new file mode 100644 index 0000000..944b286 Binary files /dev/null and b/src/main/resources/hemomancerResources/images/char/defaultCharacter/shoulder.png differ diff --git a/src/main/resources/hemomancerResources/images/char/defaultCharacter/shoulder2.png b/src/main/resources/hemomancerResources/images/char/defaultCharacter/shoulder2.png new file mode 100644 index 0000000..40e2170 Binary files /dev/null and b/src/main/resources/hemomancerResources/images/char/defaultCharacter/shoulder2.png differ diff --git a/src/main/resources/hemomancerResources/images/char/defaultCharacter/skeleton.atlas b/src/main/resources/hemomancerResources/images/char/defaultCharacter/skeleton.atlas new file mode 100644 index 0000000..675f9f0 --- /dev/null +++ b/src/main/resources/hemomancerResources/images/char/defaultCharacter/skeleton.atlas @@ -0,0 +1,118 @@ + +skeleton.png +size: 512,256 +format: RGBA8888 +filter: Linear,Linear +repeat: none +images/armleft + rotate: false + xy: 113, 3 + size: 67, 64 + orig: 67, 64 + offset: 0, 0 + index: -1 +images/armright + rotate: false + xy: 292, 91 + size: 70, 36 + orig: 70, 36 + offset: 0, 0 + index: -1 +images/bandage + rotate: false + xy: 472, 165 + size: 16, 17 + orig: 16, 17 + offset: 0, 0 + index: -1 +images/bandageflap + rotate: false + xy: 378, 138 + size: 32, 12 + orig: 32, 12 + offset: 0, 0 + index: -1 +images/body + rotate: false + xy: 2, 69 + size: 172, 185 + orig: 172, 185 + offset: 0, 0 + index: -1 +images/fingersleft + rotate: false + xy: 230, 57 + size: 18, 24 + orig: 18, 24 + offset: 0, 0 + index: -1 +images/fingersright + rotate: false + xy: 204, 33 + size: 24, 22 + orig: 24, 22 + offset: 0, 0 + index: -1 +images/head + rotate: false + xy: 420, 184 + size: 75, 70 + orig: 75, 70 + offset: 0, 0 + index: -1 +images/leftwing + rotate: false + xy: 326, 152 + size: 92, 102 + orig: 92, 102 + offset: 0, 0 + index: -1 +images/legleft + rotate: false + xy: 182, 2 + size: 20, 79 + orig: 20, 79 + offset: 0, 0 + index: -1 +images/legright + rotate: true + xy: 420, 163 + size: 19, 50 + orig: 19, 50 + offset: 0, 0 + index: -1 +images/rightwing + rotate: false + xy: 176, 152 + size: 148, 102 + orig: 148, 102 + offset: 0, 0 + index: -1 +images/shadow + rotate: false + xy: 176, 129 + size: 200, 21 + orig: 200, 21 + offset: 0, 0 + index: -1 +images/shoulderright + rotate: false + xy: 204, 57 + size: 24, 24 + orig: 24, 24 + offset: 0, 0 + index: -1 +images/weaponleft + rotate: true + xy: 176, 83 + size: 44, 114 + orig: 44, 114 + offset: 0, 0 + index: -1 +images/weaponright + rotate: true + xy: 2, 10 + size: 57, 109 + orig: 57, 109 + offset: 0, 0 + index: -1 diff --git a/src/main/resources/hemomancerResources/images/char/defaultCharacter/skeleton.json b/src/main/resources/hemomancerResources/images/char/defaultCharacter/skeleton.json new file mode 100644 index 0000000..cd90e61 --- /dev/null +++ b/src/main/resources/hemomancerResources/images/char/defaultCharacter/skeleton.json @@ -0,0 +1,1149 @@ +{ +"skeleton": { "hash": "SfrHV8bwE55O0EbngF18vr4bQcs", "spine": "3.4.02", "width": 269.2, "height": 290.02, "images": "" }, +"bones": [ + { "name": "root", "scaleX": -1 }, + { "name": "body", "parent": "root", "x": 1.36, "y": 127.77 }, + { "name": "armleft", "parent": "body", "length": 65, "rotation": 149.21, "x": -27.94, "y": 41.39 }, + { "name": "righthand", "parent": "root", "x": 99.91, "y": 170.65, "color": "ff3f00ff" }, + { "name": "armright", "parent": "body", "length": 35, "rotation": 9.46, "x": 29.64, "y": 35.38 }, + { "name": "forearmright", "parent": "armright", "length": 30, "rotation": 11.52, "x": 35.13, "y": -0.26 }, + { "name": "legright", "parent": "body", "length": 83.89, "rotation": -90, "x": 17.14, "y": -28.67 }, + { "name": "bandage", "parent": "legright", "x": 61.05, "y": 1.34 }, + { "name": "flap", "parent": "bandage", "length": 6, "rotation": 39.12, "x": 0.51, "y": 2.22 }, + { "name": "bone", "parent": "flap", "length": 4.66, "rotation": -14.75, "x": 5.75, "y": 0.13 }, + { "name": "bone2", "parent": "bone", "length": 5.94, "rotation": 23.46, "x": 4.66 }, + { "name": "bone3", "parent": "bone2", "length": 6.12, "rotation": 4.97, "x": 5.94 }, + { "name": "bone4", "parent": "bone3", "length": 5.58, "rotation": 36.31, "x": 6.12 }, + { "name": "fingersleft", "parent": "armleft", "x": 69.09, "y": 1.13 }, + { "name": "fingersright", "parent": "forearmright", "rotation": -29.76, "x": 32.07, "y": 3.31 }, + { "name": "head", "parent": "body", "x": -28.85, "y": 56.84 }, + { "name": "legleft", "parent": "body", "length": 83.89, "rotation": -90, "x": -28.84, "y": -28.67 }, + { "name": "shadow", "parent": "root", "x": 0.97, "y": 18.37 }, + { "name": "shoulder", "parent": "body", "x": 24.51, "y": 29.77 }, + { "name": "tailbone1", "parent": "body", "x": 27.77, "y": -55.12 }, + { "name": "tailbone2", "parent": "tailbone1", "length": 56, "x": 14.62, "y": -14.21 }, + { "name": "tailbone3", "parent": "tailbone2", "x": 42.63, "y": -0.41 }, + { "name": "weaponleft", "parent": "armleft", "length": 70, "rotation": -37.59, "x": 58.42, "y": 8.08 }, + { "name": "weaponright", "parent": "fingersright", "length": 70, "rotation": 98.38, "x": 2.18, "y": -10.79 }, + { "name": "wingleft", "parent": "body", "rotation": 168.46, "x": -42.34, "y": 74.44 }, + { "name": "wingright", "parent": "body", "rotation": 168.46, "x": 33.08, "y": 38.44 } +], +"slots": [ + { "name": "images/shadow", "bone": "shadow", "attachment": "images/shadow" }, + { "name": "images/legleft", "bone": "legleft", "attachment": "images/legleft" }, + { "name": "images/legright", "bone": "legright", "attachment": "images/legright" }, + { "name": "images/rightwing", "bone": "wingright", "attachment": "images/rightwing" }, + { "name": "images/leftwing", "bone": "wingleft", "attachment": "images/leftwing" }, + { "name": "images/armleft", "bone": "armleft", "attachment": "images/armleft" }, + { "name": "images/body", "bone": "body", "attachment": "images/body" }, + { "name": "images/weaponleft", "bone": "weaponleft", "attachment": "images/weaponleft" }, + { "name": "images/fingersleft", "bone": "fingersleft", "attachment": "images/fingersleft" }, + { "name": "images/armright", "bone": "armright", "attachment": "images/armright" }, + { "name": "images/weaponright", "bone": "weaponright", "attachment": "images/weaponright" }, + { "name": "images/fingersright", "bone": "fingersright", "attachment": "images/fingersright" }, + { "name": "images/head", "bone": "head", "attachment": "images/head" }, + { "name": "images/bandageflap", "bone": "flap", "attachment": "images/bandageflap" }, + { "name": "images/bandage", "bone": "bandage", "attachment": "images/bandage" }, + { "name": "images/shoulderright", "bone": "shoulder", "attachment": "images/shoulderright" }, + { "name": "tail", "bone": "flap" } +], +"ik": [ + { + "name": "righthand", + "bones": [ "armright", "forearmright" ], + "target": "righthand" + } +], +"skins": { + "default": { + "images/armleft": { + "images/armleft": { "x": 31.71, "y": 0.79, "rotation": -149.21, "width": 67, "height": 64 } + }, + "images/armright": { + "images/armright": { + "type": "mesh", + "uvs": [ 0, 0.53132, 0, 0.95218, 0.06105, 1, 0.17622, 0.99079, 0.21196, 0.92129, 0.33706, 0.88268, 0.43833, 0.91357, 0.54953, 0.8711, 0.64485, 0.77071, 0.76002, 0.65874, 0.87122, 0.58152, 0.95859, 0.51202, 1, 0.48113, 1, 0.2958, 0.92285, 0, 0.84342, 0.05641, 0.78186, 0.13749, 0.71037, 0.1761, 0.68456, 0.30738, 0.58726, 0.3653, 0.5118, 0.39618, 0.40656, 0.3846, 0.33507, 0.48885, 0.19607, 0.51588, 0.04119, 0.75527, 0.19607, 0.72824, 0.35096, 0.69735, 0.48003, 0.61627, 0.63293, 0.53132, 0.76995, 0.43479, 0.89107, 0.28807 ], + "triangles": [ 20, 22, 21, 27, 20, 28, 27, 22, 20, 26, 22, 27, 23, 22, 26, 25, 0, 23, 25, 23, 26, 24, 0, 25, 7, 27, 8, 26, 27, 7, 5, 25, 26, 6, 5, 26, 7, 6, 26, 4, 25, 5, 24, 25, 4, 1, 0, 24, 1, 24, 4, 4, 2, 1, 3, 2, 4, 13, 30, 15, 16, 15, 30, 13, 15, 14, 17, 30, 18, 30, 17, 16, 29, 18, 30, 30, 13, 12, 11, 29, 30, 12, 11, 30, 29, 28, 19, 29, 19, 18, 20, 19, 28, 10, 29, 11, 9, 28, 29, 10, 9, 29, 8, 28, 9, 27, 28, 8 ], + "vertices": [ 1, 4, -2.73, 8.92, 1, 1, 4, -5.21999, -6.02, 1, 1, 4, -1.29, -8.42, 1, 1, 4, 6.71, -9.42, 1, 1, 4, 9.59, -7.36, 1, 1, 4, 18.45, -7.43, 1, 2, 5, -11.55, -7.27, 0.0029, 4, 25.26, -9.68999, 0.99709, 2, 5, -3.73, -8.63, 0.21445, 4, 33.18999, -9.46, 0.78554, 2, 5, 3.78, -7.64, 0.83305, 4, 40.37, -7, 0.16694, 1, 5, 12.75, -6.76, 1, 1, 5, 21.02, -6.96, 1, 1, 5, 27.62, -6.81, 1, 1, 5, 30.73, -6.81, 1, 1, 5, 33.12, -0.58, 1, 1, 5, 31.89, 11.29, 1, 1, 5, 25.97, 11.38, 1, 1, 5, 20.9, 10.2, 1, 1, 5, 15.73, 10.69, 1, 1, 5, 12.35, 6.93, 1, 2, 5, 5.23999, 7.42, 0.86452, 4, 38.79, 8.05, 0.13547, 2, 5, -0.08, 8.27, 0.35251, 4, 33.4, 7.83, 0.64748, 2, 5, -6.8, 11.3, 0.01524, 4, 26.2, 9.45, 0.98475, 1, 4, 20.65, 6.57, 1, 1, 4, 10.89, 7.21, 1, 1, 4, -1.21, 0.49, 1, 1, 4, 9.63, -0.32, 1, 1, 4, 20.51, -1.01, 1, 1, 4, 29.9, 0.38, 1, 1, 5, 6.09, 0.69, 1, 1, 5, 16.29, 0.5, 1, 1, 5, 26.1, 2.4, 1 ], + "hull": 24, + "edges": [ 0, 2, 2, 4, 4, 6, 6, 8, 8, 10, 10, 12, 12, 14, 14, 16, 16, 18, 18, 20, 20, 22, 22, 24, 24, 26, 26, 28, 28, 30, 30, 32, 32, 34, 34, 36, 36, 38, 38, 40, 40, 42, 42, 44, 44, 46, 0, 46 ], + "width": 70, + "height": 36 + } + }, + "images/bandage": { + "images/bandage": { "rotation": 90, "width": 16, "height": 17 } + }, + "images/bandageflap": { + "images/bandageflap": { + "type": "mesh", + "uvs": [ 0.08928, 0, 0.18702, 0.09163, 0.31357, 0.25076, 0.45031, 0.37109, 0.60584, 0.45668, 0.79593, 0.54226, 0.92677, 0.60151, 1, 0.94953, 0.85349, 0.99998, 0.62806, 1, 0.41575, 0.96359, 0.23553, 0.82534, 0.07753, 0.66734, 0, 0.50276, 0, 0.04193, 0.8686, 0.77952, 0.76002, 0.76899, 0.67135, 0.72626, 0.50606, 0.7005, 0.36336, 0.60313, 0.24785, 0.50017, 0.09544, 0.36954 ], + "triangles": [ 19, 12, 20, 19, 11, 12, 12, 13, 20, 13, 21, 20, 13, 14, 21, 20, 2, 3, 20, 21, 2, 21, 14, 1, 21, 1, 2, 1, 14, 0, 11, 19, 18, 18, 19, 4, 19, 3, 4, 19, 20, 3, 10, 18, 9, 10, 11, 18, 9, 18, 17, 17, 18, 4, 9, 16, 8, 9, 17, 16, 8, 15, 7, 8, 16, 15, 15, 6, 7, 15, 16, 6, 16, 5, 6, 16, 17, 5, 5, 17, 4 ], + "vertices": [ 1, 8, -1.68, 4.67, 1, 1, 8, 1.55, 3.97, 1, 2, 9, -0.56, 2.38, 0.3674, 8, 5.81, 2.58999, 0.63259, 2, 10, 0.49, 2.71, 0.48548, 9, 4.03, 2.68, 0.5145, 2, 11, 1.76, 2.98, 0.8714, 10, 7.44, 3.12, 0.12859, 2, 12, 3.66, 3.14, 0.99492, 11, 9.81, 3.11, 0.00507, 1, 12, 7.83, 2.53, 1, 1, 12, 10.27, -1.58, 1, 1, 12, 5.61, -2.29, 1, 3, 12, -2.59999, -2.84, 0.01341, 11, 3.49, -2.82, 0.97666, 10, 9.66, -2.51, 0.00992, 3, 10, -0.8, -4.36, 0.50669, 9, 5.65, -4.32, 0.49006, 8, 10.12, -5.48, 0.00322, 3, 10, -6.52, -2.55, 6.8E-4, 9, -0.3, -4.94, 0.40141, 8, 4.19, -4.56, 0.59789, 2, 9, -5.7, -5.07, 7.7E-4, 8, -1.04999, -3.31, 0.99922, 1, 8, -3.76, -1.66, 1, 1, 8, -4.44999, 3.81, 1, 1, 12, 6.02, 0.35, 1, 1, 12, 2.54, 0.41, 1, 2, 12, -0.29, 0.94, 0.63735, 11, 5.83, 0.95, 0.36264, 2, 10, 0.68, -1.43, 0.76761, 9, 5.85, -1.04, 0.23238, 2, 9, 2.49, -0.93, 0.99847, 8, 7.92, -1.4, 0.00152, 2, 9, -1.39, -1.16999, 0.03471, 8, 4.1, -0.64, 0.96528, 1, 8, -0.93, 0.3, 1 ], + "hull": 15, + "edges": [ 0, 2, 2, 4, 4, 6, 6, 8, 8, 10, 10, 12, 12, 14, 14, 16, 16, 18, 18, 20, 20, 22, 22, 24, 24, 26, 26, 28, 0, 28 ], + "width": 32, + "height": 12 + } + }, + "images/body": { + "images/body": { + "type": "mesh", + "uvs": [ 0.09467, 0.69629, 0.27451, 0.11787, 0.51753, 0.0885, 0.69008, 0.1947, 0.75813, 0.46357, 0.76785, 0.75504, 0.77757, 0.82734, 0.83438, 0.83311, 0.9035, 0.84014, 1, 0.84994, 1, 0.93128, 0.86992, 0.99002, 0.72896, 0.99906, 0.65544, 0.95574, 0.55642, 0.89739, 0.36443, 0.94032, 0.26479, 0.87027, 0.17973, 0.9245, 0.0728, 0.79797, 0.92824, 0.90416, 0.81645, 0.90642, 0.69008, 0.89287, 0.65363, 0.81831, 0.46205, 0.82742, 0.22494, 0.76181, 0.2506, 0.61775, 0.3065, 0.34077, 0.41682, 0.22817, 0.5703, 0.251, 0.59391, 0.39105, 0.59635, 0.52846, 0.60084, 0.67488, 0.4385, 0.66771, 0.43167, 0.51678, 0.27826, 0.50517 ], + "triangles": [ 13, 21, 12, 12, 20, 11, 12, 21, 20, 11, 19, 10, 11, 20, 19, 8, 20, 7, 20, 8, 19, 13, 14, 21, 15, 23, 14, 15, 16, 23, 19, 9, 10, 17, 24, 16, 17, 18, 24, 21, 6, 20, 20, 6, 7, 19, 8, 9, 14, 22, 21, 14, 23, 22, 21, 22, 6, 23, 16, 24, 23, 24, 32, 32, 25, 33, 33, 25, 34, 24, 25, 32, 23, 31, 22, 23, 32, 31, 22, 5, 6, 22, 31, 5, 18, 0, 24, 24, 0, 25, 31, 4, 5, 25, 0, 34, 32, 30, 31, 31, 30, 4, 32, 33, 30, 0, 1, 26, 0, 26, 34, 33, 29, 30, 30, 29, 4, 34, 26, 33, 33, 26, 29, 29, 27, 28, 27, 29, 26, 29, 3, 4, 29, 28, 3, 26, 1, 27, 27, 2, 28, 28, 2, 3, 27, 1, 2 ], + "vertices": [ 2, 19, -90.41, 15.88, 0.58739, 1, -62.63, -39.23, 0.4126, 2, 19, -63.65, 124.26, 0, 1, -35.87, 69.12999, 0.99999, 2, 19, -22.06, 131.13, 0, 1, 5.71, 76.01, 1, 2, 19, 8.27, 112.52, 5.9E-4, 1, 36.05, 57.4, 0.9994, 2, 19, 21.9, 63.24, 0.21085, 1, 49.68, 8.12, 0.78914, 4, 20, 13.31, 23.86, 0.36727, 19, 27.94, 9.64999, 0.53884, 1, 55.72, -45.47, 0.06481, 21, -28.9, 27.21, 0.02906, 4, 20, 16.54999, 10.69, 0.70312, 19, 31.18, -3.51, 0.10125, 1, 58.96, -58.64, 0.00394, 21, -25.66, 14.03, 0.19166, 3, 20, 26.59, 10.26, 0.49438, 19, 41.22, -3.94, 0.01135, 21, -15.62, 13.61, 0.49425, 2, 20, 38.54, 9.72, 0.1547, 21, -3.67, 13.07, 0.84529, 1, 21, 12.99, 12.3, 1, 1, 21, 13.93, -2.71, 1, 2, 20, 34.54, -18.31, 0.39927, 21, -7.67, -14.96, 0.60072, 2, 20, 10.49, -21.5, 0.82809, 21, -31.72, -18.16, 0.1719, 3, 20, -2.74, -14.29, 0.91458, 19, 11.88, -28.5, 0.04151, 21, -44.96, -10.95, 0.04389, 3, 20, -21.53, -4.42, 0.21756, 19, -6.9, -18.62999, 0.77389, 1, 20.87, -73.75, 0.00854, 2, 19, -40.91999, -27.9, 0.89189, 1, -13.15, -83.01999, 0.1081, 2, 19, -59.3, -15.45, 0.78289, 1, -31.52, -70.57, 0.2171, 2, 19, -73.75, -25.96, 0.74537, 1, -45.97, -81.08, 0.25461, 2, 19, -93.29, -3.16, 0.67692, 1, -65.51, -58.29, 0.32306, 1, 21, 1.29999, 1.51, 1, 3, 20, 24.42, -3.45, 0.62559, 19, 39.05, -17.66, 0.00104, 21, -17.79, -0.11, 0.37334, 1, 20, 2.22, -2.31, 1, 2, 20, -5.46, 11.09, 0.5526, 19, 9.16, -3.11, 0.44739, 3, 20, -39.47, 8.06, 0.00227, 19, -24.84, -6.14, 0.90854, 1, 2.93, -61.26, 0.08918, 2, 19, -67.03, 4.52, 0.70499, 1, -39.25, -50.59, 0.29499, 2, 19, -63.78, 31.4, 0.3936, 1, -36, -23.71, 0.60639, 2, 19, -56.37, 83.1, 0.00594, 1, -28.59, 27.98, 0.99405, 1, 1, -10.51, 49.51, 1, 1, 1, 15.94, 46.25, 1, 2, 19, -6.75, 75.62, 0.03019, 1, 21.01, 20.49, 0.9698, 2, 19, -4.62, 50.18, 0.27306, 1, 23.15, -4.94, 0.72693, 2, 19, -2.01, 23.08, 0.76517, 1, 25.76, -32.03, 0.23482, 2, 19, -30.46, 23.35, 0.5507, 1, -2.68, -31.76, 0.44929, 2, 19, -33.09999, 51.28, 0.02267, 1, -5.32, -3.83, 0.97732, 2, 19, -59.91, 52.45, 0.17881, 1, -32.13, -2.67, 0.82118 ], + "hull": 19, + "edges": [ 0, 2, 2, 4, 4, 6, 6, 8, 8, 10, 10, 12, 18, 20, 20, 22, 22, 24, 28, 30, 30, 32, 32, 34, 34, 36, 0, 36, 16, 18, 24, 26, 26, 28, 12, 14, 14, 16 ], + "width": 172, + "height": 185 + } + }, + "images/fingersleft": { + "images/fingersleft": { "rotation": -149.21, "width": 18, "height": 24 } + }, + "images/fingersright": { + "images/fingersright": { "x": 0.24, "y": -0.81, "rotation": -9.46, "width": 24, "height": 22 } + }, + "images/head": { + "images/head": { "width": 75, "height": 70 } + }, + "images/leftwing": { + "images/leftwing": { "x": 8.61, "y": 23.3, "rotation": -168.46, "width": 92, "height": 102 } + }, + "images/legleft": { + "images/legleft": { "x": 41.66, "rotation": 90, "width": 20, "height": 79 } + }, + "images/legright": { + "images/legright": { "x": 56.59, "rotation": 90, "width": 19, "height": 50 } + }, + "images/rightwing": { + "images/rightwing": { "x": -47.8, "y": -6.04, "rotation": -168.46, "width": 148, "height": 102 } + }, + "images/shadow": { + "images/shadow": { "width": 200, "height": 21 } + }, + "images/shoulderright": { + "images/shoulderright": { "width": 24, "height": 24 } + }, + "images/weaponleft": { + "images/weaponleft": { "x": 48.55, "y": -9.86, "rotation": -111.61, "width": 44, "height": 114 } + }, + "images/weaponright": { + "images/weaponright": { "x": 50.91, "y": 4.65, "rotation": -107.85, "width": 57, "height": 109 } + } + } +}, +"animations": { + "rally": { + "bones": { + "head": { + "rotate": [ + { + "time": 0, + "angle": -15.7, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 1.6666, + "angle": -13.73, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 3.2666, + "angle": -15.7, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 4.9333, + "angle": -13.73, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { "time": 6.5333, "angle": -15.7 } + ], + "translate": [ + { + "time": 0, + "x": 0, + "y": 0, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 0.8, + "x": 0, + "y": 2.05, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 1.6666, + "x": 0, + "y": 0, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 2.5, + "x": 0, + "y": 2.05, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { "time": 3.2666, "x": 0, "y": 0 }, + { + "time": 4.0666, + "x": 0, + "y": 2.05, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 4.9333, + "x": 0, + "y": 0, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 5.7666, + "x": 0, + "y": 2.05, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { "time": 6.5333, "x": 0, "y": 0 } + ] + }, + "body": { + "translate": [ + { + "time": 0, + "x": 0, + "y": 0, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 1.5, + "x": 0, + "y": -4.78, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { "time": 3.2666, "x": 0, "y": 0 }, + { + "time": 4.7666, + "x": 0, + "y": -4.78, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { "time": 6.5333, "x": 0, "y": 0 } + ] + }, + "wingright": { + "rotate": [ + { + "time": 0, + "angle": 0, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 0.4666, + "angle": 6.61, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 0.9666, + "angle": 0, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 1.4666, + "angle": 6.61, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 2, + "angle": 0, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 2.5666, + "angle": 6.61, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { "time": 3.2666, "angle": 0 }, + { + "time": 3.7333, + "angle": 6.61, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 4.2333, + "angle": 0, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 4.7333, + "angle": 6.61, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 5.2666, + "angle": 0, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 5.8333, + "angle": 6.61, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { "time": 6.5333, "angle": 0 } + ] + }, + "flap": { + "rotate": [ + { + "time": 0, + "angle": -15.73, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 1.0666, + "angle": 13.15, + "curve": [ 0.253, 0, 0.621, 0.47 ] + }, + { + "time": 1.5333, + "angle": 0.55, + "curve": [ 0.333, 0.33, 0.668, 0.67 ] + }, + { + "time": 1.6666, + "angle": -4.36, + "curve": [ 0.38, 0.53, 0.744, 1 ] + }, + { + "time": 2.1666, + "angle": 10.44, + "curve": [ 0.245, 0, 0.634, 0.54 ] + }, + { "time": 2.7333, "angle": -15.73, "curve": "stepped" }, + { + "time": 3.2666, + "angle": -15.73, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 4.3333, + "angle": 13.15, + "curve": [ 0.253, 0, 0.621, 0.47 ] + }, + { + "time": 4.8, + "angle": 0.55, + "curve": [ 0.333, 0.33, 0.668, 0.67 ] + }, + { + "time": 4.9333, + "angle": -4.36, + "curve": [ 0.38, 0.53, 0.744, 1 ] + }, + { + "time": 5.4333, + "angle": 10.44, + "curve": [ 0.245, 0, 0.634, 0.54 ] + }, + { "time": 6, "angle": -15.73, "curve": "stepped" }, + { "time": 6.5333, "angle": -15.73 } + ] + }, + "wingleft": { + "rotate": [ + { + "time": 0, + "angle": 0, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 0.4666, + "angle": -6.46, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 0.9666, + "angle": 0, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 1.4666, + "angle": -6.46, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 2, + "angle": 0, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 2.5666, + "angle": -6.46, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { "time": 3.2666, "angle": 0 }, + { + "time": 3.7333, + "angle": -6.46, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 4.2333, + "angle": 0, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 4.7333, + "angle": -6.46, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 5.2666, + "angle": 0, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 5.8333, + "angle": -6.46, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { "time": 6.5333, "angle": 0 } + ] + }, + "shoulder": { + "rotate": [ + { "time": 0, "angle": 0, "curve": "stepped" }, + { "time": 3.2666, "angle": 0, "curve": "stepped" }, + { "time": 6.5333, "angle": 0 } + ] + }, + "bone2": { + "rotate": [ + { "time": 0, "angle": 0 }, + { "time": 1.0666, "angle": -4.58 }, + { "time": 1.5333, "angle": -13.23 }, + { "time": 2.1666, "angle": -35.09 }, + { "time": 3, "angle": 0, "curve": "stepped" }, + { "time": 3.2666, "angle": 0 }, + { "time": 4.3333, "angle": -4.58 }, + { "time": 4.8, "angle": -13.23 }, + { "time": 5.4333, "angle": -35.09 }, + { "time": 6.2666, "angle": 0, "curve": "stepped" }, + { "time": 6.5333, "angle": 0 } + ] + }, + "bone3": { + "rotate": [ + { + "time": 0, + "angle": 0, + "curve": [ 0.242, 0, 0.657, 0.63 ] + }, + { + "time": 1.0666, + "angle": -7.69, + "curve": [ 0.381, 0.58, 0.729, 1 ] + }, + { + "time": 1.5333, + "angle": 21.87, + "curve": [ 0.261, 0, 0.617, 0.44 ] + }, + { + "time": 2.1666, + "angle": -16.94, + "curve": [ 0.357, 0.42, 0.756, 1 ] + }, + { "time": 3, "angle": 0, "curve": "stepped" }, + { + "time": 3.2666, + "angle": 0, + "curve": [ 0.242, 0, 0.657, 0.63 ] + }, + { + "time": 4.3333, + "angle": -7.69, + "curve": [ 0.381, 0.58, 0.729, 1 ] + }, + { + "time": 4.8, + "angle": 21.87, + "curve": [ 0.261, 0, 0.617, 0.44 ] + }, + { + "time": 5.4333, + "angle": -16.94, + "curve": [ 0.357, 0.42, 0.756, 1 ] + }, + { "time": 6.2666, "angle": 0, "curve": "stepped" }, + { "time": 6.5333, "angle": 0 } + ] + }, + "legright": { + "scale": [ + { + "time": 0, + "x": 1, + "y": 1, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 1.5, + "x": 0.94, + "y": 1, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { "time": 3.2666, "x": 1, "y": 1 }, + { + "time": 4.7666, + "x": 0.94, + "y": 1, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { "time": 6.5333, "x": 1, "y": 1 } + ] + }, + "legleft": { + "scale": [ + { + "time": 0, + "x": 1, + "y": 1, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 1.5, + "x": 0.94, + "y": 1, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { "time": 3.2666, "x": 1, "y": 1 }, + { + "time": 4.7666, + "x": 0.94, + "y": 1, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { "time": 6.5333, "x": 1, "y": 1 } + ] + }, + "bone4": { + "rotate": [ + { "time": 0, "angle": 0 }, + { "time": 1.0666, "angle": -35.8 }, + { "time": 1.5333, "angle": -33.79 }, + { "time": 2.1666, "angle": -38.2 }, + { "time": 3, "angle": 0, "curve": "stepped" }, + { "time": 3.2666, "angle": 0 }, + { "time": 4.3333, "angle": -35.8 }, + { "time": 4.8, "angle": -33.79 }, + { "time": 5.4333, "angle": -38.2 }, + { "time": 6.2666, "angle": 0, "curve": "stepped" }, + { "time": 6.5333, "angle": 0 } + ] + }, + "bone": { + "rotate": [ + { "time": 0, "angle": 0, "curve": "stepped" }, + { "time": 1.5333, "angle": 0 }, + { "time": 2.1666, "angle": 30.51 }, + { "time": 3.2666, "angle": 0, "curve": "stepped" }, + { "time": 4.8, "angle": 0 }, + { "time": 5.4333, "angle": 30.51 }, + { "time": 6.5333, "angle": 0 } + ] + }, + "righthand": { + "translate": [ + { + "time": 0, + "x": -25.07, + "y": -50.25, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 1.6333, + "x": -16.55, + "y": 21.66, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 3.2666, + "x": -21.46, + "y": 16.01, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 4.9, + "x": -4.5, + "y": 46.97, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { "time": 6.5333, "x": -25.07, "y": -50.25 } + ] + }, + "armleft": { + "rotate": [ + { "time": 0, "angle": 0 }, + { "time": 1.1, "angle": 50.78 }, + { "time": 2, "angle": -303.33 }, + { "time": 3.2666, "angle": 10.9 }, + { "time": 4.2, "angle": -303.33 }, + { "time": 4.7666, "angle": 50.78 }, + { "time": 5.2666, "angle": -303.33 }, + { "time": 6.5333, "angle": 0 } + ] + } + } + }, + "animation": { + "bones": { + "head": { + "rotate": [ + { + "time": 0, + "angle": 0, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 1.6666, + "angle": -15.7, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { "time": 3.2666, "angle": 0 } + ], + "translate": [ + { + "time": 0, + "x": 0, + "y": 0, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 0.8, + "x": 0, + "y": 2.05, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 1.6666, + "x": 0, + "y": 0, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 2.5, + "x": 0, + "y": 2.05, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { "time": 3.2666, "x": 0, "y": 0 } + ] + }, + "armright": { + "rotate": [ + { + "time": 0, + "angle": 0, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 0.3333, + "angle": 24.48, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 0.6666, + "angle": 0, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 1, + "angle": 24.48, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 1.3333, + "angle": 0, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 1.6666, + "angle": 24.48, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 2.1666, + "angle": 0, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 2.5666, + "angle": 24.48, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { "time": 3.2666, "angle": 0 } + ] + }, + "armleft": { + "rotate": [ + { + "time": 0, + "angle": 0, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 0.3333, + "angle": 24.48, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 0.7666, + "angle": 0, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 1.2333, + "angle": 24.48, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 1.6666, + "angle": 0, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 2.0666, + "angle": 24.48, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 2.5, + "angle": 0, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 2.9333, + "angle": 24.48, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { "time": 3.2666, "angle": 0 } + ] + }, + "body": { + "translate": [ + { + "time": 0, + "x": 0, + "y": 0, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 0.5, + "x": 0, + "y": -4.78, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 1, + "x": 0, + "y": 0, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 1.5, + "x": 0, + "y": -4.78, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 2.0333, + "x": 0, + "y": 0, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 2.6, + "x": 0, + "y": -4.78, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { "time": 3.2666, "x": 0, "y": 0 } + ] + }, + "wingright": { + "rotate": [ + { + "time": 0, + "angle": 0, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 0.4666, + "angle": 6.61, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 0.9666, + "angle": 0, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 1.4666, + "angle": 6.61, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 2, + "angle": 0, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 2.5666, + "angle": 6.61, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { "time": 3.2666, "angle": 0 } + ] + }, + "flap": { + "rotate": [ + { + "time": 0, + "angle": -15.73, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 1.0666, + "angle": 13.15, + "curve": [ 0.253, 0, 0.621, 0.47 ] + }, + { + "time": 1.5333, + "angle": 0.55, + "curve": [ 0.333, 0.33, 0.668, 0.67 ] + }, + { + "time": 1.6666, + "angle": -4.36, + "curve": [ 0.38, 0.53, 0.744, 1 ] + }, + { + "time": 2.1666, + "angle": 10.44, + "curve": [ 0.245, 0, 0.634, 0.54 ] + }, + { "time": 2.7333, "angle": -15.73, "curve": "stepped" }, + { "time": 3.2666, "angle": -15.73 } + ] + }, + "wingleft": { + "rotate": [ + { + "time": 0, + "angle": 0, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 0.4666, + "angle": -6.46, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 0.9666, + "angle": 0, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 1.4666, + "angle": -6.46, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 2, + "angle": 0, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 2.5666, + "angle": -6.46, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { "time": 3.2666, "angle": 0 } + ] + }, + "shoulder": { + "rotate": [ + { "time": 0, "angle": 0, "curve": "stepped" }, + { "time": 3.2666, "angle": 0 } + ] + }, + "righthand": { + "translate": [ + { "time": 0, "x": 0, "y": 0 }, + { "time": 0.3333, "x": 0, "y": 34.89 }, + { "time": 0.7, "x": 7.99, "y": -6.72 }, + { "time": 1.1, "x": -13.33, "y": 60.74 }, + { "time": 1.1666, "x": -16.89, "y": 71.99 }, + { "time": 1.5666, "x": 2.48, "y": -21.53 }, + { "time": 2, "x": -0.52, "y": 16.17 }, + { "time": 2.4333, "x": 1.84, "y": -20.3 }, + { "time": 2.7333, "x": 6.64, "y": 21.7 }, + { "time": 3.2666, "x": 0, "y": 0 } + ] + }, + "bone2": { + "rotate": [ + { "time": 0, "angle": 0 }, + { "time": 1.0666, "angle": -4.58 }, + { "time": 1.5333, "angle": -13.23 }, + { "time": 2.1666, "angle": -35.09 }, + { "time": 3, "angle": 0, "curve": "stepped" }, + { "time": 3.2666, "angle": 0 } + ] + }, + "bone3": { + "rotate": [ + { + "time": 0, + "angle": 0, + "curve": [ 0.242, 0, 0.657, 0.63 ] + }, + { + "time": 1.0666, + "angle": -7.69, + "curve": [ 0.381, 0.58, 0.729, 1 ] + }, + { + "time": 1.5333, + "angle": 21.87, + "curve": [ 0.261, 0, 0.617, 0.44 ] + }, + { + "time": 2.1666, + "angle": -16.94, + "curve": [ 0.357, 0.42, 0.756, 1 ] + }, + { "time": 3, "angle": 0, "curve": "stepped" }, + { "time": 3.2666, "angle": 0 } + ] + }, + "legright": { + "scale": [ + { + "time": 0, + "x": 1, + "y": 1, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 0.5, + "x": 0.94, + "y": 1, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 1, + "x": 1, + "y": 1, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 1.5, + "x": 0.94, + "y": 1, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 2.0333, + "x": 1, + "y": 1, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 2.6, + "x": 0.94, + "y": 1, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { "time": 3.2666, "x": 1, "y": 1 } + ] + }, + "legleft": { + "scale": [ + { + "time": 0, + "x": 1, + "y": 1, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 0.5, + "x": 0.94, + "y": 1, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 1, + "x": 1, + "y": 1, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 1.5, + "x": 0.94, + "y": 1, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 2.0333, + "x": 1, + "y": 1, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 2.6, + "x": 0.94, + "y": 1, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { "time": 3.2666, "x": 1, "y": 1 } + ] + }, + "bone4": { + "rotate": [ + { "time": 0, "angle": 0 }, + { "time": 1.0666, "angle": -35.8 }, + { "time": 1.5333, "angle": -33.79 }, + { "time": 2.1666, "angle": -38.2 }, + { "time": 3, "angle": 0, "curve": "stepped" }, + { "time": 3.2666, "angle": 0 } + ] + }, + "bone": { + "rotate": [ + { "time": 0, "angle": 0, "curve": "stepped" }, + { "time": 1.5333, "angle": 0 }, + { "time": 2.1666, "angle": 30.51 }, + { "time": 3.2666, "angle": 0 } + ] + }, + "tailbone2": { + "rotate": [ + { + "time": 0, + "angle": 0, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 0.5, + "angle": 9.33, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 1, + "angle": 0, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 1.5, + "angle": 9.33, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 2, + "angle": 0, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 2.5, + "angle": 9.33, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { "time": 3.2666, "angle": 0 } + ], + "translate": [ + { + "time": 0, + "x": 0, + "y": 0, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 0.4333, + "x": 0, + "y": 3, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 0.9333, + "x": 0, + "y": 0, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 1.5666, + "x": 0, + "y": 3, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 2.0333, + "x": 0, + "y": 0, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 2.5666, + "x": 0, + "y": 3, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { "time": 3.2666, "x": 0, "y": 0 } + ] + }, + "tailbone3": { + "translate": [ + { + "time": 0, + "x": 0, + "y": 0, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 0.5, + "x": 0, + "y": 1.68, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 1, + "x": 0, + "y": 0, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 1.5, + "x": 0, + "y": 1.68, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 2, + "x": 0, + "y": 0, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 2.5, + "x": 0, + "y": 1.68, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { "time": 3.2666, "x": 0, "y": 0 } + ] + } + } + } +} +} \ No newline at end of file diff --git a/src/main/resources/hemomancerResources/images/char/defaultCharacter/skeleton.png b/src/main/resources/hemomancerResources/images/char/defaultCharacter/skeleton.png new file mode 100644 index 0000000..ada1ebf Binary files /dev/null and b/src/main/resources/hemomancerResources/images/char/defaultCharacter/skeleton.png differ diff --git a/src/main/resources/hemomancerResources/images/char/hemomancer/hemomancer.png b/src/main/resources/hemomancerResources/images/char/hemomancer/hemomancer.png new file mode 100644 index 0000000..c7304ef Binary files /dev/null and b/src/main/resources/hemomancerResources/images/char/hemomancer/hemomancer.png differ diff --git a/src/main/resources/hemomancerResources/images/char/hemomancer/skeleton.atlas b/src/main/resources/hemomancerResources/images/char/hemomancer/skeleton.atlas new file mode 100644 index 0000000..a3bdced --- /dev/null +++ b/src/main/resources/hemomancerResources/images/char/hemomancer/skeleton.atlas @@ -0,0 +1,97 @@ + +chosen.png +size: 512,256 +format: RGBA8888 +filter: Linear,Linear +repeat: none +arm (right) + rotate: false + xy: 238, 103 + size: 82, 56 + orig: 82, 56 + offset: 0, 0 + index: -1 +detail1 + rotate: false + xy: 354, 184 + size: 19, 20 + orig: 19, 20 + offset: 0, 0 + index: -1 +detail2 + rotate: false + xy: 484, 234 + size: 24, 20 + orig: 24, 20 + offset: 0, 0 + index: -1 +detail3 + rotate: false + xy: 2, 2 + size: 17, 17 + orig: 17, 17 + offset: 0, 0 + index: -1 +detail4 + rotate: false + xy: 400, 224 + size: 48, 30 + orig: 48, 30 + offset: 0, 0 + index: -1 +glowy eye + rotate: false + xy: 321, 177 + size: 31, 27 + orig: 31, 27 + offset: 0, 0 + index: -1 +hand (left) + rotate: true + xy: 329, 206 + size: 48, 69 + orig: 48, 69 + offset: 0, 0 + index: -1 +hand (right) + rotate: false + xy: 238, 161 + size: 81, 58 + orig: 81, 58 + offset: 0, 0 + index: -1 +head + rotate: false + xy: 450, 222 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +hood + rotate: false + xy: 148, 111 + size: 88, 108 + orig: 88, 108 + offset: 0, 0 + index: -1 +robe + rotate: false + xy: 2, 21 + size: 144, 233 + orig: 144, 233 + offset: 0, 0 + index: -1 +shadow + rotate: false + xy: 148, 221 + size: 179, 33 + orig: 179, 33 + offset: 0, 0 + index: -1 +skin + rotate: false + xy: 148, 30 + size: 68, 79 + orig: 68, 79 + offset: 0, 0 + index: -1 diff --git a/src/main/resources/hemomancerResources/images/char/hemomancer/skeleton.json b/src/main/resources/hemomancerResources/images/char/hemomancer/skeleton.json new file mode 100644 index 0000000..7f74c0d --- /dev/null +++ b/src/main/resources/hemomancerResources/images/char/hemomancer/skeleton.json @@ -0,0 +1,9519 @@ +{ + "skeleton": { + "hash": "dGadVpe6KEqSOTeZmPjN0HNkvcU", + "spine": "3.4.02", + "width": 179, + "height": 253.21, + "images": "./images/" + }, + "bones": [ + { + "name": "root" + }, + { + "name": "Spine_", + "parent": "root", + "length": 37.23, + "rotation": 84.28, + "x": 11.38, + "y": 12.75, + "color": "26ff00ff" + }, + { + "name": "Spine_2", + "parent": "Spine_", + "length": 34.36, + "rotation": 3.23, + "x": 37.23, + "color": "26ff00ff" + }, + { + "name": "Spine_3", + "parent": "Spine_2", + "length": 37.33, + "rotation": 5.12, + "x": 34.36, + "color": "26ff00ff" + }, + { + "name": "Spine_4", + "parent": "Spine_3", + "length": 42.3, + "rotation": 4.38, + "x": 37.33, + "color": "26ff00ff" + }, + { + "name": "Detail_", + "parent": "Spine_4", + "length": 10.42, + "rotation": -68.92, + "x": 101.14, + "y": -5.47, + "color": "ff0ac9ff" + }, + { + "name": "Detail_2", + "parent": "Spine_4", + "length": 12.01, + "rotation": -72.89, + "x": 69.86, + "y": -13.04, + "color": "ff0ac9ff" + }, + { + "name": "Detail_3", + "parent": "Spine_2", + "length": 8.7, + "rotation": -118.91, + "x": 26.84, + "y": -15.09, + "color": "ff0ac9ff" + }, + { + "name": "Detail_4", + "parent": "Spine_", + "length": 17.9, + "rotation": -81.86, + "x": 25.63, + "y": -14.4, + "color": "ff0ac9ff" + }, + { + "name": "Head", + "parent": "Spine_4", + "x": 79.29, + "y": 5.97, + "color": "ffda00ff" + }, + { + "name": "Light", + "parent": "Spine_4", + "x": 102.95, + "y": 18.95, + "color": "ff00c5ff" + }, + { + "name": "arm_L_1", + "parent": "Spine_4", + "length": 16.73, + "rotation": 122.17, + "x": 15.45, + "y": 40.99, + "color": "ff1700ff" + }, + { + "name": "arm_L_2", + "parent": "arm_L_1", + "length": 17.54, + "rotation": 29.88, + "x": 16.73, + "color": "ff1700ff" + }, + { + "name": "arm_L_3", + "parent": "arm_L_2", + "length": 21.01, + "rotation": 1.43, + "x": 17.54, + "color": "ff1700ff" + }, + { + "name": "arm_R_1", + "parent": "Spine_4", + "length": 57.53, + "rotation": -74.49, + "x": 22.59, + "y": 50.81, + "color": "000affff" + }, + { + "name": "arm_R_2", + "parent": "arm_R_1", + "length": 19.31, + "rotation": -41.32, + "x": 58.79, + "y": -3.29, + "color": "000affff" + }, + { + "name": "arm_R_3", + "parent": "arm_R_2", + "length": 23.25, + "rotation": 21.59, + "x": 19.31, + "color": "000affff" + }, + { + "name": "arm_R_4", + "parent": "arm_R_3", + "length": 23.49, + "rotation": 27.11, + "x": 23.25, + "color": "000affff" + }, + { + "name": "shadow", + "parent": "root", + "x": 2.14, + "y": 5.73, + "color": "000000ff" + } + ], + "slots": [ + { + "name": "shadow", + "bone": "shadow", + "color": "ffffff81", + "attachment": "shadow" + }, + { + "name": "detail4", + "bone": "Detail_4", + "attachment": "detail4" + }, + { + "name": "detail3", + "bone": "Detail_3", + "attachment": "detail3" + }, + { + "name": "detail2", + "bone": "Detail_2", + "attachment": "detail2" + }, + { + "name": "detail1", + "bone": "Detail_", + "attachment": "detail1" + }, + { + "name": "hand (left)", + "bone": "arm_L_1", + "attachment": "hand (left)" + }, + { + "name": "skin", + "bone": "Spine_4", + "attachment": "skin" + }, + { + "name": "robe", + "bone": "Spine_", + "attachment": "robe" + }, + { + "name": "head", + "bone": "Head", + "attachment": "head" + }, + { + "name": "hood", + "bone": "Spine_4", + "attachment": "hood" + }, + { + "name": "glowy eye", + "bone": "Light", + "attachment": "glowy eye", + "blend": "additive" + }, + { + "name": "glowy eye2", + "bone": "Light", + "attachment": "glowy eye", + "blend": "additive" + }, + { + "name": "hand (right)", + "bone": "arm_R_2", + "attachment": "hand (right)" + }, + { + "name": "arm (right)", + "bone": "arm_R_1", + "attachment": "arm (right)" + } + ], + "skins": { + "default": { + "arm (right)": { + "arm (right)": { + "type": "mesh", + "uvs": [ + 0.08945, + 0.3235, + 0.00479, + 0.5895, + 0.05772, + 0.847, + 0.22042, + 0.99721, + 0.33089, + 0.88084, + 0.41763, + 0.83894, + 0.55938, + 0.74937, + 0.70402, + 0.65798, + 0.83312, + 0.81033, + 0.92484, + 0.5049, + 0.98151, + 0.3312, + 0.98912, + 0.08884, + 0.91713, + 0.05876, + 0.81417, + 0.01573, + 0.67712, + 0.05541, + 0.52494, + 0.16266, + 0.41316, + 0.24806, + 0.26811, + 0.33537, + 0.17489, + 0.25459, + 0.29189, + 0.4873, + 0.35657, + 0.71712, + 0.24813, + 0.78398, + 0.17679, + 0.52212, + 0.15872, + 0.83551, + 0.08738, + 0.55137, + 0.49821, + 0.62909, + 0.43828, + 0.43966, + 0.56574, + 0.36863, + 0.63138, + 0.55806, + 0.72029, + 0.27293, + 0.77355, + 0.47768, + 0.82111, + 0.60443, + 0.89531, + 0.40386, + 0.8525, + 0.21025, + 0.94477, + 0.15733 + ], + "triangles": [ + 34, + 12, + 11, + 33, + 13, + 12, + 33, + 12, + 34, + 14, + 13, + 33, + 29, + 14, + 33, + 15, + 14, + 29, + 10, + 34, + 11, + 33, + 34, + 10, + 27, + 15, + 29, + 16, + 15, + 27, + 32, + 33, + 10, + 29, + 33, + 32, + 26, + 16, + 27, + 17, + 16, + 26, + 30, + 29, + 32, + 27, + 29, + 30, + 19, + 17, + 26, + 9, + 32, + 10, + 30, + 32, + 9, + 18, + 22, + 0, + 22, + 17, + 19, + 17, + 22, + 18, + 24, + 0, + 22, + 28, + 27, + 30, + 26, + 27, + 28, + 24, + 1, + 0, + 31, + 30, + 9, + 7, + 28, + 30, + 25, + 26, + 28, + 19, + 26, + 25, + 31, + 7, + 30, + 20, + 19, + 25, + 22, + 19, + 20, + 6, + 25, + 28, + 6, + 28, + 7, + 20, + 25, + 6, + 21, + 22, + 20, + 24, + 22, + 21, + 8, + 31, + 9, + 7, + 31, + 8, + 23, + 24, + 21, + 1, + 24, + 23, + 5, + 20, + 6, + 4, + 21, + 20, + 2, + 1, + 23, + 5, + 4, + 20, + 4, + 3, + 23, + 4, + 23, + 21, + 2, + 23, + 3 + ], + "vertices": [ + 0.29, + 23.34, + -11.82, + 12.24, + -13.35, + -2.73, + -4.26, + -15.62, + 6.6, + -13.07, + 14.07, + -13.64, + 26.73, + -13.47, + 39.64, + -13.29, + 46.14, + -25.23, + 59.65, + -12.32, + 67.68, + -5.12, + 73.46, + 7.16, + 68.66, + 10.98, + 61.79, + 16.44, + 50.55, + 18.70999, + 36.73, + 17.95, + 26.43, + 17.04999, + 13.57, + 17.1, + 8.24, + 24.21, + 12.1, + 8.49, + 12.06, + -5.42, + 2.41, + -5.46, + 2.64, + 10.32, + -5.45, + -5.31, + -4.75, + 11.62, + 24.68, + -5.32, + 24.21, + 6.35, + 35.39, + 6.01, + 36.29, + -5.84, + 49.15, + 6.1, + 48.78, + -6.16, + 49.66, + -14.21, + 59.59, + -6.17, + 60.51, + 5.17999, + 68.62999, + 5.01 + ], + "hull": 19, + "edges": [ + 0, + 2, + 2, + 4, + 4, + 6, + 6, + 8, + 14, + 16, + 20, + 22, + 28, + 30, + 34, + 36, + 0, + 36, + 34, + 38, + 38, + 40, + 8, + 10, + 40, + 10, + 8, + 42, + 42, + 44, + 44, + 36, + 46, + 48, + 48, + 0, + 46, + 6, + 10, + 12, + 12, + 14, + 12, + 50, + 50, + 52, + 30, + 32, + 32, + 34, + 52, + 32, + 30, + 54, + 54, + 56, + 56, + 14, + 28, + 58, + 58, + 60, + 60, + 62, + 14, + 62, + 18, + 20, + 62, + 18, + 62, + 16, + 18, + 64, + 64, + 66, + 26, + 28, + 66, + 26, + 16, + 18, + 20, + 68, + 22, + 24, + 24, + 26, + 68, + 24 + ], + "width": 82, + "height": 56 + } + }, + "detail1": { + "detail1": { + "x": 6.94, + "y": 1.86, + "rotation": -28.11, + "width": 19, + "height": 20 + } + }, + "detail2": { + "detail2": { + "x": 9.73, + "y": 1.15, + "rotation": -24.14, + "width": 24, + "height": 20 + } + }, + "detail3": { + "detail3": { + "x": 2.42, + "y": 1.39, + "rotation": 31.39, + "width": 17, + "height": 17 + } + }, + "detail4": { + "detail4": { + "x": 8.54, + "y": 4.22, + "rotation": -2.41, + "width": 48, + "height": 30 + } + }, + "glowy eye": { + "glowy eye": { + "x": -6.54, + "y": -0.92, + "rotation": -97.04, + "width": 31, + "height": 27 + } + }, + "glowy eye2": { + "glowy eye": { + "x": -6.54, + "y": -0.92, + "rotation": -97.04, + "width": 31, + "height": 27 + } + }, + "hand (left)": { + "hand (left)": { + "type": "mesh", + "uvs": [ + 0.84524, + 0.03536, + 0.71102, + 0, + 0.46821, + 0.13715, + 0.34333, + 0.32215, + 0.17221, + 0.45406, + 0.15371, + 0.57954, + 0.00571, + 0.76615, + 0.0959, + 0.80315, + 0.22771, + 0.7388, + 0.16065, + 0.91254, + 0.21615, + 1, + 0.29708, + 1, + 0.48769, + 0.85183, + 0.75071, + 0.66095, + 0.81135, + 0.43046, + 0.99773, + 0.26274, + 0.97406, + 0.06929, + 0.30366, + 0.57983, + 0.3713, + 0.46422, + 0.46988, + 0.35444, + 0.61276, + 0.18949, + 0.25255, + 0.9254, + 0.35113, + 0.76845, + 0.46905, + 0.60843, + 0.54549, + 0.48751, + 0.6393, + 0.39918, + 0.79665, + 0.23828, + 0.61886, + 0.64343, + 0.69428, + 0.52974 + ], + "triangles": [ + 10, + 21, + 11, + 12, + 21, + 22, + 12, + 11, + 21, + 10, + 9, + 21, + 9, + 8, + 21, + 21, + 8, + 22, + 12, + 27, + 13, + 22, + 23, + 12, + 12, + 23, + 27, + 8, + 7, + 5, + 8, + 17, + 22, + 22, + 17, + 23, + 7, + 6, + 5, + 8, + 5, + 17, + 5, + 4, + 17, + 27, + 28, + 13, + 13, + 28, + 14, + 23, + 24, + 27, + 27, + 24, + 28, + 17, + 18, + 23, + 23, + 18, + 24, + 17, + 4, + 18, + 24, + 25, + 28, + 28, + 25, + 14, + 18, + 19, + 24, + 24, + 19, + 25, + 4, + 3, + 18, + 18, + 3, + 19, + 3, + 2, + 19, + 25, + 26, + 14, + 14, + 26, + 15, + 19, + 20, + 25, + 25, + 20, + 26, + 19, + 2, + 20, + 26, + 16, + 15, + 26, + 0, + 16, + 26, + 20, + 0, + 20, + 1, + 0, + 20, + 2, + 1 + ], + "vertices": [ + 1, + 11, + -8.87, + -4.65, + 1, + 1, + 11, + -5.42, + -10.62, + 1, + 1, + 11, + 9.58, + -10.65, + 1, + 2, + 11, + 22.29, + -4.55, + 0.14132, + 12, + 2.55, + -6.72, + 0.85867, + 3, + 11, + 34.41, + -2.7, + 1.0E-5, + 12, + 13.98, + -11.15, + 0.77615, + 13, + -3.83, + -11.06, + 0.22383, + 3, + 11, + 40.57, + 3.44, + 0, + 12, + 22.39, + -8.89, + 0.20082, + 13, + 4.62, + -9.01, + 0.79917, + 3, + 11, + 54.22, + 8.92, + 0, + 12, + 36.95, + -10.93, + 7.0E-5, + 13, + 19.12999, + -11.42, + 0.99992, + 2, + 12, + 37.79, + -5.98, + 1.0E-5, + 13, + 20.09, + -6.48, + 0.99998, + 2, + 11, + 44.77, + 14.2, + 0, + 13, + 13.8, + -2, + 1, + 2, + 12, + 43.73, + -0.38, + 1.0E-5, + 13, + 26.17, + -1.04, + 0.99998, + 3, + 11, + 56.6, + 27.81, + 0, + 12, + 48.42, + 4.25, + 3.0E-5, + 13, + 30.98, + 3.47, + 0.99996, + 3, + 11, + 53.59, + 30.27, + 0, + 12, + 47.04, + 7.88, + 3.0E-5, + 13, + 29.68, + 7.14, + 0.99996, + 2, + 12, + 34.22, + 12.78, + 0.01384, + 13, + 16.99, + 12.36, + 0.98615, + 3, + 11, + 21.92, + 25.91, + 0.03156, + 12, + 17.41, + 19.87999, + 0.48219, + 13, + 0.37, + 19.87, + 0.48624, + 3, + 11, + 9.60999, + 15.43, + 0.57448, + 12, + 1.52, + 16.92, + 0.39838, + 13, + -15.59, + 17.32, + 0.02712, + 2, + 11, + -4.62, + 12.12, + 0.9901, + 12, + -12.47, + 21.15, + 0.00989, + 2, + 11, + -12.18, + 1.05999, + 0.99999, + 12, + -24.54, + 15.33, + 0, + 2, + 12, + 19.84, + -2.16, + 0.21002, + 13, + 2.24, + -2.22, + 0.78997, + 1, + 12, + 11.23, + -1.97, + 1, + 2, + 11, + 19, + 1, + 0.21396, + 12, + 2.46, + -0.25, + 0.78603, + 1, + 11, + 6.49, + -3.47, + 1, + 3, + 11, + 51.99, + 24.93, + 0, + 12, + 42.99, + 4.05, + 1.0E-5, + 13, + 25.54, + 3.41, + 0.99998, + 3, + 11, + 41.47, + 19.53, + 0, + 12, + 31.19, + 4.6, + 8.0E-4, + 13, + 13.75, + 4.26, + 0.99919, + 3, + 11, + 30.11, + 14.56, + 0.00522, + 12, + 18.85, + 5.95, + 0.47192, + 13, + 1.46, + 5.92, + 0.52284, + 3, + 11, + 21.99, + 10.41, + 0.0677, + 12, + 9.75, + 6.4, + 0.86251, + 13, + -7.62, + 6.6, + 0.06977, + 3, + 11, + 14.65, + 8.54, + 0.39806, + 12, + 2.45, + 8.43999, + 0.5851, + 13, + -14.87, + 8.81, + 0.01682, + 2, + 11, + 1.78, + 4.71, + 0.98314, + 12, + -10.61, + 11.53, + 0.01685, + 3, + 11, + 26.06, + 20.96999, + 0.00944, + 12, + 18.54, + 13.53, + 0.34835, + 13, + 1.34, + 13.5, + 0.6422, + 3, + 11, + 18.29999, + 17.18, + 0.1288, + 12, + 9.92, + 14.12, + 0.65996, + 13, + -7.26, + 14.3, + 0.21122 + ], + "hull": 17, + "edges": [ + 2, + 4, + 4, + 6, + 6, + 8, + 8, + 10, + 10, + 12, + 12, + 14, + 14, + 16, + 16, + 18, + 18, + 20, + 20, + 22, + 22, + 24, + 24, + 26, + 26, + 28, + 28, + 30, + 30, + 32, + 16, + 34, + 34, + 36, + 36, + 38, + 38, + 40, + 2, + 0, + 0, + 32, + 40, + 0, + 20, + 42, + 42, + 44, + 44, + 46, + 46, + 48, + 48, + 50, + 50, + 52, + 52, + 32, + 24, + 54, + 54, + 56, + 56, + 28 + ], + "width": 48, + "height": 69 + } + }, + "hand (right)": { + "hand (right)": { + "type": "mesh", + "uvs": [ + 0.13047, + 0.20603, + 0.09937, + 0.27593, + 0.05514, + 0.37535, + 0, + 0.49931, + 0.02936, + 0.63508, + 0.21473, + 0.80163, + 0.32361, + 1, + 0.39342, + 0.96446, + 0.40385, + 0.8905, + 0.51862, + 0.87943, + 0.69392, + 0.84021, + 0.84556, + 0.77645, + 0.92877, + 0.61679, + 0.87488, + 0.56474, + 0.98827, + 0.36416, + 0.97988, + 0.23347, + 0.88506, + 0.22967, + 0.88474, + 0.02825, + 0.80103, + 0.00929, + 0.65805, + 0.18791, + 0.459, + 0.21536, + 0.27171, + 0.19605, + 0.80184, + 0.36939, + 0.6191, + 0.47693, + 0.38693, + 0.48978, + 0.20189, + 0.45928, + 0.67886, + 0.66152, + 0.39612, + 0.68881, + 0.18579, + 0.62782, + 0.73633, + 0.26666, + 0.6053, + 0.3405, + 0.39383, + 0.33729, + 0.23866, + 0.32445, + 0.69036, + 0.75783, + 0.39957, + 0.78833, + 0.20189, + 0.73375 + ], + "triangles": [ + 10, + 33, + 11, + 11, + 33, + 12, + 12, + 26, + 13, + 12, + 33, + 26, + 26, + 23, + 13, + 23, + 22, + 13, + 15, + 14, + 16, + 16, + 14, + 22, + 22, + 14, + 13, + 22, + 30, + 29, + 22, + 23, + 30, + 16, + 29, + 17, + 16, + 22, + 29, + 30, + 19, + 29, + 30, + 20, + 19, + 29, + 18, + 17, + 29, + 19, + 18, + 7, + 6, + 8, + 8, + 6, + 5, + 5, + 34, + 8, + 8, + 34, + 9, + 10, + 9, + 33, + 9, + 34, + 33, + 5, + 35, + 34, + 35, + 27, + 34, + 33, + 27, + 26, + 33, + 34, + 27, + 28, + 24, + 27, + 27, + 23, + 26, + 27, + 24, + 23, + 24, + 30, + 23, + 24, + 31, + 30, + 24, + 32, + 31, + 31, + 20, + 30, + 31, + 21, + 20, + 4, + 35, + 5, + 4, + 28, + 35, + 35, + 28, + 27, + 4, + 3, + 28, + 28, + 25, + 24, + 28, + 3, + 25, + 3, + 2, + 25, + 25, + 32, + 24, + 25, + 2, + 32, + 32, + 2, + 1, + 32, + 21, + 31, + 1, + 0, + 32, + 32, + 0, + 21 + ], + "vertices": [ + 2, + 15, + -1.12, + 12.62, + 0.97703, + 16, + -14.35, + 19.25, + 0.02296, + 2, + 15, + -2.2, + 7.97, + 0.99355, + 16, + -17.07, + 15.33, + 0.00644, + 1, + 15, + -3.74, + 1.35, + 1, + 1, + 15, + -5.66, + -6.88, + 1, + 2, + 15, + -0.87, + -13.57, + 0.99824, + 16, + -23.76, + -5.19, + 0.00175, + 2, + 15, + 16.44, + -17.89, + 0.57409, + 16, + -9.24, + -15.58, + 0.4259, + 2, + 15, + 28.49, + -25.95, + 0.24246, + 16, + -1, + -27.51, + 0.75753, + 3, + 15, + 33.18, + -22.18, + 0.21339, + 16, + 4.73999, + -25.73, + 0.78403, + 17, + -28.21, + -14.46, + 0.00257, + 3, + 15, + 32.59999, + -17.84, + 0.17455, + 16, + 5.79, + -21.48, + 0.81379, + 17, + -25.33, + -11.16, + 0.01165, + 3, + 15, + 41.2, + -14.25, + 0.02984, + 16, + 15.11, + -21.3, + 0.84818, + 17, + -16.95999, + -15.25, + 0.12196, + 2, + 16, + 29.4, + -19.73, + 0.44996, + 17, + -3.52, + -20.37, + 0.55003, + 2, + 16, + 41.84999, + -16.65, + 0.13593, + 17, + 8.96, + -23.3, + 0.86406, + 2, + 16, + 49.04, + -7.73, + 0.03915, + 17, + 19.42, + -18.64, + 0.96083, + 2, + 16, + 44.83, + -4.5, + 0.0279, + 17, + 17.15, + -13.84, + 0.97209, + 1, + 17, + 30.91, + -8.35, + 1, + 1, + 17, + 34.11, + -1.44, + 1, + 1, + 17, + 27.57, + 2.57, + 1, + 2, + 16, + 47.17, + 26.53, + 0, + 17, + 33.38, + 12.71, + 0.99999, + 2, + 16, + 40.45, + 27.96, + 0, + 17, + 28.05, + 17.04999, + 0.99999, + 2, + 16, + 28.37, + 18.19, + 0.09494, + 17, + 12.84, + 13.85, + 0.90505, + 3, + 15, + 24.24, + 20.66, + 0.14326, + 16, + 12.19, + 17.39, + 0.7017, + 17, + -1.91, + 20.52, + 0.15503, + 2, + 15, + 9.52, + 16.84, + 0.76865, + 16, + -2.9, + 19.26, + 0.23134, + 1, + 17, + 17.68, + -1.07, + 1, + 2, + 16, + 24.39, + 1.6, + 0.26064, + 17, + 1.74, + 0.91, + 0.73935, + 2, + 15, + 23.83, + 3.71, + 0.06899, + 16, + 5.57, + 1.79, + 0.931, + 1, + 15, + 9.07, + 0.57, + 1, + 2, + 16, + 28.7, + -9.32, + 0.42454, + 17, + 0.58999, + -10.78, + 0.57545, + 3, + 15, + 28.25, + -6.97, + 0.07642, + 16, + 5.75, + -9.77, + 0.91384, + 17, + -20.03, + -0.71, + 0.00973, + 2, + 15, + 10.98, + -9.1, + 0.81897, + 16, + -11.09, + -5.39, + 0.18102, + 2, + 16, + 34.48, + 13.31, + 0.0183, + 17, + 16.06, + 6.73, + 0.98168, + 3, + 15, + 37.8, + 17.6, + 2.5E-4, + 16, + 23.67, + 9.56, + 0.32036, + 17, + 4.71999, + 8.32, + 0.67936, + 3, + 15, + 21.52, + 12.27, + 0.1984, + 16, + 6.57, + 10.59, + 0.77338, + 17, + -10.02, + 17.03, + 0.0282, + 2, + 15, + 9.38, + 8.93, + 0.83351, + 16, + -5.94, + 11.96, + 0.16648, + 2, + 16, + 29.35, + -14.95, + 0.37832, + 17, + -1.38, + -16.08, + 0.62167, + 3, + 15, + 30.37, + -12.34, + 0.11007, + 16, + 5.74, + -15.55, + 0.86218, + 17, + -22.67, + -5.85, + 0.02774, + 2, + 15, + 14.19, + -14.5, + 0.74863, + 16, + -10.09, + -11.6, + 0.25136 + ], + "hull": 22, + "edges": [ + 6, + 8, + 8, + 10, + 10, + 12, + 12, + 14, + 14, + 16, + 16, + 18, + 18, + 20, + 20, + 22, + 22, + 24, + 24, + 26, + 26, + 28, + 28, + 30, + 30, + 32, + 32, + 34, + 34, + 36, + 36, + 38, + 38, + 40, + 40, + 42, + 0, + 42, + 32, + 44, + 44, + 46, + 46, + 48, + 48, + 50, + 4, + 6, + 50, + 4, + 26, + 52, + 52, + 54, + 54, + 56, + 56, + 6, + 34, + 58, + 58, + 60, + 60, + 62, + 62, + 64, + 0, + 2, + 2, + 4, + 64, + 2, + 24, + 66, + 66, + 68, + 68, + 70, + 70, + 8 + ], + "width": 81, + "height": 58 + } + }, + "head": { + "head": { + "type": "mesh", + "uvs": [ + 0.23646, + 0.09379, + 0.01387, + 0.17622, + 0.04038, + 0.34914, + 0.07281, + 0.5606, + 0.07537, + 0.73741, + 0.22912, + 0.79379, + 0.39637, + 0.98389, + 0.57301, + 0.93297, + 0.79969, + 0.79929, + 0.86601, + 0.64094, + 0.95469, + 0.42923, + 0.91025, + 0.29511, + 0.84813, + 0.10761, + 0.66213, + 0.06372, + 0.47419, + 0.01937, + 0.25033, + 0.32848, + 0.26583, + 0.53579, + 0.36658, + 0.74117, + 0.48089, + 0.26648, + 0.51383, + 0.44473, + 0.61458, + 0.62879, + 0.68461, + 0.20306, + 0.71755, + 0.3755, + 0.78342, + 0.53243 + ], + "triangles": [ + 21, + 13, + 12, + 18, + 14, + 13, + 18, + 13, + 21, + 0, + 14, + 18, + 21, + 12, + 11, + 15, + 0, + 18, + 1, + 0, + 15, + 2, + 1, + 15, + 22, + 21, + 11, + 18, + 21, + 22, + 22, + 11, + 10, + 19, + 18, + 22, + 15, + 18, + 19, + 23, + 22, + 10, + 16, + 15, + 19, + 3, + 2, + 15, + 16, + 3, + 15, + 20, + 19, + 22, + 20, + 22, + 23, + 9, + 23, + 10, + 4, + 3, + 16, + 17, + 16, + 19, + 17, + 19, + 20, + 5, + 4, + 16, + 17, + 5, + 16, + 9, + 20, + 23, + 8, + 20, + 9, + 7, + 17, + 20, + 7, + 20, + 8, + 6, + 17, + 7, + 5, + 17, + 6 + ], + "vertices": [ + 19.57, + 19.74, + 17.83, + 27.13, + 12.23, + 26.97, + 5.39, + 26.77, + -0.22, + 27.38, + -2.61999, + 22.72, + -9.31, + 18.15, + -8.39, + 12.34, + -5.03, + 4.62, + -0.26, + 1.89, + 6.1, + -1.75, + 10.54, + -0.86, + 16.74, + 0.37, + 18.86, + 6.1, + 21, + 11.9, + 12.07, + 20.21999, + 5.42, + 20.54, + -1.49, + 18.15, + 13.13, + 12.65, + 7.34, + 12.31, + 1.1, + 9.83, + 14.35, + 5.93, + 8.74, + 5.56, + 3.5, + 4.09 + ], + "hull": 15, + "edges": [ + 6, + 8, + 8, + 10, + 10, + 12, + 12, + 14, + 14, + 16, + 2, + 0, + 0, + 28, + 0, + 30, + 2, + 4, + 4, + 6, + 30, + 32, + 32, + 34, + 34, + 14, + 28, + 36, + 36, + 38, + 38, + 40, + 40, + 16, + 24, + 26, + 26, + 28, + 26, + 42, + 42, + 44, + 44, + 46, + 16, + 18, + 18, + 20, + 46, + 18, + 20, + 22, + 22, + 24 + ], + "width": 32, + "height": 32 + } + }, + "hood": { + "hood": { + "type": "mesh", + "uvs": [ + 0.40007, + 0.33028, + 0.45207, + 0.44102, + 0.37796, + 0.53842, + 0.30552, + 0.63361, + 0.23934, + 0.7559, + 0.24998, + 0.8782, + 0.33302, + 0.89905, + 0.45542, + 0.92979, + 0.7328, + 0.97247, + 0.89234, + 0.96284, + 0.9798, + 0.8521, + 0.98689, + 0.66914, + 0.87894, + 0.53378, + 0.78282, + 0.41327, + 0.70482, + 0.25824, + 0.6203, + 0.13721, + 0.5441, + 0.02809, + 0.44092, + 0.02363, + 0.27701, + 0.01654, + 0.12101, + 0.11572, + 0.06338, + 0.20551, + 0.01347, + 0.28328, + 0.01583, + 0.39883, + 0.13609, + 0.38455, + 0.25101, + 0.3709, + 0.78802, + 0.84752, + 0.78684, + 0.68285, + 0.72893, + 0.55478, + 0.67812, + 0.43441, + 0.60012, + 0.28419, + 0.52803, + 0.16093, + 0.52094, + 0.80226, + 0.53984, + 0.67707, + 0.55284, + 0.55767, + 0.53512, + 0.44308, + 0.4843, + 0.30441, + 0.4193, + 0.18982, + 0.31176, + 0.21389, + 0.16285, + 0.26011, + 0.44057, + 0.54707, + 0.40866, + 0.65781, + 0.37085, + 0.78011, + 0.09674, + 0.31998 + ], + "triangles": [ + 30, + 17, + 16, + 30, + 16, + 15, + 36, + 18, + 17, + 36, + 17, + 30, + 37, + 18, + 36, + 19, + 18, + 37, + 38, + 19, + 37, + 20, + 19, + 38, + 29, + 30, + 15, + 29, + 15, + 14, + 35, + 36, + 30, + 35, + 30, + 29, + 42, + 20, + 38, + 21, + 20, + 42, + 0, + 37, + 36, + 0, + 36, + 35, + 24, + 38, + 37, + 24, + 37, + 0, + 23, + 42, + 38, + 24, + 23, + 38, + 22, + 21, + 42, + 22, + 42, + 23, + 28, + 29, + 14, + 28, + 14, + 13, + 1, + 0, + 35, + 34, + 35, + 29, + 34, + 29, + 28, + 1, + 35, + 34, + 39, + 2, + 1, + 39, + 1, + 34, + 27, + 28, + 13, + 27, + 13, + 12, + 33, + 34, + 28, + 33, + 28, + 27, + 39, + 34, + 33, + 40, + 2, + 39, + 3, + 2, + 40, + 32, + 39, + 33, + 40, + 39, + 32, + 26, + 27, + 12, + 26, + 12, + 11, + 41, + 3, + 40, + 4, + 3, + 41, + 31, + 40, + 32, + 41, + 40, + 31, + 10, + 25, + 26, + 11, + 10, + 26, + 5, + 4, + 41, + 6, + 5, + 41, + 7, + 41, + 31, + 6, + 41, + 7, + 9, + 25, + 10, + 26, + 33, + 27, + 26, + 32, + 33, + 8, + 25, + 9, + 32, + 26, + 25, + 25, + 31, + 32, + 8, + 31, + 25, + 7, + 31, + 8 + ], + "vertices": [ + 89.59, + 13.12, + 77.15, + 10.04, + 67.51, + 17.81, + 58.09, + 25.39, + 45.7, + 32.79, + 32.48, + 33.48, + 29.34, + 26.51, + 24.73, + 16.21999, + 17.16, + -7.43, + 16.46999, + -21.49, + 27.4, + -30.59, + 46.93, + -33.63, + 62.61, + -26, + 76.56, + -19.2, + 94.02, + -14.44, + 107.9, + -8.66, + 120.42, + -3.45, + 122.01, + 5.49, + 124.54, + 19.70999, + 115.59, + 34.65, + 106.59, + 40.87, + 98.79, + 46.26, + 86.38, + 47.58, + 86.62, + 36.89, + 86.84, + 26.68, + 29.96, + -13.91, + 47.62, + -15.98, + 61.97, + -12.62, + 75.42, + -9.78, + 92.37, + -4.94999, + 106.36, + -0.29, + 37.68999, + 8.81, + 50.91, + 5.5, + 63.56, + 2.79, + 76.04, + 2.82, + 91.45, + 5.42, + 104.43, + 9.58, + 103.01, + 19.29, + 99.67, + 32.91, + 65.91, + 12.45, + 54.39, + 16.70999, + 41.68999, + 21.63, + 93.96, + 39.47 + ], + "hull": 25, + "edges": [ + 0, + 2, + 6, + 8, + 8, + 10, + 14, + 16, + 16, + 18, + 18, + 20, + 20, + 22, + 26, + 28, + 36, + 38, + 42, + 44, + 0, + 48, + 16, + 50, + 50, + 52, + 22, + 24, + 24, + 26, + 52, + 54, + 54, + 56, + 56, + 58, + 28, + 30, + 30, + 32, + 58, + 60, + 32, + 34, + 34, + 36, + 60, + 34, + 14, + 62, + 62, + 64, + 64, + 66, + 66, + 68, + 68, + 70, + 70, + 72, + 72, + 36, + 0, + 74, + 74, + 38, + 48, + 76, + 38, + 40, + 40, + 42, + 76, + 40, + 2, + 78, + 78, + 80, + 80, + 82, + 10, + 12, + 12, + 14, + 82, + 12, + 2, + 4, + 4, + 6, + 44, + 46, + 46, + 48, + 46, + 84, + 84, + 42 + ], + "width": 88, + "height": 108 + } + }, + "robe": { + "robe": { + "type": "mesh", + "uvs": [ + 0.7923, + 0.84614, + 0.75844, + 0.79161, + 0.75652, + 0.76047, + 0.75321, + 0.68206, + 0.74529, + 0.57831, + 0.73932, + 0.48157, + 0.74291, + 0.42033, + 0.73992, + 0.36211, + 0.72582, + 0.30984, + 0.59816, + 0.24841, + 0.51957, + 0.24559, + 0.40466, + 0.24146, + 0.39228, + 0.16776, + 0.46428, + 0.14551, + 0.54416, + 0.09406, + 0.53562, + 0.06552, + 0.52503, + 0.0301, + 0.41928, + 0.00368, + 0.3617, + 0.00991, + 0.31016, + 0.0155, + 0.23137, + 0.07952, + 0.18866, + 0.11423, + 0.26403, + 0.12187, + 0.29891, + 0.14134, + 0.29666, + 0.16707, + 0.21003, + 0.18862, + 0.17853, + 0.24355, + 0.17403, + 0.33393, + 0.20216, + 0.37565, + 0.18528, + 0.44865, + 0.24026, + 0.48311, + 0.24681, + 0.58819, + 0.26784, + 0.67826, + 0.22691, + 0.7543, + 0.22128, + 0.84469, + 0.17741, + 0.89127, + 0.09416, + 0.93925, + 0.01091, + 0.94342, + 0.01203, + 0.97471, + 0.12678, + 0.98097, + 0.29926, + 0.98706, + 0.44178, + 0.99209, + 0.69678, + 0.99157, + 0.86925, + 0.98472, + 0.98554, + 0.96896, + 0.99471, + 0.93034, + 0.88554, + 0.91849, + 0.81387, + 0.8809, + 0.22904, + 0.9464, + 0.28366, + 0.90553, + 0.32008, + 0.8469, + 0.3335, + 0.75521, + 0.3498, + 0.66368, + 0.34692, + 0.56812, + 0.32993, + 0.4706, + 0.31625, + 0.42106, + 0.2942, + 0.36242, + 0.28558, + 0.30852, + 0.28079, + 0.24101, + 0.36704, + 0.95707, + 0.3977, + 0.90851, + 0.42933, + 0.84573, + 0.44562, + 0.75156, + 0.44943, + 0.6577, + 0.44373, + 0.56387, + 0.43604, + 0.45853, + 0.43125, + 0.41233, + 0.42262, + 0.35074, + 0.4092, + 0.29625, + 0.51916, + 0.9609, + 0.54005, + 0.91528, + 0.542, + 0.84838, + 0.56212, + 0.75182, + 0.56782, + 0.65855, + 0.54793, + 0.56236, + 0.54503, + 0.45608, + 0.54407, + 0.40869, + 0.53641, + 0.34651, + 0.52778, + 0.29024, + 0.69866, + 0.9633, + 0.67476, + 0.90883, + 0.66333, + 0.8431, + 0.66532, + 0.75183, + 0.67008, + 0.66034, + 0.66345, + 0.56642, + 0.65971, + 0.46331, + 0.66921, + 0.41241, + 0.66541, + 0.34903, + 0.64923, + 0.29986, + 0.81582, + 0.93521, + 0.38936, + 0.13462, + 0.45529, + 0.11082, + 0.44288, + 0.062, + 0.37434, + 0.07653, + 0.29993, + 0.08459 + ], + "triangles": [ + 92, + 17, + 16, + 92, + 16, + 15, + 93, + 18, + 17, + 93, + 17, + 92, + 94, + 20, + 19, + 19, + 18, + 93, + 91, + 92, + 15, + 91, + 15, + 14, + 22, + 20, + 94, + 21, + 20, + 22, + 91, + 90, + 93, + 91, + 93, + 92, + 23, + 22, + 94, + 94, + 19, + 93, + 13, + 91, + 14, + 90, + 91, + 13, + 12, + 90, + 13, + 58, + 25, + 24, + 26, + 25, + 58, + 8, + 88, + 9, + 78, + 10, + 9, + 68, + 11, + 10, + 68, + 10, + 78, + 78, + 9, + 88, + 58, + 11, + 57, + 23, + 94, + 93, + 90, + 23, + 93, + 23, + 90, + 12, + 24, + 23, + 12, + 24, + 11, + 58, + 12, + 11, + 24, + 77, + 78, + 88, + 87, + 88, + 8, + 77, + 88, + 87, + 67, + 68, + 78, + 67, + 78, + 77, + 87, + 8, + 7, + 68, + 56, + 57, + 68, + 57, + 11, + 56, + 68, + 67, + 26, + 57, + 27, + 57, + 26, + 58, + 28, + 57, + 56, + 28, + 27, + 57, + 76, + 77, + 87, + 66, + 67, + 77, + 66, + 77, + 76, + 86, + 87, + 7, + 76, + 87, + 86, + 86, + 7, + 6, + 55, + 56, + 67, + 55, + 67, + 66, + 85, + 75, + 76, + 65, + 66, + 76, + 75, + 65, + 76, + 86, + 85, + 76, + 54, + 55, + 66, + 54, + 66, + 65, + 6, + 85, + 86, + 55, + 30, + 28, + 55, + 28, + 56, + 30, + 55, + 54, + 29, + 28, + 30, + 64, + 65, + 75, + 53, + 54, + 65, + 53, + 30, + 54, + 5, + 85, + 6, + 74, + 75, + 85, + 64, + 75, + 74, + 84, + 85, + 5, + 74, + 85, + 84, + 64, + 53, + 65, + 84, + 5, + 4, + 53, + 31, + 30, + 63, + 64, + 74, + 73, + 74, + 84, + 83, + 84, + 4, + 63, + 53, + 64, + 31, + 53, + 52, + 63, + 74, + 73, + 73, + 84, + 83, + 63, + 52, + 53, + 32, + 31, + 52, + 83, + 4, + 3, + 62, + 52, + 63, + 72, + 63, + 73, + 62, + 63, + 72, + 82, + 73, + 83, + 82, + 83, + 3, + 72, + 73, + 82, + 51, + 32, + 52, + 51, + 52, + 62, + 82, + 3, + 2, + 1, + 82, + 2, + 33, + 32, + 51, + 81, + 72, + 82, + 1, + 81, + 82, + 61, + 51, + 62, + 81, + 1, + 0, + 50, + 33, + 51, + 50, + 51, + 61, + 34, + 33, + 50, + 71, + 62, + 72, + 71, + 72, + 81, + 61, + 62, + 71, + 49, + 34, + 50, + 35, + 34, + 49, + 60, + 50, + 61, + 49, + 50, + 60, + 80, + 81, + 0, + 80, + 0, + 47, + 70, + 61, + 71, + 60, + 61, + 70, + 89, + 47, + 46, + 79, + 80, + 47, + 48, + 35, + 49, + 36, + 35, + 48, + 59, + 49, + 60, + 48, + 49, + 59, + 69, + 60, + 70, + 59, + 60, + 69, + 89, + 79, + 47, + 70, + 71, + 81, + 80, + 70, + 81, + 79, + 69, + 70, + 79, + 70, + 80, + 44, + 46, + 45, + 38, + 37, + 36, + 39, + 36, + 48, + 38, + 36, + 39, + 43, + 89, + 46, + 43, + 46, + 44, + 40, + 48, + 59, + 39, + 48, + 40, + 42, + 69, + 79, + 42, + 79, + 89, + 42, + 89, + 43, + 41, + 59, + 69, + 41, + 69, + 42, + 40, + 59, + 41 + ], + "vertices": [ + 2, + 1, + 22.52, + -29.23, + 0.94029, + 2, + -16.33, + -28.36, + 0.0597, + 2, + 1, + 34.68, + -23.12, + 0.67449, + 2, + -3.85, + -22.94, + 0.3255, + 2, + 1, + 41.87, + -22.12, + 0.42973, + 2, + 3.38, + -22.35, + 0.57026, + 3, + 1, + 60, + -19.83, + 0.03079, + 2, + 21.61, + -21.08, + 0.86132, + 3, + -14.58, + -19.86, + 0.10788, + 2, + 2, + 45.71, + -18.9, + 0.19702, + 3, + 9.60999, + -19.84, + 0.80297, + 2, + 3, + 32.16999, + -20.03, + 0.70071, + 4, + -6.68, + -19.57, + 0.29927, + 2, + 3, + 46.4, + -21.2, + 0.25759, + 4, + 7.41, + -21.83, + 0.74241, + 3, + 1, + 133.99, + -10.51, + 0, + 3, + 59.97, + -21.4, + 0.03091, + 4, + 20.93, + -23.07, + 0.96908, + 2, + 1, + 145.91, + -7.27, + 0, + 4, + 33.25999, + -22.55, + 1, + 1, + 4, + 49.72, + -6.06, + 1, + 2, + 1, + 157.85, + 23.76, + 0, + 4, + 51.76, + 5.08, + 0.99999, + 2, + 1, + 157.16, + 40.32, + 0, + 4, + 54.75, + 21.39, + 0.99999, + 2, + 1, + 174.07, + 43.8, + 1.0E-5, + 4, + 72.01, + 21.05, + 0.99998, + 2, + 1, + 180.26, + 34, + 1.0E-5, + 4, + 75.87999, + 10.13, + 0.99998, + 2, + 1, + 193.33, + 23.75, + 1.0E-5, + 4, + 86.37, + -2.75, + 0.99998, + 2, + 1, + 199.82, + 25.63, + 1.0E-5, + 4, + 93.12, + -2.33999, + 0.99998, + 2, + 1, + 207.89, + 27.97, + 1.0E-5, + 4, + 101.5, + -1.84, + 0.99998, + 2, + 1, + 212.5, + 43.74, + 1.0E-5, + 4, + 109.47, + 12.51, + 0.99998, + 2, + 1, + 210.22, + 51.84, + 1.0E-5, + 4, + 109.05, + 20.91, + 0.99998, + 2, + 1, + 208.19, + 59.1, + 1.0E-5, + 4, + 108.67, + 28.44, + 0.99998, + 2, + 1, + 192.22, + 68.9, + 1.0E-5, + 4, + 95.25, + 41.53, + 0.99998, + 2, + 1, + 183.56, + 74.22, + 1.0E-5, + 4, + 87.98, + 48.62, + 0.99998, + 2, + 1, + 182.87, + 63.24, + 1.0E-5, + 4, + 84.88, + 38.07, + 0.99998, + 2, + 1, + 178.85, + 57.79, + 1.0E-5, + 4, + 79.76, + 33.64, + 0.99998, + 3, + 1, + 172.86, + 57.52, + 1.0E-5, + 2, + 138.66, + 49.76, + 0, + 4, + 73.85, + 34.7, + 0.99998, + 4, + 1, + 166.62, + 69.43, + 1.0E-5, + 2, + 133.1, + 62.01, + 0, + 3, + 103.88, + 52.94, + 7.8E-4, + 4, + 70.4, + 47.69, + 0.99919, + 3, + 1, + 153.43, + 72.67, + 1.0E-5, + 3, + 91.31, + 58.06, + 0.01059, + 4, + 58.25, + 53.76, + 0.98938, + 4, + 1, + 132.41, + 71.22, + 1.0E-5, + 2, + 99.05, + 65.73, + 0.00164, + 3, + 70.3, + 59.69, + 0.06607, + 4, + 37.43, + 56.99, + 0.93227, + 4, + 1, + 123.14, + 66.22, + 0, + 2, + 89.51, + 61.26, + 0.00895, + 3, + 60.4, + 56.09, + 0.13313, + 4, + 27.29, + 54.16, + 0.85789, + 3, + 2, + 72.42, + 62.96, + 0.03647, + 3, + 43.52, + 59.31, + 0.26729, + 4, + 10.71, + 58.66, + 0.69622, + 4, + 1, + 98.78, + 58.27, + 6.3E-4, + 2, + 64.74, + 54.7, + 0.07986, + 3, + 35.14, + 51.77, + 0.36047, + 4, + 1.77, + 51.78, + 0.55903, + 4, + 1, + 74.51, + 54.9, + 0.04025, + 2, + 40.32, + 52.7, + 0.32549, + 3, + 10.64, + 51.96, + 0.46744, + 4, + -22.64, + 53.85, + 0.1668, + 4, + 1, + 53.93, + 49.8, + 0.23257, + 2, + 19.48, + 48.77, + 0.50124, + 3, + -10.46, + 49.91, + 0.24204, + 4, + -43.84, + 53.42, + 0.02413, + 4, + 1, + 35.71, + 53.9, + 0.52495, + 2, + 1.52, + 53.9, + 0.39974, + 3, + -27.88, + 56.62, + 0.07484, + 4, + -60.7, + 61.44, + 4.5E-4, + 3, + 1, + 14.67, + 52.61, + 0.82641, + 2, + -19.54, + 53.8, + 0.16325, + 3, + -48.88, + 58.4, + 0.01032, + 3, + 1, + 3.25, + 57.82, + 0.94166, + 2, + -30.66, + 59.64, + 0.05773, + 3, + -59.43, + 65.21, + 5.9E-4, + 2, + 1, + -9.06, + 68.62999, + 0.99171, + 2, + -42.34, + 71.14, + 0.00828, + 2, + 1, + -11.22, + 80.46, + 0.99999, + 3, + -70.46, + 89.73, + 0, + 2, + 1, + -18.45999, + 79.58, + 0.99999, + 3, + -77.75, + 89.9, + 0, + 2, + 1, + -18.26, + 62.99, + 0.99128, + 2, + -51.85, + 66.01999, + 0.00871, + 2, + 1, + -17.2, + 38.13, + 0.98224, + 2, + -52.2, + 41.15, + 0.01775, + 2, + 1, + -16.33, + 17.6, + 0.99899, + 2, + -52.48, + 20.6, + 0.001, + 1, + 1, + -12.56, + -18.92, + 1, + 1, + 1, + -8.5, + -43.47, + 1, + 2, + 1, + -3.18, + -59.77, + 0.99999, + 2, + -43.72, + -57.39, + 0, + 2, + 1, + 5.9, + -60.19, + 0.99997, + 2, + -34.68, + -58.32, + 2.0E-5, + 1, + 1, + 7.08, + -44.27, + 1, + 2, + 1, + 14.77, + -33.13, + 0.98999, + 2, + -24.29, + -31.81, + 0.01, + 2, + 1, + -8.79, + 49.14, + 0.97355, + 2, + -43.17, + 51.66, + 0.02644, + 3, + 1, + 1.46, + 42.26, + 0.93257, + 2, + -33.32, + 44.21, + 0.06655, + 3, + -63.46, + 50.08, + 8.6E-4, + 3, + 1, + 15.58, + 38.4, + 0.87674, + 2, + -19.44, + 39.56, + 0.11952, + 3, + -50.06, + 44.21, + 0.00373, + 3, + 1, + 37.03, + 38.59999, + 0.57952, + 2, + 1.97, + 38.55, + 0.37344, + 3, + -28.81, + 41.29, + 0.04703, + 4, + 1, + 58.48, + 38.39, + 0.21, + 2, + 23.38, + 37.13, + 0.53833, + 3, + -7.61, + 37.96, + 0.23357, + 4, + -41.91, + 41.29, + 0.01806, + 4, + 1, + 80.6, + 41.02, + 0.01873, + 2, + 45.61, + 38.5, + 0.2507, + 3, + 14.64, + 37.34, + 0.50249, + 4, + -19.76, + 38.97, + 0.22806, + 3, + 2, + 68.21, + 41.93, + 0.05307, + 3, + 37.45, + 38.74, + 0.33298, + 4, + 3.08, + 38.61, + 0.61394, + 3, + 2, + 79.65, + 44.39, + 0.02688, + 3, + 49.07, + 40.16999, + 0.25447, + 4, + 14.78, + 39.15, + 0.71864, + 4, + 1, + 127.53, + 53.34, + 0, + 2, + 93.17, + 48.15, + 0.00264, + 3, + 62.87, + 42.71, + 0.07727, + 4, + 28.72, + 40.63, + 0.92006, + 4, + 1, + 139.9, + 55.83, + 0, + 2, + 105.66, + 49.94, + 1.0E-5, + 3, + 75.47, + 43.37, + 0.02753, + 4, + 41.34, + 40.32, + 0.97244, + 3, + 1, + 155.49, + 58.08, + 1.0E-5, + 3, + 91.22, + 43.33, + 0.00837, + 4, + 57.04, + 39.08, + 0.9916, + 2, + 1, + -9.28, + 29.12, + 0.98726, + 2, + -44.8, + 31.7, + 0.01273, + 3, + 1, + 2.41, + 25.85, + 0.94026, + 2, + -33.3, + 27.78, + 0.05944, + 3, + -64.91, + 33.71, + 2.8E-4, + 3, + 1, + 17.41, + 22.77, + 0.82933, + 2, + -18.49, + 23.86, + 0.16668, + 3, + -50.51, + 28.48, + 0.00397, + 3, + 1, + 39.48, + 22.62, + 0.37452, + 2, + 3.52, + 22.46, + 0.58053, + 3, + -28.7, + 25.13, + 0.04493, + 4, + 1, + 61.3, + 24.25, + 0.05807, + 2, + 25.39, + 22.86, + 0.63432, + 3, + -6.88, + 23.57, + 0.29833, + 4, + -42.29, + 26.88, + 0.00925, + 4, + 1, + 82.97, + 27.25, + 0.0048, + 2, + 47.2, + 24.62, + 0.18387, + 3, + 14.98, + 23.37, + 0.69095, + 4, + -20.49, + 25.01, + 0.12035, + 3, + 2, + 71.67, + 26.78, + 0.02732, + 3, + 39.55, + 23.34, + 0.37815, + 4, + 4, + 23.1, + 0.59451, + 4, + 1, + 117.92, + 32.55, + 0, + 2, + 82.4, + 27.94, + 0.0088, + 3, + 50.34, + 23.53, + 0.19815, + 4, + 14.76, + 22.47, + 0.79304, + 4, + 1, + 132.08, + 35.21, + 0, + 2, + 96.68, + 29.8, + 0.00122, + 3, + 64.73, + 24.11, + 0.07523, + 4, + 29.16, + 21.94, + 0.92353, + 3, + 1, + 144.52, + 38.4, + 0, + 3, + 77.5, + 25.45, + 0.01665, + 4, + 42, + 22.3, + 0.98333, + 1, + 1, + -7.99, + 7.23, + 1, + 2, + 1, + 2.88, + 5.3, + 0.99479, + 2, + -33.99, + 7.23, + 0.0052, + 1, + 1, + 18.42, + 6.57, + 1, + 3, + 1, + 41.09, + 5.93, + 0.41233, + 2, + 4.17999, + 5.7, + 0.58466, + 3, + -29.54, + 8.37, + 0.00299, + 3, + 1, + 62.8, + 7.27, + 0.01799, + 2, + 25.93, + 5.81, + 0.87753, + 3, + -7.87, + 6.54, + 0.10446, + 4, + 1, + 84.81, + 12.35, + 8.6E-4, + 2, + 48.2, + 9.64, + 0.15199, + 3, + 14.64, + 8.37, + 0.81112, + 4, + -21.98, + 10.08, + 0.03601, + 3, + 2, + 72.92, + 11.13, + 1.2E-4, + 3, + 39.4, + 7.64, + 0.29998, + 4, + 2.64, + 7.46, + 0.69988, + 1, + 4, + 13.61, + 6.24, + 1, + 3, + 1, + 134.69, + 19.01, + 0, + 3, + 64.96, + 7.7, + 0.01639, + 4, + 28.13, + 5.56, + 0.9836, + 2, + 1, + 147.61, + 21.55, + 0, + 4, + 41.29, + 5.19, + 0.99999, + 1, + 1, + -5.97, + -18.53, + 1, + 1, + 1, + 6.3, + -13.85, + 1, + 1, + 1, + 21.38, + -10.68, + 1, + 2, + 1, + 42.56, + -8.85, + 0.2128, + 2, + 4.82, + -9.14, + 0.78719, + 2, + 2, + 26.15, + -8.91, + 0.79732, + 3, + -8.97, + -8.14, + 0.20267, + 2, + 2, + 47.97, + -7.01, + 0.09181, + 3, + 12.92, + -8.2, + 0.90818, + 3, + 1, + 109.38, + -1.36, + 0, + 3, + 36.95, + -8.77, + 0.65095, + 4, + -1.04999, + -8.71, + 0.34904, + 2, + 3, + 48.73, + -10.69, + 0.18603, + 4, + 10.54, + -11.53, + 0.81396, + 2, + 3, + 63.51, + -10.82, + 0.02315, + 4, + 25.27, + -12.79, + 0.97684, + 2, + 1, + 147.12, + 3.92, + 0, + 4, + 36.91999, + -11.89, + 1, + 2, + 1, + 2.21, + -34.66999, + 0.99941, + 2, + -36.91999, + -32.63, + 5.8E-4, + 2, + 1, + 181.71, + 44.99, + 1.0E-5, + 4, + 79.72, + 20.52, + 0.99998, + 2, + 1, + 188.17, + 36.09, + 1.0E-5, + 4, + 84.06, + 10.42, + 0.99998, + 2, + 1, + 199.31, + 39, + 1.0E-5, + 4, + 95.57, + 10.8, + 0.99998, + 2, + 1, + 194.96, + 48.49, + 1.0E-5, + 4, + 93.42, + 21.01, + 0.99998, + 2, + 1, + 192.02, + 58.96, + 1.0E-5, + 4, + 92.87, + 31.87, + 0.99998 + ], + "hull": 48, + "edges": [ + 10, + 12, + 16, + 18, + 22, + 24, + 24, + 26, + 26, + 28, + 32, + 34, + 42, + 44, + 44, + 46, + 46, + 48, + 48, + 50, + 50, + 52, + 52, + 54, + 54, + 56, + 56, + 58, + 58, + 60, + 60, + 62, + 62, + 64, + 64, + 66, + 66, + 68, + 68, + 70, + 70, + 72, + 72, + 74, + 74, + 76, + 76, + 78, + 82, + 84, + 84, + 86, + 86, + 88, + 88, + 90, + 90, + 92, + 92, + 94, + 96, + 98, + 98, + 100, + 100, + 102, + 102, + 104, + 104, + 106, + 106, + 108, + 108, + 110, + 110, + 112, + 112, + 114, + 114, + 116, + 116, + 48, + 118, + 120, + 120, + 122, + 122, + 124, + 124, + 126, + 126, + 128, + 128, + 130, + 130, + 132, + 132, + 134, + 134, + 136, + 136, + 22, + 138, + 140, + 140, + 142, + 142, + 144, + 144, + 146, + 146, + 148, + 148, + 150, + 150, + 152, + 152, + 154, + 154, + 156, + 18, + 20, + 20, + 22, + 156, + 20, + 158, + 160, + 160, + 162, + 162, + 164, + 164, + 166, + 166, + 168, + 168, + 170, + 170, + 172, + 172, + 174, + 174, + 176, + 8, + 10, + 6, + 8, + 2, + 4, + 4, + 6, + 2, + 0, + 0, + 94, + 12, + 14, + 14, + 16, + 72, + 96, + 96, + 118, + 118, + 138, + 138, + 158, + 78, + 80, + 80, + 82, + 118, + 80, + 96, + 78, + 138, + 82, + 158, + 84, + 92, + 88, + 92, + 178, + 178, + 158, + 86, + 178, + 178, + 94, + 28, + 30, + 30, + 32, + 182, + 184, + 180, + 186, + 38, + 40, + 40, + 42, + 188, + 46, + 34, + 36, + 36, + 38, + 186, + 36, + 34, + 184, + 188, + 38 + ], + "width": 144, + "height": 233 + } + }, + "shadow": { + "shadow": { + "x": -0.01, + "y": 0.17, + "width": 179, + "height": 33 + } + }, + "skin": { + "skin": { + "x": 70.18, + "y": 17.74, + "rotation": -97.04, + "width": 68, + "height": 79 + } + } + } + }, + "animations": { + "Attack": { + "slots": { + "glowy eye": { + "color": [ + { + "time": 0, + "color": "ffffff32", + "curve": "stepped" + }, + { + "time": 0.1666, + "color": "ffffff32", + "curve": [ + 0.25, + 0, + 0.75, + 1 + ] + }, + { + "time": 0.3333, + "color": "ffffffff", + "curve": [ + 0.25, + 0, + 0.75, + 1 + ] + }, + { + "time": 0.8333, + "color": "ffffff32", + "curve": "stepped" + }, + { + "time": 1, + "color": "ffffff32" + } + ] + }, + "glowy eye2": { + "color": [ + { + "time": 0, + "color": "ffffff00", + "curve": "stepped" + }, + { + "time": 0.1666, + "color": "ffffff00", + "curve": [ + 0.25, + 0, + 0.75, + 1 + ] + }, + { + "time": 0.5, + "color": "ffffffff", + "curve": "stepped" + }, + { + "time": 0.6666, + "color": "ffffffff", + "curve": [ + 0.25, + 0, + 0.75, + 1 + ] + }, + { + "time": 0.8333, + "color": "ffffff00", + "curve": "stepped" + }, + { + "time": 1, + "color": "ffffff00" + } + ] + } + }, + "bones": { + "root": { + "rotate": [ + { + "time": 0, + "angle": 0, + "curve": "stepped" + }, + { + "time": 1, + "angle": 0 + } + ], + "translate": [ + { + "time": 0, + "x": 0, + "y": 0, + "curve": "stepped" + }, + { + "time": 1, + "x": 0, + "y": 0 + } + ], + "scale": [ + { + "time": 0, + "x": 1, + "y": 1, + "curve": "stepped" + }, + { + "time": 1, + "x": 1, + "y": 1 + } + ] + }, + "shadow": { + "rotate": [ + { + "time": 0, + "angle": 0, + "curve": "stepped" + }, + { + "time": 1, + "angle": 0 + } + ], + "translate": [ + { + "time": 0, + "x": 0, + "y": 0, + "curve": "stepped" + }, + { + "time": 1, + "x": 0, + "y": 0 + } + ], + "scale": [ + { + "time": 0, + "x": 1, + "y": 1, + "curve": [ + 0.25, + 0, + 0.75, + 1 + ] + }, + { + "time": 0.3333, + "x": 0.844, + "y": 0.844, + "curve": [ + 0.25, + 0, + 0.75, + 1 + ] + }, + { + "time": 0.5, + "x": 0.916, + "y": 0.916, + "curve": [ + 0.25, + 0, + 0.75, + 1 + ] + }, + { + "time": 0.6666, + "x": 0.844, + "y": 0.844, + "curve": [ + 0.25, + 0, + 0.75, + 1 + ] + }, + { + "time": 1, + "x": 1, + "y": 1 + } + ] + }, + "Spine_": { + "rotate": [ + { + "time": 0, + "angle": 0, + "curve": "stepped" + }, + { + "time": 1, + "angle": 0 + } + ], + "translate": [ + { + "time": 0, + "x": 0, + "y": 0, + "curve": [ + 0.25, + 0, + 0.75, + 1 + ] + }, + { + "time": 0.3333, + "x": 0, + "y": 27.03, + "curve": [ + 0.25, + 0, + 0.75, + 1 + ] + }, + { + "time": 0.5, + "x": 0, + "y": 22.22, + "curve": [ + 0.25, + 0, + 0.75, + 1 + ] + }, + { + "time": 0.6666, + "x": 0, + "y": 27.03, + "curve": [ + 0.25, + 0, + 0.75, + 1 + ] + }, + { + "time": 1, + "x": 0, + "y": 0 + } + ], + "scale": [ + { + "time": 0, + "x": 1, + "y": 1, + "curve": "stepped" + }, + { + "time": 1, + "x": 1, + "y": 1 + } + ] + }, + "Spine_2": { + "rotate": [ + { + "time": 0, + "angle": 0, + "curve": "stepped" + }, + { + "time": 1, + "angle": 0 + } + ], + "translate": [ + { + "time": 0, + "x": 0, + "y": 0, + "curve": "stepped" + }, + { + "time": 1, + "x": 0, + "y": 0 + } + ], + "scale": [ + { + "time": 0, + "x": 1, + "y": 1, + "curve": "stepped" + }, + { + "time": 1, + "x": 1, + "y": 1 + } + ] + }, + "Spine_3": { + "rotate": [ + { + "time": 0, + "angle": 0, + "curve": "stepped" + }, + { + "time": 1, + "angle": 0 + } + ], + "translate": [ + { + "time": 0, + "x": 0, + "y": 0, + "curve": "stepped" + }, + { + "time": 1, + "x": 0, + "y": 0 + } + ], + "scale": [ + { + "time": 0, + "x": 1, + "y": 1, + "curve": "stepped" + }, + { + "time": 1, + "x": 1, + "y": 1 + } + ] + }, + "Spine_4": { + "rotate": [ + { + "time": 0, + "angle": 0, + "curve": "stepped" + }, + { + "time": 1, + "angle": 0 + } + ], + "translate": [ + { + "time": 0, + "x": 0, + "y": 0, + "curve": "stepped" + }, + { + "time": 1, + "x": 0, + "y": 0 + } + ], + "scale": [ + { + "time": 0, + "x": 1, + "y": 1, + "curve": "stepped" + }, + { + "time": 1, + "x": 1, + "y": 1 + } + ] + }, + "Head": { + "rotate": [ + { + "time": 0, + "angle": 0, + "curve": [ + 0.25, + 0, + 0.75, + 1 + ] + }, + { + "time": 0.3333, + "angle": 5.23, + "curve": "stepped" + }, + { + "time": 0.6666, + "angle": 5.23, + "curve": [ + 0.25, + 0, + 0.75, + 1 + ] + }, + { + "time": 1, + "angle": 0 + } + ], + "translate": [ + { + "time": 0, + "x": 0, + "y": 0, + "curve": "stepped" + }, + { + "time": 1, + "x": 0, + "y": 0 + } + ], + "scale": [ + { + "time": 0, + "x": 1, + "y": 1, + "curve": "stepped" + }, + { + "time": 1, + "x": 1, + "y": 1 + } + ] + }, + "arm_R_1": { + "rotate": [ + { + "time": 0, + "angle": 0, + "curve": [ + 0.25, + 0, + 0.75, + 1 + ] + }, + { + "time": 0.3333, + "angle": 4.89, + "curve": [ + 0.25, + 0, + 0.75, + 1 + ] + }, + { + "time": 0.6666, + "angle": 5.87, + "curve": [ + 0.25, + 0, + 0.75, + 1 + ] + }, + { + "time": 1, + "angle": 0 + } + ], + "translate": [ + { + "time": 0, + "x": 0, + "y": 0, + "curve": "stepped" + }, + { + "time": 1, + "x": 0, + "y": 0 + } + ], + "scale": [ + { + "time": 0, + "x": 1, + "y": 1, + "curve": "stepped" + }, + { + "time": 1, + "x": 1, + "y": 1 + } + ] + }, + "arm_R_2": { + "rotate": [ + { + "time": 0, + "angle": 0, + "curve": [ + 0.25, + 0, + 0.75, + 1 + ] + }, + { + "time": 0.2666, + "angle": -35.25, + "curve": [ + 0.25, + 0, + 0.75, + 1 + ] + }, + { + "time": 0.4333, + "angle": -29.62, + "curve": [ + 0.25, + 0, + 0.75, + 1 + ] + }, + { + "time": 0.6333, + "angle": -36.05, + "curve": [ + 0.25, + 0, + 0.75, + 1 + ] + }, + { + "time": 1, + "angle": 0 + } + ], + "translate": [ + { + "time": 0, + "x": 0, + "y": 0, + "curve": "stepped" + }, + { + "time": 1, + "x": 0, + "y": 0 + } + ], + "scale": [ + { + "time": 0, + "x": 1, + "y": 1, + "curve": "stepped" + }, + { + "time": 1, + "x": 1, + "y": 1 + } + ] + }, + "arm_R_3": { + "rotate": [ + { + "time": 0, + "angle": 0, + "curve": [ + 0.25, + 0, + 0.75, + 1 + ] + }, + { + "time": 0.3, + "angle": -35.25, + "curve": [ + 0.25, + 0, + 0.75, + 1 + ] + }, + { + "time": 0.4666, + "angle": -29.62, + "curve": [ + 0.25, + 0, + 0.75, + 1 + ] + }, + { + "time": 0.6666, + "angle": -36.05, + "curve": [ + 0.25, + 0, + 0.75, + 1 + ] + }, + { + "time": 1, + "angle": 0 + } + ], + "translate": [ + { + "time": 0, + "x": 0, + "y": 0, + "curve": "stepped" + }, + { + "time": 1, + "x": 0, + "y": 0 + } + ], + "scale": [ + { + "time": 0, + "x": 1, + "y": 1, + "curve": "stepped" + }, + { + "time": 1, + "x": 1, + "y": 1 + } + ] + }, + "arm_R_4": { + "rotate": [ + { + "time": 0, + "angle": 0, + "curve": [ + 0.25, + 0, + 0.75, + 1 + ] + }, + { + "time": 0.3333, + "angle": -35.25, + "curve": [ + 0.25, + 0, + 0.75, + 1 + ] + }, + { + "time": 0.5, + "angle": -29.62, + "curve": [ + 0.25, + 0, + 0.75, + 1 + ] + }, + { + "time": 0.7, + "angle": -36.05, + "curve": [ + 0.25, + 0, + 0.75, + 1 + ] + }, + { + "time": 1, + "angle": 0 + } + ], + "translate": [ + { + "time": 0, + "x": 0, + "y": 0, + "curve": "stepped" + }, + { + "time": 1, + "x": 0, + "y": 0 + } + ], + "scale": [ + { + "time": 0, + "x": 1, + "y": 1, + "curve": "stepped" + }, + { + "time": 1, + "x": 1, + "y": 1 + } + ] + }, + "Light": { + "rotate": [ + { + "time": 0, + "angle": 0, + "curve": "stepped" + }, + { + "time": 0.1666, + "angle": 0, + "curve": "stepped" + }, + { + "time": 0.8333, + "angle": 0, + "curve": "stepped" + }, + { + "time": 1, + "angle": 0 + } + ], + "translate": [ + { + "time": 0, + "x": 0, + "y": 0, + "curve": "stepped" + }, + { + "time": 0.1666, + "x": 0, + "y": 0, + "curve": "stepped" + }, + { + "time": 0.8333, + "x": 0, + "y": 0, + "curve": "stepped" + }, + { + "time": 1, + "x": 0, + "y": 0 + } + ], + "scale": [ + { + "time": 0, + "x": 1, + "y": 1, + "curve": "stepped" + }, + { + "time": 0.1666, + "x": 1, + "y": 1, + "curve": "stepped" + }, + { + "time": 0.8333, + "x": 1, + "y": 1, + "curve": "stepped" + }, + { + "time": 1, + "x": 1, + "y": 1 + } + ] + }, + "arm_L_1": { + "rotate": [ + { + "time": 0, + "angle": 0, + "curve": [ + 0.25, + 0, + 0.75, + 1 + ] + }, + { + "time": 0.2666, + "angle": 8.56, + "curve": [ + 0.25, + 0, + 0.75, + 1 + ] + }, + { + "time": 0.4333, + "angle": 6.35, + "curve": [ + 0.25, + 0, + 0.75, + 1 + ] + }, + { + "time": 0.6333, + "angle": 8.47, + "curve": [ + 0.25, + 0, + 0.75, + 1 + ] + }, + { + "time": 1, + "angle": 0 + } + ], + "translate": [ + { + "time": 0, + "x": 0, + "y": 0, + "curve": "stepped" + }, + { + "time": 1, + "x": 0, + "y": 0 + } + ], + "scale": [ + { + "time": 0, + "x": 1, + "y": 1, + "curve": "stepped" + }, + { + "time": 1, + "x": 1, + "y": 1 + } + ] + }, + "arm_L_2": { + "rotate": [ + { + "time": 0, + "angle": 0, + "curve": [ + 0.25, + 0, + 0.75, + 1 + ] + }, + { + "time": 0.2666, + "angle": 8.56, + "curve": [ + 0.25, + 0, + 0.75, + 1 + ] + }, + { + "time": 0.4333, + "angle": 6.35, + "curve": [ + 0.25, + 0, + 0.75, + 1 + ] + }, + { + "time": 0.6333, + "angle": 8.47, + "curve": [ + 0.25, + 0, + 0.75, + 1 + ] + }, + { + "time": 1, + "angle": 0 + } + ], + "translate": [ + { + "time": 0, + "x": 0, + "y": 0, + "curve": "stepped" + }, + { + "time": 1, + "x": 0, + "y": 0 + } + ], + "scale": [ + { + "time": 0, + "x": 1, + "y": 1, + "curve": "stepped" + }, + { + "time": 1, + "x": 1, + "y": 1 + } + ] + }, + "arm_L_3": { + "rotate": [ + { + "time": 0, + "angle": 0, + "curve": [ + 0.25, + 0, + 0.75, + 1 + ] + }, + { + "time": 0.2666, + "angle": 8.56, + "curve": [ + 0.25, + 0, + 0.75, + 1 + ] + }, + { + "time": 0.4333, + "angle": 6.35, + "curve": [ + 0.25, + 0, + 0.75, + 1 + ] + }, + { + "time": 0.6333, + "angle": 8.47, + "curve": [ + 0.25, + 0, + 0.75, + 1 + ] + }, + { + "time": 1, + "angle": 0 + } + ], + "translate": [ + { + "time": 0, + "x": 0, + "y": 0, + "curve": "stepped" + }, + { + "time": 1, + "x": 0, + "y": 0 + } + ], + "scale": [ + { + "time": 0, + "x": 1, + "y": 1, + "curve": "stepped" + }, + { + "time": 1, + "x": 1, + "y": 1 + } + ] + }, + "Detail_": { + "rotate": [ + { + "time": 0, + "angle": 0, + "curve": [ + 0.25, + 0, + 0.75, + 1 + ] + }, + { + "time": 0.3333, + "angle": -42.55, + "curve": "stepped" + }, + { + "time": 0.5666, + "angle": -42.55, + "curve": [ + 0.25, + 0, + 0.75, + 1 + ] + }, + { + "time": 1, + "angle": 0 + } + ], + "translate": [ + { + "time": 0, + "x": 0, + "y": 0, + "curve": "stepped" + }, + { + "time": 1, + "x": 0, + "y": 0 + } + ], + "scale": [ + { + "time": 0, + "x": 1, + "y": 1, + "curve": "stepped" + }, + { + "time": 1, + "x": 1, + "y": 1 + } + ] + }, + "Detail_2": { + "rotate": [ + { + "time": 0, + "angle": 0, + "curve": [ + 0.25, + 0, + 0.75, + 1 + ] + }, + { + "time": 0.3333, + "angle": -43.34, + "curve": "stepped" + }, + { + "time": 0.5666, + "angle": -43.34, + "curve": [ + 0.25, + 0, + 0.75, + 1 + ] + }, + { + "time": 1, + "angle": 0 + } + ], + "translate": [ + { + "time": 0, + "x": 0, + "y": 0, + "curve": "stepped" + }, + { + "time": 1, + "x": 0, + "y": 0 + } + ], + "scale": [ + { + "time": 0, + "x": 1, + "y": 1, + "curve": "stepped" + }, + { + "time": 1, + "x": 1, + "y": 1 + } + ] + }, + "Detail_3": { + "rotate": [ + { + "time": 0, + "angle": 0, + "curve": [ + 0.25, + 0, + 0.75, + 1 + ] + }, + { + "time": 0.3333, + "angle": -22.51, + "curve": "stepped" + }, + { + "time": 0.5666, + "angle": -22.51, + "curve": [ + 0.25, + 0, + 0.75, + 1 + ] + }, + { + "time": 1, + "angle": 0 + } + ], + "translate": [ + { + "time": 0, + "x": 0, + "y": 0, + "curve": "stepped" + }, + { + "time": 1, + "x": 0, + "y": 0 + } + ], + "scale": [ + { + "time": 0, + "x": 1, + "y": 1, + "curve": "stepped" + }, + { + "time": 1, + "x": 1, + "y": 1 + } + ] + }, + "Detail_4": { + "rotate": [ + { + "time": 0, + "angle": 0, + "curve": [ + 0.25, + 0, + 0.75, + 1 + ] + }, + { + "time": 0.3333, + "angle": -37.21, + "curve": "stepped" + }, + { + "time": 0.5666, + "angle": -37.21, + "curve": [ + 0.25, + 0, + 0.75, + 1 + ] + }, + { + "time": 1, + "angle": 0 + } + ], + "translate": [ + { + "time": 0, + "x": 0, + "y": 0, + "curve": "stepped" + }, + { + "time": 1, + "x": 0, + "y": 0 + } + ], + "scale": [ + { + "time": 0, + "x": 1, + "y": 1, + "curve": "stepped" + }, + { + "time": 1, + "x": 1, + "y": 1 + } + ] + } + }, + "deform": { + "default": { + "robe": { + "robe": [ + { + "time": 0, + "offset": 58, + "vertices": [ + 0.47124, + 1.23702, + 0.73266, + 1.10248 + ], + "curve": [ + 0.25, + 0, + 0.75, + 1 + ] + }, + { + "time": 0.3333, + "offset": 58, + "vertices": [ + 0.47124, + 1.23702, + 0.73266, + 1.10248, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + -4.38714, + -1.89494, + -4.48724, + -1.64404, + -16.64237, + -6.24098, + -17.37329, + -3.75355, + -14.54131, + -8.52725, + -15.62722, + -6.32116, + -5.80833, + -2.24509, + -5.92598, + -1.91334, + -0.80325, + -0.28836, + -0.81829, + -0.24252, + -1.2358, + -0.12357, + -1.24085, + -0.05356, + -2.0391, + -0.41194, + -2.96592, + 0.53553, + -13.71764, + 4.03706, + -13.46774, + 4.80566, + -17.21914, + 1.60656, + -17.10099, + 2.57687, + -6.11726, + 0.8445 + ], + "curve": "stepped" + }, + { + "time": 0.6666, + "offset": 58, + "vertices": [ + 0.47124, + 1.23702, + 0.73266, + 1.10248, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + -4.38714, + -1.89494, + -4.48724, + -1.64404, + -16.64237, + -6.24098, + -17.37329, + -3.75355, + -14.54131, + -8.52725, + -15.62722, + -6.32116, + -5.80833, + -2.24509, + -5.92598, + -1.91334, + -0.80325, + -0.28836, + -0.81829, + -0.24252, + -1.2358, + -0.12357, + -1.24085, + -0.05356, + -2.0391, + -0.41194, + -2.96592, + 0.53553, + -13.71764, + 4.03706, + -13.46774, + 4.80566, + -17.21914, + 1.60656, + -17.10099, + 2.57687, + -6.11726, + 0.8445 + ], + "curve": [ + 0.25, + 0, + 0.75, + 1 + ] + }, + { + "time": 1, + "offset": 58, + "vertices": [ + 0.47124, + 1.23702, + 0.73266, + 1.10248 + ] + } + ] + } + } + } + }, + "Hit": { + "slots": { + "glowy eye": { + "color": [ + { + "time": 0, + "color": "ffffff00", + "curve": "stepped" + }, + { + "time": 0.3333, + "color": "ffffff00" + } + ] + }, + "glowy eye2": { + "color": [ + { + "time": 0, + "color": "ffffff4e", + "curve": "stepped" + }, + { + "time": 0.3333, + "color": "ffffff4e" + } + ] + } + }, + "bones": { + "root": { + "rotate": [ + { + "time": 0, + "angle": 0, + "curve": "stepped" + }, + { + "time": 0.3333, + "angle": 0 + } + ], + "translate": [ + { + "time": 0, + "x": 0, + "y": 0, + "curve": [ + 0.25, + 0, + 0.75, + 1 + ] + }, + { + "time": 0.1, + "x": 23.36, + "y": 0, + "curve": [ + 0.25, + 0, + 0.75, + 1 + ] + }, + { + "time": 0.3333, + "x": 0, + "y": 0 + } + ], + "scale": [ + { + "time": 0, + "x": 1, + "y": 1, + "curve": "stepped" + }, + { + "time": 0.3333, + "x": 1, + "y": 1 + } + ] + }, + "shadow": { + "rotate": [ + { + "time": 0, + "angle": 0, + "curve": "stepped" + }, + { + "time": 0.3333, + "angle": 0 + } + ], + "translate": [ + { + "time": 0, + "x": 0, + "y": 0, + "curve": "stepped" + }, + { + "time": 0.3333, + "x": 0, + "y": 0 + } + ], + "scale": [ + { + "time": 0, + "x": 1, + "y": 1, + "curve": "stepped" + }, + { + "time": 0.3333, + "x": 1, + "y": 1 + } + ] + }, + "Spine_": { + "rotate": [ + { + "time": 0, + "angle": 0, + "curve": "stepped" + }, + { + "time": 0.3333, + "angle": 0 + } + ], + "translate": [ + { + "time": 0, + "x": 0, + "y": 0, + "curve": "stepped" + }, + { + "time": 0.3333, + "x": 0, + "y": 0 + } + ], + "scale": [ + { + "time": 0, + "x": 1, + "y": 1, + "curve": [ + 0.25, + 0, + 0.75, + 1 + ] + }, + { + "time": 0.1, + "x": 0.916, + "y": 1.086, + "curve": [ + 0.25, + 0, + 0.75, + 1 + ] + }, + { + "time": 0.3333, + "x": 1, + "y": 1 + } + ] + }, + "Spine_2": { + "rotate": [ + { + "time": 0, + "angle": 0, + "curve": "stepped" + }, + { + "time": 0.3333, + "angle": 0 + } + ], + "translate": [ + { + "time": 0, + "x": 0, + "y": 0, + "curve": "stepped" + }, + { + "time": 0.3333, + "x": 0, + "y": 0 + } + ], + "scale": [ + { + "time": 0, + "x": 1, + "y": 1, + "curve": "stepped" + }, + { + "time": 0.3333, + "x": 1, + "y": 1 + } + ] + }, + "Spine_3": { + "rotate": [ + { + "time": 0, + "angle": 0, + "curve": [ + 0.25, + 0, + 0.75, + 1 + ] + }, + { + "time": 0.1, + "angle": -8.14, + "curve": [ + 0.25, + 0, + 0.75, + 1 + ] + }, + { + "time": 0.3333, + "angle": 0 + } + ], + "translate": [ + { + "time": 0, + "x": 0, + "y": 0, + "curve": "stepped" + }, + { + "time": 0.3333, + "x": 0, + "y": 0 + } + ], + "scale": [ + { + "time": 0, + "x": 1, + "y": 1, + "curve": "stepped" + }, + { + "time": 0.3333, + "x": 1, + "y": 1 + } + ] + }, + "Spine_4": { + "rotate": [ + { + "time": 0, + "angle": 0, + "curve": [ + 0.25, + 0, + 0.75, + 1 + ] + }, + { + "time": 0.1, + "angle": -8.14, + "curve": [ + 0.25, + 0, + 0.75, + 1 + ] + }, + { + "time": 0.3333, + "angle": 0 + } + ], + "translate": [ + { + "time": 0, + "x": 0, + "y": 0, + "curve": "stepped" + }, + { + "time": 0.3333, + "x": 0, + "y": 0 + } + ], + "scale": [ + { + "time": 0, + "x": 1, + "y": 1, + "curve": "stepped" + }, + { + "time": 0.3333, + "x": 1, + "y": 1 + } + ] + }, + "Head": { + "rotate": [ + { + "time": 0, + "angle": 0, + "curve": "stepped" + }, + { + "time": 0.3333, + "angle": 0 + } + ], + "translate": [ + { + "time": 0, + "x": 0, + "y": 0, + "curve": "stepped" + }, + { + "time": 0.3333, + "x": 0, + "y": 0 + } + ], + "scale": [ + { + "time": 0, + "x": 1, + "y": 1, + "curve": "stepped" + }, + { + "time": 0.3333, + "x": 1, + "y": 1 + } + ] + }, + "arm_R_1": { + "rotate": [ + { + "time": 0, + "angle": 0, + "curve": [ + 0.25, + 0, + 0.75, + 1 + ] + }, + { + "time": 0.1, + "angle": 6.64, + "curve": [ + 0.25, + 0, + 0.75, + 1 + ] + }, + { + "time": 0.3333, + "angle": 0 + } + ], + "translate": [ + { + "time": 0, + "x": 0, + "y": 0, + "curve": "stepped" + }, + { + "time": 0.3333, + "x": 0, + "y": 0 + } + ], + "scale": [ + { + "time": 0, + "x": 1, + "y": 1, + "curve": "stepped" + }, + { + "time": 0.3333, + "x": 1, + "y": 1 + } + ] + }, + "arm_R_2": { + "rotate": [ + { + "time": 0, + "angle": 0, + "curve": [ + 0.25, + 0, + 0.75, + 1 + ] + }, + { + "time": 0.1, + "angle": 11.84, + "curve": [ + 0.25, + 0, + 0.75, + 1 + ] + }, + { + "time": 0.3333, + "angle": 0 + } + ], + "translate": [ + { + "time": 0, + "x": 0, + "y": 0, + "curve": "stepped" + }, + { + "time": 0.3333, + "x": 0, + "y": 0 + } + ], + "scale": [ + { + "time": 0, + "x": 1, + "y": 1, + "curve": [ + 0.25, + 0, + 0.75, + 1 + ] + }, + { + "time": 0.1, + "x": 0.873, + "y": 1, + "curve": [ + 0.25, + 0, + 0.75, + 1 + ] + }, + { + "time": 0.3333, + "x": 1, + "y": 1 + } + ] + }, + "arm_R_3": { + "rotate": [ + { + "time": 0, + "angle": 0, + "curve": [ + 0.25, + 0, + 0.75, + 1 + ] + }, + { + "time": 0.1, + "angle": 11.84, + "curve": [ + 0.25, + 0, + 0.75, + 1 + ] + }, + { + "time": 0.3333, + "angle": 0 + } + ], + "translate": [ + { + "time": 0, + "x": 0, + "y": 0, + "curve": "stepped" + }, + { + "time": 0.3333, + "x": 0, + "y": 0 + } + ], + "scale": [ + { + "time": 0, + "x": 1, + "y": 1, + "curve": [ + 0.25, + 0, + 0.75, + 1 + ] + }, + { + "time": 0.1, + "x": 0.873, + "y": 1, + "curve": [ + 0.25, + 0, + 0.75, + 1 + ] + }, + { + "time": 0.3333, + "x": 1, + "y": 1 + } + ] + }, + "arm_R_4": { + "rotate": [ + { + "time": 0, + "angle": 0, + "curve": [ + 0.25, + 0, + 0.75, + 1 + ] + }, + { + "time": 0.1, + "angle": 11.84, + "curve": [ + 0.25, + 0, + 0.75, + 1 + ] + }, + { + "time": 0.3333, + "angle": 0 + } + ], + "translate": [ + { + "time": 0, + "x": 0, + "y": 0, + "curve": "stepped" + }, + { + "time": 0.3333, + "x": 0, + "y": 0 + } + ], + "scale": [ + { + "time": 0, + "x": 1, + "y": 1, + "curve": [ + 0.25, + 0, + 0.75, + 1 + ] + }, + { + "time": 0.1, + "x": 0.873, + "y": 1, + "curve": [ + 0.25, + 0, + 0.75, + 1 + ] + }, + { + "time": 0.3333, + "x": 1, + "y": 1 + } + ] + }, + "Light": { + "rotate": [ + { + "time": 0, + "angle": 0, + "curve": "stepped" + }, + { + "time": 0.3333, + "angle": 0 + } + ], + "translate": [ + { + "time": 0, + "x": 0, + "y": 0, + "curve": "stepped" + }, + { + "time": 0.3333, + "x": 0, + "y": 0 + } + ], + "scale": [ + { + "time": 0, + "x": 1, + "y": 1, + "curve": "stepped" + }, + { + "time": 0.3333, + "x": 1, + "y": 1 + } + ] + }, + "arm_L_1": { + "rotate": [ + { + "time": 0, + "angle": 0, + "curve": [ + 0.25, + 0, + 0.75, + 1 + ] + }, + { + "time": 0.1, + "angle": 17.85, + "curve": [ + 0.25, + 0, + 0.75, + 1 + ] + }, + { + "time": 0.3333, + "angle": 0 + } + ], + "translate": [ + { + "time": 0, + "x": 0, + "y": 0, + "curve": "stepped" + }, + { + "time": 0.3333, + "x": 0, + "y": 0 + } + ], + "scale": [ + { + "time": 0, + "x": 1, + "y": 1, + "curve": "stepped" + }, + { + "time": 0.3333, + "x": 1, + "y": 1 + } + ] + }, + "arm_L_2": { + "rotate": [ + { + "time": 0, + "angle": 0, + "curve": "stepped" + }, + { + "time": 0.3333, + "angle": 0 + } + ], + "translate": [ + { + "time": 0, + "x": 0, + "y": 0, + "curve": "stepped" + }, + { + "time": 0.3333, + "x": 0, + "y": 0 + } + ], + "scale": [ + { + "time": 0, + "x": 1, + "y": 1, + "curve": "stepped" + }, + { + "time": 0.3333, + "x": 1, + "y": 1 + } + ] + }, + "arm_L_3": { + "rotate": [ + { + "time": 0, + "angle": 0, + "curve": "stepped" + }, + { + "time": 0.3333, + "angle": 0 + } + ], + "translate": [ + { + "time": 0, + "x": 0, + "y": 0, + "curve": "stepped" + }, + { + "time": 0.3333, + "x": 0, + "y": 0 + } + ], + "scale": [ + { + "time": 0, + "x": 1, + "y": 1, + "curve": "stepped" + }, + { + "time": 0.3333, + "x": 1, + "y": 1 + } + ] + }, + "Detail_": { + "rotate": [ + { + "time": 0, + "angle": 0, + "curve": "stepped" + }, + { + "time": 0.3333, + "angle": 0 + } + ], + "translate": [ + { + "time": 0, + "x": 0, + "y": 0, + "curve": "stepped" + }, + { + "time": 0.3333, + "x": 0, + "y": 0 + } + ], + "scale": [ + { + "time": 0, + "x": 1, + "y": 1, + "curve": "stepped" + }, + { + "time": 0.3333, + "x": 1, + "y": 1 + } + ] + }, + "Detail_2": { + "rotate": [ + { + "time": 0, + "angle": 0, + "curve": "stepped" + }, + { + "time": 0.3333, + "angle": 0 + } + ], + "translate": [ + { + "time": 0, + "x": 0, + "y": 0, + "curve": "stepped" + }, + { + "time": 0.3333, + "x": 0, + "y": 0 + } + ], + "scale": [ + { + "time": 0, + "x": 1, + "y": 1, + "curve": "stepped" + }, + { + "time": 0.3333, + "x": 1, + "y": 1 + } + ] + }, + "Detail_3": { + "rotate": [ + { + "time": 0, + "angle": 0, + "curve": "stepped" + }, + { + "time": 0.3333, + "angle": 0 + } + ], + "translate": [ + { + "time": 0, + "x": 0, + "y": 0, + "curve": "stepped" + }, + { + "time": 0.3333, + "x": 0, + "y": 0 + } + ], + "scale": [ + { + "time": 0, + "x": 1, + "y": 1, + "curve": "stepped" + }, + { + "time": 0.3333, + "x": 1, + "y": 1 + } + ] + }, + "Detail_4": { + "rotate": [ + { + "time": 0, + "angle": 0, + "curve": "stepped" + }, + { + "time": 0.3333, + "angle": 0 + } + ], + "translate": [ + { + "time": 0, + "x": 0, + "y": 0, + "curve": "stepped" + }, + { + "time": 0.3333, + "x": 0, + "y": 0 + } + ], + "scale": [ + { + "time": 0, + "x": 1, + "y": 1, + "curve": "stepped" + }, + { + "time": 0.3333, + "x": 1, + "y": 1 + } + ] + } + }, + "deform": { + "default": { + "robe": { + "robe": [ + { + "time": 0, + "offset": 58, + "vertices": [ + 0.47124, + 1.23702, + 0.73266, + 1.10248 + ], + "curve": [ + 0.268, + 0, + 0.618, + 0.41 + ] + }, + { + "time": 0.1, + "offset": 58, + "vertices": [ + 0.47124, + 1.23702, + 0.73266, + 1.10248, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0.83402, + -7.03533, + 0.4354, + -7.07119, + 0.83402, + -7.03533, + 0.4354, + -7.07119, + 0.80699, + -7.03854, + 0.83402, + -7.03533, + 0.4354, + -7.07119, + 0.80699, + -7.03854, + 0.83402, + -7.03533, + 0.4354, + -7.07119, + 0.80699, + -7.03854, + 0.83402, + -7.03533, + 0.4354, + -7.07119, + 0.80699, + -7.03854, + 1.26622, + -6.97058, + 0.83402, + -7.03533, + 0.4354, + -7.07119, + 0.80699, + -7.03854, + 1.26622, + -6.97058, + 0.4354, + -7.07119, + 0.80699, + -7.03854, + 1.26622, + -6.97058, + 0.4354, + -7.07119, + 0.80699, + -7.03854, + 1.26622, + -6.97058, + 0.83402, + -7.03533, + 0.4354, + -7.07119, + 0.80699, + -7.03854, + 1.26622, + -6.97058, + 0.83402, + -7.03533, + 0.4354, + -7.07119, + 0.80699, + -7.03854, + 1.26622, + -6.97058, + 0.83402, + -7.03533, + 0.80699, + -7.03854, + 1.26622, + -6.97058, + 0.83402, + -7.03533, + 0.4354, + -7.07119, + 0.83402, + -7.03533, + 0.4354, + -7.07119, + 0.80699, + -7.03854, + 0.83402, + -7.03533, + 0.4354, + -7.07119, + 0.80699, + -7.03854, + 0.83402, + -7.03533, + 0.4354, + -7.07119, + 0.80699, + -7.03854, + 0.83402, + -7.03533, + 0.4354, + -7.07119, + 0.80699, + -7.03854, + 1.26622, + -6.97058, + 0.83402, + -7.03533, + 0.4354, + -7.07119, + 0.80699, + -7.03854, + 1.26622, + -6.97058, + 0.4354, + -7.07119, + 0.80699, + -7.03854, + 1.26622, + -6.97058, + 0.83402, + -7.03533, + 0.4354, + -7.07119, + 0.80699, + -7.03854, + 1.26622, + -6.97058, + 0.83402, + -7.03533, + 0.4354, + -7.07119, + 0.80699, + -7.03854, + 1.26622, + -6.97058, + 0.83402, + -7.03533, + 0.80699, + -7.03854, + 1.26622, + -6.97058, + 0.83402, + -7.03533, + 0.83402, + -7.03533, + 0.4354, + -7.07119, + 0.83402, + -7.03533, + 0.83402, + -7.03533, + 0.4354, + -7.07119, + 0.80699, + -7.03854, + 0.83402, + -7.03533, + 0.4354, + -7.07119, + 0.80699, + -7.03854, + 0.83402, + -7.03533, + 0.4354, + -7.07119, + 0.80699, + -7.03854, + 1.26622, + -6.97058, + 0.4354, + -7.07119, + 0.80699, + -7.03854, + 1.26622, + -6.97058, + 1.26622, + -6.97058, + 0.83402, + -7.03533, + 0.80699, + -7.03854, + 1.26622, + -6.97058, + 0.83402, + -7.03533, + 1.26622, + -6.97058, + 0.83402, + -7.03533, + 0.83402, + -7.03533, + 0.83402, + -7.03533, + 0.83402, + -7.03533, + 0.4354, + -7.07119, + 0.4354, + -7.07119, + 0.80699, + -7.03854, + 0.4354, + -7.07119, + 0.80699, + -7.03854, + 0.83402, + -7.03533, + 0.80699, + -7.03854, + 1.26622, + -6.97058, + 0.80699, + -7.03854, + 1.26622, + -6.97058, + 0.80699, + -7.03854, + 1.26622, + -6.97058, + 0.83402, + -7.03533, + 1.26622, + -6.97058, + 0.83402, + -7.03533, + 0.4354, + -7.07119 + ], + "curve": [ + 0.344, + 0.37, + 0.757, + 1 + ] + }, + { + "time": 0.3333, + "offset": 58, + "vertices": [ + 0.47124, + 1.23702, + 0.73266, + 1.10248 + ] + } + ] + } + } + } + }, + "Idle": { + "slots": { + "glowy eye": { + "color": [ + { + "time": 0, + "color": "ffffff59", + "curve": "stepped" + }, + { + "time": 1.2666, + "color": "ffffff59" + } + ] + }, + "glowy eye2": { + "color": [ + { + "time": 0, + "color": "ffffff3a", + "curve": [ + 0.25, + 0, + 0.75, + 1 + ] + }, + { + "time": 0.6, + "color": "ffffff00", + "curve": [ + 0.25, + 0, + 0.75, + 1 + ] + }, + { + "time": 1.2666, + "color": "ffffff3a" + } + ] + } + }, + "bones": { + "root": { + "rotate": [ + { + "time": 0, + "angle": 0, + "curve": "stepped" + }, + { + "time": 1.2666, + "angle": 0 + } + ], + "translate": [ + { + "time": 0, + "x": 0, + "y": 0, + "curve": "stepped" + }, + { + "time": 1.2666, + "x": 0, + "y": 0 + } + ], + "scale": [ + { + "time": 0, + "x": 1, + "y": 1, + "curve": "stepped" + }, + { + "time": 1.2666, + "x": 1, + "y": 1 + } + ] + }, + "Spine_3": { + "rotate": [ + { + "time": 0, + "angle": 0, + "curve": "stepped" + }, + { + "time": 1.2666, + "angle": 0 + } + ], + "translate": [ + { + "time": 0, + "x": 0, + "y": 0, + "curve": [ + 0.25, + 0, + 0.75, + 1 + ] + }, + { + "time": 0.6, + "x": -2.66, + "y": -0.11, + "curve": [ + 0.25, + 0, + 0.75, + 1 + ] + }, + { + "time": 1.2666, + "x": 0, + "y": 0 + } + ], + "scale": [ + { + "time": 0, + "x": 1, + "y": 1, + "curve": "stepped" + }, + { + "time": 1.2666, + "x": 1, + "y": 1 + } + ] + }, + "shadow": { + "rotate": [ + { + "time": 0, + "angle": 0, + "curve": "stepped" + }, + { + "time": 1.2666, + "angle": 0 + } + ], + "translate": [ + { + "time": 0, + "x": 0, + "y": 0, + "curve": "stepped" + }, + { + "time": 1.2666, + "x": 0, + "y": 0 + } + ], + "scale": [ + { + "time": 0, + "x": 1, + "y": 1, + "curve": [ + 0.25, + 0, + 0.75, + 1 + ] + }, + { + "time": 0.6, + "x": 1.04, + "y": 1.04, + "curve": [ + 0.25, + 0, + 0.75, + 1 + ] + }, + { + "time": 1.2666, + "x": 1, + "y": 1 + } + ] + }, + "Spine_": { + "rotate": [ + { + "time": 0, + "angle": 0, + "curve": "stepped" + }, + { + "time": 1.2666, + "angle": 0 + } + ], + "translate": [ + { + "time": 0, + "x": 0, + "y": 0, + "curve": "stepped" + }, + { + "time": 1.2666, + "x": 0, + "y": 0 + } + ], + "scale": [ + { + "time": 0, + "x": 1, + "y": 1, + "curve": [ + 0.25, + 0, + 0.75, + 1 + ] + }, + { + "time": 0.6, + "x": 0.984, + "y": 1, + "curve": [ + 0.25, + 0, + 0.75, + 1 + ] + }, + { + "time": 1.2666, + "x": 1, + "y": 1 + } + ] + }, + "Spine_2": { + "rotate": [ + { + "time": 0, + "angle": 0, + "curve": "stepped" + }, + { + "time": 1.2666, + "angle": 0 + } + ], + "translate": [ + { + "time": 0, + "x": 0, + "y": 0, + "curve": [ + 0.25, + 0, + 0.75, + 1 + ] + }, + { + "time": 0.6, + "x": -1.93, + "y": -0.19, + "curve": [ + 0.25, + 0, + 0.75, + 1 + ] + }, + { + "time": 1.2666, + "x": 0, + "y": 0 + } + ], + "scale": [ + { + "time": 0, + "x": 1, + "y": 1, + "curve": "stepped" + }, + { + "time": 1.2666, + "x": 1, + "y": 1 + } + ] + }, + "Spine_4": { + "rotate": [ + { + "time": 0, + "angle": 0, + "curve": "stepped" + }, + { + "time": 1.2666, + "angle": 0 + } + ], + "translate": [ + { + "time": 0, + "x": 0, + "y": 0, + "curve": "stepped" + }, + { + "time": 1.2666, + "x": 0, + "y": 0 + } + ], + "scale": [ + { + "time": 0, + "x": 1, + "y": 1, + "curve": "stepped" + }, + { + "time": 1.2666, + "x": 1, + "y": 1 + } + ] + }, + "Head": { + "rotate": [ + { + "time": 0, + "angle": 0, + "curve": [ + 0.25, + 0, + 0.75, + 1 + ] + }, + { + "time": 0.6, + "angle": -5.66, + "curve": [ + 0.25, + 0, + 0.75, + 1 + ] + }, + { + "time": 1.2666, + "angle": 0 + } + ], + "translate": [ + { + "time": 0, + "x": 0, + "y": 0, + "curve": "stepped" + }, + { + "time": 1.2666, + "x": 0, + "y": 0 + } + ], + "scale": [ + { + "time": 0, + "x": 1, + "y": 1, + "curve": "stepped" + }, + { + "time": 1.2666, + "x": 1, + "y": 1 + } + ] + }, + "arm_R_1": { + "rotate": [ + { + "time": 0, + "angle": 0, + "curve": "stepped" + }, + { + "time": 1.2666, + "angle": 0 + } + ], + "translate": [ + { + "time": 0, + "x": 0, + "y": 0, + "curve": [ + 0.25, + 0, + 0.75, + 1 + ] + }, + { + "time": 0.6, + "x": 0.17, + "y": 1.42, + "curve": [ + 0.25, + 0, + 0.75, + 1 + ] + }, + { + "time": 1.2666, + "x": 0, + "y": 0 + } + ], + "scale": [ + { + "time": 0, + "x": 1, + "y": 1, + "curve": [ + 0.25, + 0, + 0.75, + 1 + ] + }, + { + "time": 0.6, + "x": 0.962, + "y": 1, + "curve": [ + 0.25, + 0, + 0.75, + 1 + ] + }, + { + "time": 1.2666, + "x": 1, + "y": 1 + } + ] + }, + "arm_R_2": { + "rotate": [ + { + "time": 0, + "angle": 0, + "curve": [ + 0.25, + 0, + 0.75, + 1 + ] + }, + { + "time": 0.5, + "angle": -9.69, + "curve": [ + 0.25, + 0, + 0.75, + 1 + ] + }, + { + "time": 1.2666, + "angle": 0 + } + ], + "translate": [ + { + "time": 0, + "x": 0, + "y": 0, + "curve": "stepped" + }, + { + "time": 1.2666, + "x": 0, + "y": 0 + } + ], + "scale": [ + { + "time": 0, + "x": 1, + "y": 1, + "curve": "stepped" + }, + { + "time": 1.2666, + "x": 1, + "y": 1 + } + ] + }, + "arm_R_3": { + "rotate": [ + { + "time": 0, + "angle": 0, + "curve": [ + 0.25, + 0, + 0.75, + 1 + ] + }, + { + "time": 0.6, + "angle": -9.69, + "curve": [ + 0.25, + 0, + 0.75, + 1 + ] + }, + { + "time": 1.2666, + "angle": 0 + } + ], + "translate": [ + { + "time": 0, + "x": 0, + "y": 0, + "curve": "stepped" + }, + { + "time": 1.2666, + "x": 0, + "y": 0 + } + ], + "scale": [ + { + "time": 0, + "x": 1, + "y": 1, + "curve": "stepped" + }, + { + "time": 1.2666, + "x": 1, + "y": 1 + } + ] + }, + "arm_R_4": { + "rotate": [ + { + "time": 0, + "angle": 0, + "curve": [ + 0.25, + 0, + 0.75, + 1 + ] + }, + { + "time": 0.7, + "angle": -9.69, + "curve": [ + 0.25, + 0, + 0.75, + 1 + ] + }, + { + "time": 1.2666, + "angle": 0 + } + ], + "translate": [ + { + "time": 0, + "x": 0, + "y": 0, + "curve": "stepped" + }, + { + "time": 1.2666, + "x": 0, + "y": 0 + } + ], + "scale": [ + { + "time": 0, + "x": 1, + "y": 1, + "curve": "stepped" + }, + { + "time": 1.2666, + "x": 1, + "y": 1 + } + ] + }, + "Light": { + "rotate": [ + { + "time": 0, + "angle": 0, + "curve": "stepped" + }, + { + "time": 1.2666, + "angle": 0 + } + ], + "translate": [ + { + "time": 0, + "x": 0, + "y": 0, + "curve": "stepped" + }, + { + "time": 1.2666, + "x": 0, + "y": 0 + } + ], + "scale": [ + { + "time": 0, + "x": 1, + "y": 1, + "curve": "stepped" + }, + { + "time": 1.2666, + "x": 1, + "y": 1 + } + ] + }, + "arm_L_1": { + "rotate": [ + { + "time": 0, + "angle": 0, + "curve": [ + 0.25, + 0, + 0.75, + 1 + ] + }, + { + "time": 0.5, + "angle": 4.89, + "curve": [ + 0.25, + 0, + 0.75, + 1 + ] + }, + { + "time": 1.2666, + "angle": 0 + } + ], + "translate": [ + { + "time": 0, + "x": 0, + "y": 0, + "curve": "stepped" + }, + { + "time": 1.2666, + "x": 0, + "y": 0 + } + ], + "scale": [ + { + "time": 0, + "x": 1, + "y": 1, + "curve": "stepped" + }, + { + "time": 1.2666, + "x": 1, + "y": 1 + } + ] + }, + "arm_L_2": { + "rotate": [ + { + "time": 0, + "angle": 0, + "curve": [ + 0.25, + 0, + 0.75, + 1 + ] + }, + { + "time": 0.6, + "angle": 4.89, + "curve": [ + 0.25, + 0, + 0.75, + 1 + ] + }, + { + "time": 1.2666, + "angle": 0 + } + ], + "translate": [ + { + "time": 0, + "x": 0, + "y": 0, + "curve": "stepped" + }, + { + "time": 1.2666, + "x": 0, + "y": 0 + } + ], + "scale": [ + { + "time": 0, + "x": 1, + "y": 1, + "curve": "stepped" + }, + { + "time": 1.2666, + "x": 1, + "y": 1 + } + ] + }, + "arm_L_3": { + "rotate": [ + { + "time": 0, + "angle": 0, + "curve": [ + 0.25, + 0, + 0.75, + 1 + ] + }, + { + "time": 0.7, + "angle": 4.89, + "curve": [ + 0.25, + 0, + 0.75, + 1 + ] + }, + { + "time": 1.2666, + "angle": 0 + } + ], + "translate": [ + { + "time": 0, + "x": 0, + "y": 0, + "curve": "stepped" + }, + { + "time": 1.2666, + "x": 0, + "y": 0 + } + ], + "scale": [ + { + "time": 0, + "x": 1, + "y": 1, + "curve": "stepped" + }, + { + "time": 1.2666, + "x": 1, + "y": 1 + } + ] + }, + "Detail_": { + "rotate": [ + { + "time": 0, + "angle": 0, + "curve": [ + 0.25, + 0, + 0.75, + 1 + ] + }, + { + "time": 0.6, + "angle": -26.89, + "curve": [ + 0.25, + 0, + 0.75, + 1 + ] + }, + { + "time": 1.2666, + "angle": 0 + } + ], + "translate": [ + { + "time": 0, + "x": 0, + "y": 0, + "curve": "stepped" + }, + { + "time": 1.2666, + "x": 0, + "y": 0 + } + ], + "scale": [ + { + "time": 0, + "x": 1, + "y": 1, + "curve": "stepped" + }, + { + "time": 1.2666, + "x": 1, + "y": 1 + } + ] + }, + "Detail_2": { + "rotate": [ + { + "time": 0, + "angle": 0, + "curve": [ + 0.25, + 0, + 0.75, + 1 + ] + }, + { + "time": 0.6, + "angle": 19.26, + "curve": [ + 0.25, + 0, + 0.75, + 1 + ] + }, + { + "time": 1.2666, + "angle": 0 + } + ], + "translate": [ + { + "time": 0, + "x": 0, + "y": 0, + "curve": "stepped" + }, + { + "time": 1.2666, + "x": 0, + "y": 0 + } + ], + "scale": [ + { + "time": 0, + "x": 1, + "y": 1, + "curve": "stepped" + }, + { + "time": 1.2666, + "x": 1, + "y": 1 + } + ] + }, + "Detail_3": { + "rotate": [ + { + "time": 0, + "angle": 0, + "curve": [ + 0.25, + 0, + 0.75, + 1 + ] + }, + { + "time": 0.6, + "angle": -22.96, + "curve": [ + 0.25, + 0, + 0.75, + 1 + ] + }, + { + "time": 1.2666, + "angle": 0 + } + ], + "translate": [ + { + "time": 0, + "x": 0, + "y": 0, + "curve": "stepped" + }, + { + "time": 1.2666, + "x": 0, + "y": 0 + } + ], + "scale": [ + { + "time": 0, + "x": 1, + "y": 1, + "curve": "stepped" + }, + { + "time": 1.2666, + "x": 1, + "y": 1 + } + ] + }, + "Detail_4": { + "rotate": [ + { + "time": 0, + "angle": 0, + "curve": [ + 0.25, + 0, + 0.75, + 1 + ] + }, + { + "time": 0.6, + "angle": 14.94, + "curve": [ + 0.25, + 0, + 0.75, + 1 + ] + }, + { + "time": 1.2666, + "angle": 0 + } + ], + "translate": [ + { + "time": 0, + "x": 0, + "y": 0, + "curve": "stepped" + }, + { + "time": 1.2666, + "x": 0, + "y": 0 + } + ], + "scale": [ + { + "time": 0, + "x": 1, + "y": 1, + "curve": "stepped" + }, + { + "time": 1.2666, + "x": 1, + "y": 1 + } + ] + } + }, + "deform": { + "default": { + "arm (right)": { + "arm (right)": [ + { + "time": 0, + "offset": 16, + "vertices": [ + 0.09166, + 0.22073 + ], + "curve": [ + 0.25, + 0, + 0.75, + 1 + ] + }, + { + "time": 0.6, + "vertices": [ + 4.06061, + -1.61483, + 4.06061, + -1.61483, + 4.06061, + -1.61483, + 4.06061, + -1.61483, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0.09166, + 0.22073, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + -2.32056, + 0.92338, + -2.32056, + 0.92338, + -2.32056, + 0.92338, + -2.32056, + 0.92338, + -2.32056, + 0.92338, + -1.50615, + -0.7281, + -2.32056, + 0.92338, + -2.32056, + 0.92338, + -2.32056, + 0.92338, + -2.32056, + 0.92338, + -2.32056, + 0.92338, + -2.32056, + 0.92338, + -2.32056, + 0.92338, + -2.32056, + 0.92338, + -2.32056, + 0.92338, + -2.32056, + 0.92338 + ], + "curve": [ + 0.25, + 0, + 0.75, + 1 + ] + }, + { + "time": 1.2666, + "offset": 16, + "vertices": [ + 0.09166, + 0.22073 + ] + } + ] + }, + "hand (right)": { + "hand (right)": [ + { + "time": 0, + "offset": 10, + "vertices": [ + -0.25375, + -0.08619 + ], + "curve": [ + 0.25, + 0, + 0.75, + 1 + ] + }, + { + "time": 0.6, + "vertices": [ + 0.68224, + -1.34275, + 0.39079, + -1.4546, + 0, + 0, + 0, + 0, + 0, + 0, + -0.25375, + -0.08619, + 0.19107, + -0.98739, + -0.01656, + -1.00567, + 0.19107, + -0.98739, + -0.01656, + -1.00567, + 0.19107, + -0.98739, + -0.01656, + -1.00567, + 0.19107, + -0.98739, + -0.01656, + -1.00567, + -0.32934, + -0.95011, + 0.19107, + -0.98739, + -0.01656, + -1.00567, + -0.32934, + -0.95011, + 0.19107, + -0.98739, + -0.01656, + -1.00567, + -0.32934, + -0.95011, + -0.01656, + -1.00567, + -0.32934, + -0.95011, + -0.01656, + -1.00567, + -0.32934, + -0.95011, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0.39079, + -1.4546, + -0.08235, + -1.50373, + 0.39079, + -1.4546, + -0.08235, + -1.50373, + 0.39079, + -1.4546, + -0.08235, + -1.50373, + 0.68224, + -1.34275, + 0.39079, + -1.4546, + -0.08235, + -1.50373, + 0.68224, + -1.34275, + 0.39079, + -1.4546, + 1.31717, + 3.80133, + 0.06583, + 4.02177, + 1.31717, + 3.80133, + -0.76503, + 3.94892, + 0.06583, + 4.02177, + -0.76503, + 3.94892, + 0.06583, + 4.02177, + 1.31717, + 3.80133, + -0.76503, + 3.94892, + 0.06583, + 4.02177, + 1.31717, + 3.80133, + -0.76503, + 3.94892, + 0.06583, + 4.02177, + 0.06583, + 4.02177, + 1.31717, + 3.80133, + -0.76503, + 3.94892, + 0.06583, + 4.02177, + 1.31717, + 3.80133, + -0.76503, + 3.94892, + 0.06583, + 4.02177, + 1.31717, + 3.80133, + -0.76503, + 3.94892, + 0.06583, + 4.02177, + 0.06583, + 4.02177, + 1.31717, + 3.80133, + -0.76503, + 3.94892, + 0.06583, + 4.02177, + 1.31717, + 3.80133 + ], + "curve": [ + 0.25, + 0, + 0.75, + 1 + ] + }, + { + "time": 1.2666, + "offset": 10, + "vertices": [ + -0.25375, + -0.08619 + ] + } + ] + }, + "hood": { + "hood": [ + { + "time": 0, + "offset": 10, + "vertices": [ + -0.75626, + 0.09341 + ], + "curve": [ + 0.25, + 0, + 0.75, + 1 + ] + }, + { + "time": 0.6, + "offset": 2, + "vertices": [ + -0.24915, + -2.04222, + -0.24915, + -2.04222, + -0.24915, + -2.04222, + -0.24915, + -2.04222, + -1.00541, + -1.94881, + 0, + 0, + 0, + 0, + 0, + 0, + -0.11325, + -0.92829, + -0.11325, + -0.92829, + -0.11325, + -0.92829, + -0.11325, + -0.92829, + -0.11325, + -0.92829, + -0.11325, + -0.92829, + -0.11325, + -0.92829, + -0.11325, + -0.92829, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0.31664, + 2.5991, + 0.31664, + 2.5991, + 0.31664, + 2.5991, + 0.31664, + 2.5991, + 0.31664, + 2.5991, + 0.31664, + 2.5991, + 0.31664, + 2.5991, + 0.31664, + 2.5991, + 0.31664, + 2.5991, + 0.31664, + 2.5991, + 0.31664, + 2.5991, + 0.31664, + 2.5991, + 0.31664, + 2.5991, + 0.31664, + 2.5991, + 0.31664, + 2.5991, + 0.31664, + 2.5991, + 0.31664, + 2.5991, + 0.31664, + 2.5991 + ], + "curve": [ + 0.25, + 0, + 0.75, + 1 + ] + }, + { + "time": 1.2666, + "offset": 10, + "vertices": [ + -0.75626, + 0.09341 + ] + } + ] + }, + "robe": { + "robe": [ + { + "time": 0, + "offset": 58, + "vertices": [ + 0.47124, + 1.23702, + 0.73266, + 1.10248 + ], + "curve": [ + 0.25, + 0, + 0.75, + 1 + ] + }, + { + "time": 0.6, + "vertices": [ + 0.24159, + -2.37813, + 0.10688, + -2.38799, + 0.24159, + -2.37813, + 0.10688, + -2.38799, + 0.24159, + -2.37813, + 0.10688, + -2.38799, + 0.24159, + -2.37813, + 0.10688, + -2.38799, + -0.10697, + -2.38798, + 0.10688, + -2.38799, + -0.10697, + -2.38798, + -0.10697, + -2.38798, + -0.28936, + -2.37282, + -0.10697, + -2.38798, + -0.28936, + -2.37282, + 0.24159, + -2.37813, + -0.10697, + -2.38798, + -0.28936, + -2.37282, + 0.24159, + -2.37813, + -0.28936, + -2.37282, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0.47124, + 1.23702, + 0.73266, + 1.10248, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0.24159, + -2.37812, + 0.10688, + -2.38798, + -0.10698, + -2.38796, + -0.28939, + -2.37282, + 0.24159, + -2.37812, + -0.10698, + -2.38796, + -0.28939, + -2.37282, + 0.24159, + -2.37812, + 0.10688, + -2.38798, + -0.10698, + -2.38796, + -0.28939, + -2.37282, + 0.24159, + -2.37812, + 0.10688, + -2.38798, + -0.10698, + -2.38796, + -0.28939, + -2.37282, + 0.10688, + -2.38798, + -0.10698, + -2.38796, + -0.28939, + -2.37282, + 0.24159, + -2.37812, + 0.10688, + -2.38798, + -0.10698, + -2.38796, + -0.28939, + -2.37282, + 0.24159, + -2.37812, + 0.10688, + -2.38798, + -0.10698, + -2.38796, + -0.28939, + -2.37282, + 0.24159, + -2.37812, + 0.10688, + -2.38798, + -0.10698, + -2.38796, + -0.28939, + -2.37282, + 0.24159, + -2.37812, + 0.10688, + -2.38798, + -0.10698, + -2.38796, + -0.28939, + -2.37282, + 0.24159, + -2.37812, + 0.10688, + -2.38798, + -0.10698, + -2.38796, + 0.24159, + -2.37812, + 0.10688, + -2.38798, + -0.10698, + -2.38796, + 0.24159, + -2.37812, + 0.10688, + -2.38798, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0.24159, + -2.37813, + 0.24159, + -2.37813, + 0.10688, + -2.38799, + -0.47641, + 4.689, + -0.21064, + 4.70841, + -0.47641, + 4.689, + -0.21064, + 4.70841, + 0.21062, + 4.70841, + -0.47641, + 4.689, + -0.21064, + 4.70841, + 0.21062, + 4.70841, + -0.47641, + 4.689, + -0.21064, + 4.70841, + 0.21062, + 4.70841, + -0.47641, + 4.689, + -0.21064, + 4.70841, + 0.21062, + 4.70841, + 0.57025, + 4.67843, + -0.47641, + 4.689, + -0.21064, + 4.70841, + 0.21062, + 4.70841, + 0.57025, + 4.67843, + -0.21064, + 4.70841, + 0.21062, + 4.70841, + 0.57025, + 4.67843, + -0.21064, + 4.70841, + 0.21062, + 4.70841, + 0.57025, + 4.67843, + -0.47641, + 4.689, + -0.21064, + 4.70841, + 0.21062, + 4.70841, + 0.57025, + 4.67843, + -0.47641, + 4.689, + -0.21064, + 4.70841, + 0.21062, + 4.70841, + 0.57025, + 4.67843, + -0.20045, + 1.97256, + 0.08842, + 1.98071, + 0.2397, + 1.96806, + -0.47641, + 4.689, + -0.21064, + 4.70841, + -0.47641, + 4.689, + -0.21064, + 4.70841, + 0.21062, + 4.70841, + -0.47641, + 4.689, + -0.21064, + 4.70841, + 0.21062, + 4.70841, + -0.47641, + 4.689, + -0.21064, + 4.70841, + 0.21062, + 4.70841, + -0.47641, + 4.689, + -0.21064, + 4.70841, + 0.21062, + 4.70841, + 0.57025, + 4.67843, + -0.47641, + 4.689, + -0.21064, + 4.70841, + 0.21062, + 4.70841, + 0.57025, + 4.67843, + -0.21064, + 4.70841, + 0.21062, + 4.70841, + 0.57025, + 4.67843, + -0.47641, + 4.689, + -0.21064, + 4.70841, + 0.21062, + 4.70841, + 0.57025, + 4.67843, + -0.47641, + 4.689, + -0.21064, + 4.70841, + 0.21062, + 4.70841, + 0.57025, + 4.67843, + -0.47641, + 4.689, + 0.21062, + 4.70841, + 0.57025, + 4.67843, + -0.47641, + 4.689, + -0.47641, + 4.689, + -0.21064, + 4.70841, + -0.47641, + 4.689, + -0.47641, + 4.689, + -0.21064, + 4.70841, + 0.21062, + 4.70841, + -0.47641, + 4.689, + -0.21064, + 4.70841, + 0.21062, + 4.70841, + -0.47641, + 4.689, + -0.21064, + 4.70841, + 0.21062, + 4.70841, + 0.57025, + 4.67843, + -0.21064, + 4.70841, + 0.21062, + 4.70841, + 0.57025, + 4.67843, + 0.57025, + 4.67843, + -0.47641, + 4.689, + 0.21062, + 4.70841, + 0.57025, + 4.67843, + -0.47641, + 4.689, + 0.57025, + 4.67843, + -0.47641, + 4.689, + -0.47641, + 4.689, + -0.47641, + 4.689, + -0.47641, + 4.689, + -0.21064, + 4.70841, + -0.21064, + 4.70841, + 0.21062, + 4.70841, + -0.21064, + 4.70841, + 0.21062, + 4.70841, + -0.47641, + 4.689, + 0.21062, + 4.70841, + 0.57025, + 4.67843, + 0.21062, + 4.70841, + 0.57025, + 4.67843, + 0.21062, + 4.70841, + 0.57025, + 4.67843, + -0.47641, + 4.689, + 0.57025, + 4.67843, + -0.47641, + 4.689, + -0.21064, + 4.70841, + -0.47641, + 4.689, + 0.57025, + 4.67843, + -0.47641, + 4.689, + 0.57025, + 4.67843, + -0.47641, + 4.689, + 0.57025, + 4.67843, + -0.47641, + 4.689, + 0.57025, + 4.67843, + -0.47641, + 4.689, + 0.57025, + 4.67843 + ], + "curve": [ + 0.25, + 0, + 0.75, + 1 + ] + }, + { + "time": 1.2666, + "offset": 58, + "vertices": [ + 0.47124, + 1.23702, + 0.73266, + 1.10248 + ] + } + ] + } + } + } + } + } +} \ No newline at end of file diff --git a/src/main/resources/hemomancerResources/images/charSelect/Button.psd b/src/main/resources/hemomancerResources/images/charSelect/Button.psd new file mode 100644 index 0000000..0f935f6 Binary files /dev/null and b/src/main/resources/hemomancerResources/images/charSelect/Button.psd differ diff --git a/src/main/resources/hemomancerResources/images/charSelect/DefaultCharacterButton.png b/src/main/resources/hemomancerResources/images/charSelect/DefaultCharacterButton.png new file mode 100644 index 0000000..0669e70 Binary files /dev/null and b/src/main/resources/hemomancerResources/images/charSelect/DefaultCharacterButton.png differ diff --git a/src/main/resources/hemomancerResources/images/charSelect/DefaultCharacterPortraitBG.png b/src/main/resources/hemomancerResources/images/charSelect/DefaultCharacterPortraitBG.png new file mode 100644 index 0000000..857100e Binary files /dev/null and b/src/main/resources/hemomancerResources/images/charSelect/DefaultCharacterPortraitBG.png differ diff --git a/src/main/resources/hemomancerResources/images/charSelect/PortraitBG.psd b/src/main/resources/hemomancerResources/images/charSelect/PortraitBG.psd new file mode 100644 index 0000000..12f8fc7 Binary files /dev/null and b/src/main/resources/hemomancerResources/images/charSelect/PortraitBG.psd differ diff --git a/src/main/resources/hemomancerResources/images/events/Events.psd b/src/main/resources/hemomancerResources/images/events/Events.psd new file mode 100644 index 0000000..4b9663d Binary files /dev/null and b/src/main/resources/hemomancerResources/images/events/Events.psd differ diff --git a/src/main/resources/hemomancerResources/images/events/IdentityCrisisEvent.png b/src/main/resources/hemomancerResources/images/events/IdentityCrisisEvent.png new file mode 100644 index 0000000..f0d45c7 Binary files /dev/null and b/src/main/resources/hemomancerResources/images/events/IdentityCrisisEvent.png differ diff --git a/src/main/resources/hemomancerResources/images/events/IdentityCrisisEvent2.png b/src/main/resources/hemomancerResources/images/events/IdentityCrisisEvent2.png new file mode 100644 index 0000000..2d385fa Binary files /dev/null and b/src/main/resources/hemomancerResources/images/events/IdentityCrisisEvent2.png differ diff --git a/src/main/resources/hemomancerResources/images/orbs/default_orb.png b/src/main/resources/hemomancerResources/images/orbs/default_orb.png new file mode 100644 index 0000000..015b990 Binary files /dev/null and b/src/main/resources/hemomancerResources/images/orbs/default_orb.png differ diff --git a/src/main/resources/hemomancerResources/images/powers/placeholder_power.psd b/src/main/resources/hemomancerResources/images/powers/placeholder_power.psd new file mode 100644 index 0000000..4726a3c Binary files /dev/null and b/src/main/resources/hemomancerResources/images/powers/placeholder_power.psd differ diff --git a/src/main/resources/hemomancerResources/images/powers/placeholder_power32.png b/src/main/resources/hemomancerResources/images/powers/placeholder_power32.png new file mode 100644 index 0000000..04a9d27 Binary files /dev/null and b/src/main/resources/hemomancerResources/images/powers/placeholder_power32.png differ diff --git a/src/main/resources/hemomancerResources/images/powers/placeholder_power84.png b/src/main/resources/hemomancerResources/images/powers/placeholder_power84.png new file mode 100644 index 0000000..8116251 Binary files /dev/null and b/src/main/resources/hemomancerResources/images/powers/placeholder_power84.png differ diff --git a/src/main/resources/hemomancerResources/images/relics/BottledPlaceholder.png b/src/main/resources/hemomancerResources/images/relics/BottledPlaceholder.png new file mode 100644 index 0000000..d971600 Binary files /dev/null and b/src/main/resources/hemomancerResources/images/relics/BottledPlaceholder.png differ diff --git a/src/main/resources/hemomancerResources/images/relics/Relics.psd b/src/main/resources/hemomancerResources/images/relics/Relics.psd new file mode 100644 index 0000000..98999b1 Binary files /dev/null and b/src/main/resources/hemomancerResources/images/relics/Relics.psd differ diff --git a/src/main/resources/hemomancerResources/images/relics/default_clickable_relic.png b/src/main/resources/hemomancerResources/images/relics/default_clickable_relic.png new file mode 100644 index 0000000..d7e7f43 Binary files /dev/null and b/src/main/resources/hemomancerResources/images/relics/default_clickable_relic.png differ diff --git a/src/main/resources/hemomancerResources/images/relics/outline/BottledPlaceholder.png b/src/main/resources/hemomancerResources/images/relics/outline/BottledPlaceholder.png new file mode 100644 index 0000000..ea314ca Binary files /dev/null and b/src/main/resources/hemomancerResources/images/relics/outline/BottledPlaceholder.png differ diff --git a/src/main/resources/hemomancerResources/images/relics/outline/default_clickable_relic.png b/src/main/resources/hemomancerResources/images/relics/outline/default_clickable_relic.png new file mode 100644 index 0000000..c1b1169 Binary files /dev/null and b/src/main/resources/hemomancerResources/images/relics/outline/default_clickable_relic.png differ diff --git a/src/main/resources/hemomancerResources/images/relics/outline/placeholder_relic.png b/src/main/resources/hemomancerResources/images/relics/outline/placeholder_relic.png new file mode 100644 index 0000000..9c53182 Binary files /dev/null and b/src/main/resources/hemomancerResources/images/relics/outline/placeholder_relic.png differ diff --git a/src/main/resources/hemomancerResources/images/relics/outline/placeholder_relic2.png b/src/main/resources/hemomancerResources/images/relics/outline/placeholder_relic2.png new file mode 100644 index 0000000..9c53182 Binary files /dev/null and b/src/main/resources/hemomancerResources/images/relics/outline/placeholder_relic2.png differ diff --git a/src/main/resources/hemomancerResources/images/relics/placeholder_relic.png b/src/main/resources/hemomancerResources/images/relics/placeholder_relic.png new file mode 100644 index 0000000..517df07 Binary files /dev/null and b/src/main/resources/hemomancerResources/images/relics/placeholder_relic.png differ diff --git a/src/main/resources/hemomancerResources/images/relics/placeholder_relic2.png b/src/main/resources/hemomancerResources/images/relics/placeholder_relic2.png new file mode 100644 index 0000000..2b3a7f1 Binary files /dev/null and b/src/main/resources/hemomancerResources/images/relics/placeholder_relic2.png differ diff --git a/src/main/resources/hemomancerResources/images/ui/missing_texture.png b/src/main/resources/hemomancerResources/images/ui/missing_texture.png new file mode 100644 index 0000000..57fa890 Binary files /dev/null and b/src/main/resources/hemomancerResources/images/ui/missing_texture.png differ diff --git a/src/main/resources/hemomancerResources/localization/eng/HemomancerMod-Card-Strings.json b/src/main/resources/hemomancerResources/localization/eng/HemomancerMod-Card-Strings.json new file mode 100644 index 0000000..f516285 --- /dev/null +++ b/src/main/resources/hemomancerResources/localization/eng/HemomancerMod-Card-Strings.json @@ -0,0 +1,118 @@ +{ + "hemomancer:DefaultCommonAttack": { + "NAME": "Strike", + "DESCRIPTION": "Deal !D! Damage. NL [#0000ff]This[] [#ff0000]Is[] [#ffff00]How[] [#88888]color[] [#ff00ff]works.[]" + }, + "hemomancer:HemomancerStrike": { + "NAME": "Strike", + "DESCRIPTION": "Deal !D! Damage." + }, + "hemomancer:HemomancerFlay": { + "NAME": "Flay", + "DESCRIPTION": "Deal !D! Damage. NL Consumes 5 Maximum hit points." + }, + "hemomancer:HemomancerPHA1": { + "NAME": "Placehold Attack 1", + "DESCRIPTION": "Deal !D! Damage." + }, + "hemomancer:HemomancerPHA2": { + "NAME": "Placehold Attack 2", + "DESCRIPTION": "Deal !D! Damage." + }, + "hemomancer:HemomancerPHA3": { + "NAME": "Placehold Attack 3", + "DESCRIPTION": "Deal !D! Damage." + }, + "hemomancer:HemomancerPHA4": { + "NAME": "Placehold Attack 4", + "DESCRIPTION": "Deal !D! Damage." + }, + "hemomancer:HemomancerPHA5": { + "NAME": "Placehold Attack 5", + "DESCRIPTION": "Deal !D! Damage." + }, + "hemomancer:HemomancerBlock": { + "NAME": "Defend", + "DESCRIPTION": "Gain !B! Block." + }, + "hemomancer:HemomancerPHS1": { + "NAME": "Placeholder Skill 1", + "DESCRIPTION": "Gain !B! Block." + }, + "hemomancer:HemomancerPHS2": { + "NAME": "Placeholder Skill 2", + "DESCRIPTION": "Gain !B! Block." + }, + "hemomancer:HemomancerPHS3": { + "NAME": "Placeholder Skill 3", + "DESCRIPTION": "Gain !B! Block." + }, + "hemomancer:HemomancerPHS4": { + "NAME": "Placeholder Skill 4", + "DESCRIPTION": "Gain !B! Block." + }, + "hemomancer:HemomancerPHS5": { + "NAME": "Placeholder Skill 5", + "DESCRIPTION": "Gain !B! Block." + }, + "hemomancer:HemomancerPHP1": { + "NAME": "Placeholder Power 1", + "DESCRIPTION": "Does Something." + }, + "hemomancer:HemomancerPHP2": { + "NAME": "Placeholder Power 2", + "DESCRIPTION": "Does Something." + }, + "hemomancer:HemomancerPHP3": { + "NAME": "Placeholder Power 3", + "DESCRIPTION": "Does Something." + }, + "hemomancer:DefaultCommonPower": { + "NAME": "Hold Place", + "DESCRIPTION": "Gain !M! hemomancer:Keyword.", + "UPGRADE_DESCRIPTION": "Gain !M! hemomancer:Keywords." + }, + "hemomancer:DefaultUncommonAttack": { + "NAME": "Big slap", + "DESCRIPTION": "Deal !D! Damage." + }, + "hemomancer:DefaultUncommonSkill": { + "NAME": "A Better Defend", + "DESCRIPTION": "Gain !B! Plated Armor. Affected by Dexterity." + }, + "hemomancer:DefaultUncommonPower": { + "NAME": "Weirdness", + "DESCRIPTION": "Gain X hemomancer:Keywords.", + "UPGRADE_DESCRIPTION": "Gain X +1 hemomancer:Keywords." + }, + "hemomancer:DefaultRareAttack": { + "NAME": "TOUCH", + "DESCRIPTION": "Deal !D! Damage." + }, + "hemomancer:DefaultRareSkill": { + "NAME": "For Each Loop x2", + "DESCRIPTION": "Apply !M! vulnerable to all enemies, 2 times.", + "UPGRADE_DESCRIPTION": "Apply !M! vulnerable to all enemies, 3 times." + }, + "hemomancer:DefaultRarePower": { + "NAME": "In-Progress Form", + "DESCRIPTION": "At the start of your turn, play a TOUCH." + }, + "hemomancer:DefaultAttackWithVariable": { + "NAME": "Special Strike", + "DESCRIPTION": "Deal !D! Damage [E] times. NL (Deal !hemomancer:ENERGY_DAMAGE! damage total.)" + }, + "hemomancer:DefaultSecondMagicNumberSkill": { + "NAME": "Cool 2 Number Card", + "DESCRIPTION": "Apply !M! vulnerable and !hemomancer:SecondMagic! poison to an enemy." + }, + "hemomancer:OrbSkill": { + "NAME": "Get Orb", + "DESCRIPTION": "Channel 1 Default Orb." + }, + "hemomancer:BloodPump": { + "NAME": "", + "DESCRIPTION":"Increases Blood Mist by 1.", + "UPGRADE_DESCRIPTION": "Increases Blood Mist by 2." + } +} diff --git a/src/main/resources/hemomancerResources/localization/eng/HemomancerMod-Character-Strings.json b/src/main/resources/hemomancerResources/localization/eng/HemomancerMod-Character-Strings.json new file mode 100644 index 0000000..72b4a2a --- /dev/null +++ b/src/main/resources/hemomancerResources/localization/eng/HemomancerMod-Character-Strings.json @@ -0,0 +1,13 @@ +{ + "hemomancer:HemomancerCharacter": { + "NAMES": [ + "Hemomancer", + "hemomancer" + ], + "TEXT": [ + "The Hemomancer is a master of all things blood NL BLOOOOOOOOOD", + "NL You SAVOR the heart.", + "Navigating an unlit street, you come across several hooded figures in the midst of some dark ritual. As you approach, they turn to you in eerie unison. The tallest among them bares fanged teeth and extends a long, pale hand towards you. NL ~\"Hello, brother.\"~" + ] + } +} \ No newline at end of file diff --git a/src/main/resources/hemomancerResources/localization/eng/HemomancerMod-Event-Strings.json b/src/main/resources/hemomancerResources/localization/eng/HemomancerMod-Event-Strings.json new file mode 100644 index 0000000..121443c --- /dev/null +++ b/src/main/resources/hemomancerResources/localization/eng/HemomancerMod-Event-Strings.json @@ -0,0 +1,21 @@ +{ + "hemomancer:IdentityCrisisEvent": { + "NAME": "Identity Crisis", + "DESCRIPTIONS": [ + "As you move through ~The~ ~City~ you come across a #pPurple #pMirror. NL You look at it, but you see no reflection.", + "You see no one but #g~You~ #g~wish~ #g~to~ #g~become~ #g~someone.~", + "#r@YOU@ #r@EXIST@ #r@AND@ #r@ARE@ #r@VALID!@", + "#yYou #yare #yat #ypeace #ywith #yyour #ypresence.", + "You have no hands." + ], + "OPTIONS": [ + "[Inspiration] #gGain #ga #gRandom #gStarting #gRelic.", + "[Denial] #rLose #r", + " #rMax #rHP. #gRemove #ga #gCard #gfrom #gyour #gdeck.", + "[Acceptance] #gGain #gApotheosis.", + "[TOUCH THE MIRROR] TOUCH TOUCH TO#C# TOUCH TO UCH TOUCH #rTOUCH TOUCH", + "[Leave]", + "Select card to remove." + ] + } +} diff --git a/src/main/resources/hemomancerResources/localization/eng/HemomancerMod-Keyword-Strings.json b/src/main/resources/hemomancerResources/localization/eng/HemomancerMod-Keyword-Strings.json new file mode 100644 index 0000000..55ede21 --- /dev/null +++ b/src/main/resources/hemomancerResources/localization/eng/HemomancerMod-Keyword-Strings.json @@ -0,0 +1,20 @@ +[ + { + "NAMES": [ + "keyword", + "keywords" + ], + "DESCRIPTION": "Whenever you play a card, gain 1 dexterity this turn only." + }, + { + "PROPER_NAME": "Multiword Keyword", + "NAMES": [ + "Multiword Keyword", + "multiword_keyword", + "multiword_keywords", + "multikey", + "multikeyword" + ], + "DESCRIPTION": "Make sure the first element in the NAMES is the same as your PROPER_NAME. The rest is to match keywords like the single word keyword." + } +] \ No newline at end of file diff --git a/src/main/resources/hemomancerResources/localization/eng/HemomancerMod-Orb-Strings.json b/src/main/resources/hemomancerResources/localization/eng/HemomancerMod-Orb-Strings.json new file mode 100644 index 0000000..0ed7148 --- /dev/null +++ b/src/main/resources/hemomancerResources/localization/eng/HemomancerMod-Orb-Strings.json @@ -0,0 +1,18 @@ +{ + "hemomancer:DefaultOrb": { + "NAME": "Default Orb", + "DESCRIPTION": [ + "#yPassive: At the start of your turn, draw #b", + " card.", + " cards.", + "NL #yEvoke: Deal #b damage to all enemies." + ] + }, + "hemomancer:BloodMistOrb": { + "NAME": "Blood Mist", + "DESCRIPTION": [ + "#yPassive: This is consumed instead of maximum hit points.", + "NL #yEvoke: Heal for #b hit points." + ] + } +} \ No newline at end of file diff --git a/src/main/resources/hemomancerResources/localization/eng/HemomancerMod-Potion-Strings.json b/src/main/resources/hemomancerResources/localization/eng/HemomancerMod-Potion-Strings.json new file mode 100644 index 0000000..2725278 --- /dev/null +++ b/src/main/resources/hemomancerResources/localization/eng/HemomancerMod-Potion-Strings.json @@ -0,0 +1,6 @@ +{ +"hemomancer:PlaceholderPotion": { + "NAME": "Placeholder Potion", + "DESCRIPTIONS": ["Gain ", " At the end of your turn, lose ", " Strength."] +} +} \ No newline at end of file diff --git a/src/main/resources/hemomancerResources/localization/eng/HemomancerMod-Power-Strings.json b/src/main/resources/hemomancerResources/localization/eng/HemomancerMod-Power-Strings.json new file mode 100644 index 0000000..45d6542 --- /dev/null +++ b/src/main/resources/hemomancerResources/localization/eng/HemomancerMod-Power-Strings.json @@ -0,0 +1,10 @@ +{ +"hemomancer:CommonPower": { + "NAME": "Placeholder Power", + "DESCRIPTIONS": ["You applied #b", " keyword.", " keywords."] +}, +"hemomancer:RarePower": { + "NAME": "Placeholder Power", + "DESCRIPTIONS": ["At the start of your turn, TOUCH #b", " enemy." , " enemies."] +} +} \ No newline at end of file diff --git a/src/main/resources/hemomancerResources/localization/eng/HemomancerMod-Relic-Strings.json b/src/main/resources/hemomancerResources/localization/eng/HemomancerMod-Relic-Strings.json new file mode 100644 index 0000000..58bbec7 --- /dev/null +++ b/src/main/resources/hemomancerResources/localization/eng/HemomancerMod-Relic-Strings.json @@ -0,0 +1,41 @@ +{ + "hemomancer:PlaceholderRelic": { + "NAME": "Placeholder Energy Relic", + "FLAVOR": "The snake is a friend.", + "DESCRIPTIONS": [ + "Gain #b1 [E] ." + ] + }, + "hemomancer:PlaceholderRelic2": { + "NAME": "Placeholder Relic 2", + "FLAVOR": "You feel stronger.", + "DESCRIPTIONS": [ + "At the start of each combat, gain #b1 #yStrength." + ] + }, + "hemomancer:DefaultClickableRelic": { + "NAME": "Right-Clicky Relic", + "FLAVOR": "The more you right-click it, the more orbs you've evoked in your lifetime.", + "DESCRIPTIONS": [ + "[#2aecd7]Usable [#2aecd7]once [#2aecd7]per [#2aecd7]turn.[] NL #yEvoke your rightmost Orb.", + "YOU ARE MINE!" + ] + }, + "hemomancer:BottledPlaceholderRelic": { + "NAME": "Bottled Placeholder", + "FLAVOR": "What is this?", + "DESCRIPTIONS": [ + "Choose a card. Whenever you take play any card, draw the chosen card.", + "Whenever you play a card, draw ", + ".", + "Select a card to bottle for " + ] + }, + "hemomancer:BloodMistRelic": { + "NAME": "Blood Perfume", + "FLAVOR": "Smells like iron.", + "DESCRIPTIONS": [ + "Grants you blood mist at the beginning of combat." + ] + } +} \ No newline at end of file