├── .gitignore ├── CHANGELOG.md ├── LICENSE ├── README.md ├── TESTING.md ├── github_resources ├── console.png └── wiki │ ├── all_jars.png │ ├── build_path.png │ ├── decompile_open.png │ ├── decompile_save_all.png │ ├── final_lib_folder.png │ ├── folder_setup.png │ ├── lib_folder.png │ ├── mod_properties.png │ ├── new_java_project.png │ ├── new_java_project_modal.png │ ├── new_source_folder.png │ ├── new_workspace.png │ └── switch_workspace.png ├── mod ├── pom.xml └── src │ └── main │ ├── java │ ├── basemod │ │ ├── AutoAdd.java │ │ ├── AutoComplete.java │ │ ├── BaseMod.java │ │ ├── BaseModImGuiUI.java │ │ ├── BaseModInit.java │ │ ├── ClickableUIElement.java │ │ ├── ConsoleTargetedPower.java │ │ ├── CustomCharacterSelectScreen.java │ │ ├── CustomEventRoom.java │ │ ├── DailyModsDropdown.java │ │ ├── DevConsole.java │ │ ├── EasyConfigPanel.java │ │ ├── IUIElement.java │ │ ├── ModBadge.java │ │ ├── ModButton.java │ │ ├── ModColorDisplay.java │ │ ├── ModImage.java │ │ ├── ModLabel.java │ │ ├── ModLabeledButton.java │ │ ├── ModLabeledToggleButton.java │ │ ├── ModMinMaxSlider.java │ │ ├── ModPanel.java │ │ ├── ModRadioButtonGroup.java │ │ ├── ModSlider.java │ │ ├── ModTextInput.java │ │ ├── ModTextPanel.java │ │ ├── ModToggleButton.java │ │ ├── Pair.java │ │ ├── ReflectionHacks.java │ │ ├── TopPanelArrow.java │ │ ├── TopPanelGroup.java │ │ ├── TopPanelItem.java │ │ ├── abstracts │ │ │ ├── AbstractCardModifier.java │ │ │ ├── CustomBottleRelic.java │ │ │ ├── CustomCard.java │ │ │ ├── CustomEnergyOrb.java │ │ │ ├── CustomMonster.java │ │ │ ├── CustomMultiPageFtue.java │ │ │ ├── CustomOrb.java │ │ │ ├── CustomPlayer.java │ │ │ ├── CustomPotion.java │ │ │ ├── CustomRelic.java │ │ │ ├── CustomReward.java │ │ │ ├── CustomSavable.java │ │ │ ├── CustomSavableRaw.java │ │ │ ├── CustomScreen.java │ │ │ ├── CustomUnlock.java │ │ │ ├── CustomUnlockBundle.java │ │ │ ├── DynamicVariable.java │ │ │ ├── cardbuilder │ │ │ │ ├── CardBasic.java │ │ │ │ └── actionbuilder │ │ │ │ │ ├── ActionBuilder.java │ │ │ │ │ ├── AllEnemyActionBuilder.java │ │ │ │ │ ├── AmountActionBuilder.java │ │ │ │ │ ├── ApplyPowerActionBuilder.java │ │ │ │ │ ├── EffectActionBuilder.java │ │ │ │ │ ├── HealActionBuilder.java │ │ │ │ │ ├── PoisonActionBuilder.java │ │ │ │ │ └── SingleActionBuilder.java │ │ │ └── events │ │ │ │ ├── PhasedEvent.java │ │ │ │ └── phases │ │ │ │ ├── CombatPhase.java │ │ │ │ ├── EventPhase.java │ │ │ │ ├── ImageEventPhase.java │ │ │ │ ├── InteractionPhase.java │ │ │ │ └── TextPhase.java │ │ ├── animations │ │ │ ├── AbstractAnimation.java │ │ │ ├── G3DJAnimation.java │ │ │ ├── SpineAnimation.java │ │ │ └── SpriterAnimation.java │ │ ├── cardmods │ │ │ ├── EtherealMod.java │ │ │ ├── ExhaustMod.java │ │ │ ├── InnateMod.java │ │ │ └── RetainMod.java │ │ ├── devcommands │ │ │ ├── ConsoleCommand.java │ │ │ ├── Help.java │ │ │ ├── Info.java │ │ │ ├── InvalidCommandException.java │ │ │ ├── act │ │ │ │ └── ActCommand.java │ │ │ ├── blight │ │ │ │ ├── Blight.java │ │ │ │ ├── BlightAdd.java │ │ │ │ └── BlightRemove.java │ │ │ ├── clear │ │ │ │ └── Clear.java │ │ │ ├── debug │ │ │ │ └── Debug.java │ │ │ ├── deck │ │ │ │ ├── Deck.java │ │ │ │ ├── DeckAdd.java │ │ │ │ ├── DeckManipulator.java │ │ │ │ └── DeckRemove.java │ │ │ ├── draw │ │ │ │ └── Draw.java │ │ │ ├── energy │ │ │ │ └── Energy.java │ │ │ ├── event │ │ │ │ └── Event.java │ │ │ ├── fight │ │ │ │ └── Fight.java │ │ │ ├── gold │ │ │ │ └── Gold.java │ │ │ ├── hand │ │ │ │ ├── Hand.java │ │ │ │ ├── HandAdd.java │ │ │ │ ├── HandDiscard.java │ │ │ │ ├── HandRemove.java │ │ │ │ └── HandSet.java │ │ │ ├── history │ │ │ │ └── History.java │ │ │ ├── hp │ │ │ │ └── Hp.java │ │ │ ├── key │ │ │ │ ├── KeyAdd.java │ │ │ │ ├── KeyCommand.java │ │ │ │ └── KeyLose.java │ │ │ ├── kill │ │ │ │ └── Kill.java │ │ │ ├── maxhp │ │ │ │ └── MaxHp.java │ │ │ ├── potions │ │ │ │ ├── Potionlist.java │ │ │ │ └── Potions.java │ │ │ ├── power │ │ │ │ └── Power.java │ │ │ ├── relic │ │ │ │ ├── Relic.java │ │ │ │ ├── RelicAdd.java │ │ │ │ ├── RelicDescription.java │ │ │ │ ├── RelicFlavor.java │ │ │ │ ├── RelicList.java │ │ │ │ ├── RelicPool.java │ │ │ │ └── RelicRemove.java │ │ │ ├── statics │ │ │ │ ├── EvalCode.java │ │ │ │ ├── EvalStatic.java │ │ │ │ ├── SetStatic.java │ │ │ │ └── StaticsCommand.java │ │ │ └── unlock │ │ │ │ └── Unlock.java │ │ ├── eventUtil │ │ │ ├── AddEventParams.java │ │ │ ├── EventUtils.java │ │ │ └── util │ │ │ │ ├── Condition.java │ │ │ │ └── ConditionalEvent.java │ │ ├── helpers │ │ │ ├── BaseModCardTags.java │ │ │ ├── CardBorderGlowManager.java │ │ │ ├── CardModifierManager.java │ │ │ ├── CardPowerTip.java │ │ │ ├── CardTags.java │ │ │ ├── ConvertHelper.java │ │ │ ├── ModalChoice.java │ │ │ ├── ModalChoiceBuilder.java │ │ │ ├── ModalChoiceCard.java │ │ │ ├── RelicType.java │ │ │ ├── ScreenPostProcessorManager.java │ │ │ ├── SuperclassFinder.java │ │ │ ├── TextCodeInterpreter.java │ │ │ ├── TooltipInfo.java │ │ │ ├── UIElementModificationHelper.java │ │ │ ├── VfxBuilder.java │ │ │ └── dynamicvariables │ │ │ │ ├── BlockVariable.java │ │ │ │ ├── DamageVariable.java │ │ │ │ └── MagicNumberVariable.java │ │ ├── interfaces │ │ │ ├── AddAudioSubscriber.java │ │ │ ├── AddCustomModeModsSubscriber.java │ │ │ ├── AlternateCardCostModifier.java │ │ │ ├── CloneablePowerInterface.java │ │ │ ├── DraggableUI.java │ │ │ ├── EditCardsSubscriber.java │ │ │ ├── EditCharactersSubscriber.java │ │ │ ├── EditKeywordsSubscriber.java │ │ │ ├── EditRelicsSubscriber.java │ │ │ ├── EditStringsSubscriber.java │ │ │ ├── ISubscriber.java │ │ │ ├── ImGuiSubscriber.java │ │ │ ├── MaxHPChangeSubscriber.java │ │ │ ├── ModelRenderSubscriber.java │ │ │ ├── OnCardUseSubscriber.java │ │ │ ├── OnCreateDescriptionSubscriber.java │ │ │ ├── OnPlayerDamagedSubscriber.java │ │ │ ├── OnPlayerLoseBlockSubscriber.java │ │ │ ├── OnPlayerTurnStartPostDrawSubscriber.java │ │ │ ├── OnPlayerTurnStartSubscriber.java │ │ │ ├── OnPowersModifiedSubscriber.java │ │ │ ├── OnStartBattleSubscriber.java │ │ │ ├── PostBattleSubscriber.java │ │ │ ├── PostCampfireSubscriber.java │ │ │ ├── PostCreateShopPotionSubscriber.java │ │ │ ├── PostCreateShopRelicSubscriber.java │ │ │ ├── PostCreateStartingDeckSubscriber.java │ │ │ ├── PostCreateStartingRelicsSubscriber.java │ │ │ ├── PostDeathSubscriber.java │ │ │ ├── PostDrawSubscriber.java │ │ │ ├── PostDungeonInitializeSubscriber.java │ │ │ ├── PostDungeonUpdateSubscriber.java │ │ │ ├── PostEnergyRechargeSubscriber.java │ │ │ ├── PostExhaustSubscriber.java │ │ │ ├── PostInitializeSubscriber.java │ │ │ ├── PostPlayerUpdateSubscriber.java │ │ │ ├── PostPotionUseSubscriber.java │ │ │ ├── PostPowerApplySubscriber.java │ │ │ ├── PostRenderSubscriber.java │ │ │ ├── PostUpdateSubscriber.java │ │ │ ├── PotionGetSubscriber.java │ │ │ ├── PreDungeonUpdateSubscriber.java │ │ │ ├── PreMonsterTurnSubscriber.java │ │ │ ├── PrePlayerUpdateSubscriber.java │ │ │ ├── PrePotionUseSubscriber.java │ │ │ ├── PreRenderSubscriber.java │ │ │ ├── PreRoomRenderSubscriber.java │ │ │ ├── PreStartGameSubscriber.java │ │ │ ├── PreUpdateSubscriber.java │ │ │ ├── RelicGetSubscriber.java │ │ │ ├── RenderSubscriber.java │ │ │ ├── ScreenPostProcessor.java │ │ │ ├── SetUnlocksSubscriber.java │ │ │ ├── StartActSubscriber.java │ │ │ ├── StartGameSubscriber.java │ │ │ ├── TextReceiver.java │ │ │ └── XCostModifier.java │ │ ├── patches │ │ │ ├── com │ │ │ │ ├── badlogic │ │ │ │ │ └── gdx │ │ │ │ │ │ └── graphics │ │ │ │ │ │ └── glutils │ │ │ │ │ │ └── GLFrameBuffer │ │ │ │ │ │ └── NestedFrameBuffers.java │ │ │ │ └── megacrit │ │ │ │ │ └── cardcrawl │ │ │ │ │ ├── actions │ │ │ │ │ ├── GameActionManager │ │ │ │ │ │ ├── GetNextActionHook.java │ │ │ │ │ │ ├── ModalChoiceFix.java │ │ │ │ │ │ ├── NoFadeLimbo.java │ │ │ │ │ │ ├── OnPlayerLoseBlockToggle.java │ │ │ │ │ │ ├── PreMonsterTurnHook.java │ │ │ │ │ │ └── QueueExtraCardsPatch.java │ │ │ │ │ ├── common │ │ │ │ │ │ ├── ApplyPowerAction │ │ │ │ │ │ │ └── ApplyPowerActionPostPowerApplyHook.java │ │ │ │ │ │ ├── DamageAllEnemiesAction │ │ │ │ │ │ │ └── SafeDamageAllEnemies.java │ │ │ │ │ │ ├── DiscardAtEndOfTurnAction │ │ │ │ │ │ │ └── ConsistentEtherealPatch.java │ │ │ │ │ │ └── VampireDamageAllEnemiesAction │ │ │ │ │ │ │ └── SafeDamageAllEnemies.java │ │ │ │ │ └── unique │ │ │ │ │ │ └── DiscoveryAction │ │ │ │ │ │ └── MoreThanTwoFix.java │ │ │ │ │ ├── audio │ │ │ │ │ └── SoundMaster │ │ │ │ │ │ └── AddAudio.java │ │ │ │ │ ├── cards │ │ │ │ │ ├── AbstractCard │ │ │ │ │ │ ├── AlternateCardCosts.java │ │ │ │ │ │ ├── CNCardTextColors.java │ │ │ │ │ │ ├── CNUniqueKeywords.java │ │ │ │ │ │ ├── CardModifierPatches.java │ │ │ │ │ │ ├── CreateCardImageSwitch.java │ │ │ │ │ │ ├── DamageHooks.java │ │ │ │ │ │ ├── DynamicTextBlocks.java │ │ │ │ │ │ ├── FixColoredTextOffset.java │ │ │ │ │ │ ├── FixDescriptionWidthCustomDynamicVariable.java │ │ │ │ │ │ ├── FixDescriptionWidthCustomDynamicVariableCN.java │ │ │ │ │ │ ├── FixInitializeDescriptionCNWidthLogic.java │ │ │ │ │ │ ├── FixLogging.java │ │ │ │ │ │ ├── MultiCardPreview.java │ │ │ │ │ │ ├── MultiCardPreviewRenderer.java │ │ │ │ │ │ ├── MultiwordKeywords.java │ │ │ │ │ │ ├── PreventCrashDueToKeywordAtStartOfCardTextForTraditionalChinesePatch.java │ │ │ │ │ │ ├── RenderCardDescriptors.java │ │ │ │ │ │ ├── RenderCustomDynamicVariable.java │ │ │ │ │ │ ├── RenderCustomDynamicVariableCN.java │ │ │ │ │ │ ├── RenderDescriptionEnergy.java │ │ │ │ │ │ ├── RenderFixSwitches.java │ │ │ │ │ │ ├── RenderRelicOnCard.java │ │ │ │ │ │ ├── ShrinkLongDescription.java │ │ │ │ │ │ ├── SmithPreview.java │ │ │ │ │ │ └── UpgradeChangesPortraitPatch.java │ │ │ │ │ ├── CardGroup │ │ │ │ │ │ ├── CardPlayableMonsterNullCrashFix.java │ │ │ │ │ │ ├── ModalExhaustFix.java │ │ │ │ │ │ ├── MoveToExhaustPileHook.java │ │ │ │ │ │ └── WithoutBottledCardsPatch.java │ │ │ │ │ ├── DescriptionLine │ │ │ │ │ │ └── CustomDynamicVariableTokenizeCN.java │ │ │ │ │ ├── FixExpungerDescription.java │ │ │ │ │ └── TagBasicCards.java │ │ │ │ │ ├── characters │ │ │ │ │ ├── AbstractPlayer │ │ │ │ │ │ ├── GiveOrbSlotOnChannel.java │ │ │ │ │ │ ├── HasRelicModID.java │ │ │ │ │ │ ├── MaxHandSizePatch.java │ │ │ │ │ │ ├── ModifyXCostPatch.java │ │ │ │ │ │ ├── OnEvokeOrb.java │ │ │ │ │ │ ├── OnPlayerDamagedHook.java │ │ │ │ │ │ ├── PlayerUpdateHooks.java │ │ │ │ │ │ ├── PostDrawHook.java │ │ │ │ │ │ ├── PostInitializeStarterDeckHookSwitch.java │ │ │ │ │ │ ├── PostInitializeStarterRelicsHookSwitch.java │ │ │ │ │ │ ├── PotionGetHooks.java │ │ │ │ │ │ ├── SeenEvents.java │ │ │ │ │ │ ├── TurnStartHooks.java │ │ │ │ │ │ └── UseCardModalComplete.java │ │ │ │ │ └── FixWatcherVisualScale.java │ │ │ │ │ ├── core │ │ │ │ │ ├── AbstractCreature │ │ │ │ │ │ ├── ModifyPlayerLoseBlock.java │ │ │ │ │ │ └── PlayerMaxHPChange.java │ │ │ │ │ ├── CardCrawlGame │ │ │ │ │ │ ├── ApplyScreenPostProcessor.java │ │ │ │ │ │ ├── CustomRewardLoad.java │ │ │ │ │ │ ├── EditCharactersHook.java │ │ │ │ │ │ ├── LoadPlayerSaves.java │ │ │ │ │ │ ├── PostInitializeHook.java │ │ │ │ │ │ ├── PreStartGameHook.java │ │ │ │ │ │ ├── RenderHooks.java │ │ │ │ │ │ └── UpdateHooks.java │ │ │ │ │ └── EnergyManager │ │ │ │ │ │ └── PostEnergyRechargeHook.java │ │ │ │ │ ├── cutscenes │ │ │ │ │ └── Cutscene │ │ │ │ │ │ ├── CustomCutscenes.java │ │ │ │ │ │ └── CustomVictoryEffects.java │ │ │ │ │ ├── dungeons │ │ │ │ │ └── AbstractDungeon │ │ │ │ │ │ ├── ActChangeHooks.java │ │ │ │ │ │ ├── AddEvents.java │ │ │ │ │ │ ├── AdditionalEventConditions.java │ │ │ │ │ │ ├── CustomBosses.java │ │ │ │ │ │ ├── CustomScreenPatches.java │ │ │ │ │ │ ├── DungeonUpdateHooks.java │ │ │ │ │ │ ├── FixDiscoveryLogSpam.java │ │ │ │ │ │ ├── FixLogging.java │ │ │ │ │ │ ├── InitializeCardPoolsSwitch.java │ │ │ │ │ │ ├── ModalChoiceScreenUpdateRender.java │ │ │ │ │ │ ├── NoPools.java │ │ │ │ │ │ ├── PostDungeonInitializeHook.java │ │ │ │ │ │ ├── PowersModified.java │ │ │ │ │ │ ├── PreventGetShrineCrashPatch.java │ │ │ │ │ │ └── RemoveExcludedCardsFromPools.java │ │ │ │ │ ├── events │ │ │ │ │ ├── AbstractEvent │ │ │ │ │ │ └── AdditionalEventParameters.java │ │ │ │ │ ├── NoteForYourself │ │ │ │ │ │ └── MissingCard.java │ │ │ │ │ └── SensoryStone │ │ │ │ │ │ └── CustomCharacterText.java │ │ │ │ │ ├── helpers │ │ │ │ │ ├── CardHelper │ │ │ │ │ │ └── GOGGetColorFix.java │ │ │ │ │ ├── CardLibrary │ │ │ │ │ │ ├── AddSwitch.java │ │ │ │ │ │ ├── BlueCardsPatch.java │ │ │ │ │ │ ├── ColorlessCardsPatch.java │ │ │ │ │ │ ├── CurseCardsPatch.java │ │ │ │ │ │ ├── CustomCardsPatch.java │ │ │ │ │ │ ├── EditCardsPatch.java │ │ │ │ │ │ ├── GetCardListSwitch.java │ │ │ │ │ │ ├── GetCardModID.java │ │ │ │ │ │ ├── GreenCardsPatch.java │ │ │ │ │ │ ├── MiscLoadedPatch.java │ │ │ │ │ │ ├── PurpleCardsPatch.java │ │ │ │ │ │ └── RedCardsPatch.java │ │ │ │ │ ├── EventHelper │ │ │ │ │ │ └── GetCustomEvents.java │ │ │ │ │ ├── FontHelper │ │ │ │ │ │ ├── AllowSmartTextsToRemoveSpaces.java │ │ │ │ │ │ ├── FixChineseColoredTextMess.java │ │ │ │ │ │ ├── FixChineseNoPurpleColor.java │ │ │ │ │ │ └── FixSCPCardEnergyFont.java │ │ │ │ │ ├── GameDictionary │ │ │ │ │ │ └── PostKeywordInitialize.java │ │ │ │ │ ├── GetAllInBattleInstances │ │ │ │ │ │ └── FixNPE.java │ │ │ │ │ ├── Hitbox │ │ │ │ │ │ └── FixRedNotBeingReset.java │ │ │ │ │ ├── MonsterHelper │ │ │ │ │ │ ├── GetEncounter.java │ │ │ │ │ │ └── GetEncounterName.java │ │ │ │ │ ├── PotionLibrary │ │ │ │ │ │ ├── PotionHelperGetPotion.java │ │ │ │ │ │ └── PotionHelperGetPotions.java │ │ │ │ │ ├── RelicLibrary │ │ │ │ │ │ ├── EditRelicsPatch.java │ │ │ │ │ │ ├── GetRelicFix.java │ │ │ │ │ │ ├── PopulateLists.java │ │ │ │ │ │ └── PopulatePools.java │ │ │ │ │ ├── TipHelper │ │ │ │ │ │ ├── CardPowerTipsInTipHelperPatch.java │ │ │ │ │ │ ├── FakeKeywords.java │ │ │ │ │ │ ├── HeaderlessTip.java │ │ │ │ │ │ ├── RenderBoxEnergy.java │ │ │ │ │ │ └── TipWithWrappingHeaderPatch.java │ │ │ │ │ ├── TopPanel │ │ │ │ │ │ └── TopPanelHelper.java │ │ │ │ │ └── input │ │ │ │ │ │ ├── InputAction │ │ │ │ │ │ └── DisableInputWhileTyping.java │ │ │ │ │ │ └── ScrollInputProcessor │ │ │ │ │ │ ├── FixIncorrectMouseStates.java │ │ │ │ │ │ └── TextInput.java │ │ │ │ │ ├── localization │ │ │ │ │ └── LocalizedStrings │ │ │ │ │ │ ├── EditStrings.java │ │ │ │ │ │ └── GetCardStringsModID.java │ │ │ │ │ ├── map │ │ │ │ │ └── MapGenerator │ │ │ │ │ │ └── PathDensityMultiplier.java │ │ │ │ │ ├── monsters │ │ │ │ │ ├── FixTransientCrash.java │ │ │ │ │ └── MonsterInfo │ │ │ │ │ │ └── AddCustomMonsters.java │ │ │ │ │ ├── orbs │ │ │ │ │ └── OrbsPowersPatch.java │ │ │ │ │ ├── potions │ │ │ │ │ ├── Color │ │ │ │ │ │ └── AbstractPotionInitializeColor.java │ │ │ │ │ └── FixAddToTop.java │ │ │ │ │ ├── powers │ │ │ │ │ ├── ChokePatch.java │ │ │ │ │ ├── CloneablePowers │ │ │ │ │ │ ├── CloneablePowersPatch.java │ │ │ │ │ │ ├── MonsterOwnerAmountPowerPatch.java │ │ │ │ │ │ ├── OwnerAmountCardPowerPatch.java │ │ │ │ │ │ ├── OwnerAmountDamagePowerPatch.java │ │ │ │ │ │ ├── OwnerAmountJustappliedPowerPatch.java │ │ │ │ │ │ ├── OwnerAmountNamePowerPatch.java │ │ │ │ │ │ ├── OwnerAmountOnplayerPowerPatch.java │ │ │ │ │ │ ├── OwnerAmountPowerPatch.java │ │ │ │ │ │ ├── OwnerCardPowerPatch.java │ │ │ │ │ │ ├── OwnerHplossAmountPowerPatch.java │ │ │ │ │ │ ├── OwnerNameAmountPowerPatch.java │ │ │ │ │ │ ├── OwnerPowerPatch.java │ │ │ │ │ │ └── OwnerSourceAmountPowerPatch.java │ │ │ │ │ ├── FixVigorReduction.java │ │ │ │ │ └── IntangiblePower │ │ │ │ │ │ └── FixPlayerIntangiblePower.java │ │ │ │ │ ├── relics │ │ │ │ │ └── AbstractRelic │ │ │ │ │ │ ├── FixLargeImageRender.java │ │ │ │ │ │ ├── FixUniqueKeywordsMultiTooltips.java │ │ │ │ │ │ ├── InstantObtainRelicGetHook.java │ │ │ │ │ │ ├── InstantObtainRelicGetHook2.java │ │ │ │ │ │ ├── MultiwordKeywords.java │ │ │ │ │ │ ├── ObtainRelicGetHook.java │ │ │ │ │ │ ├── RelicOutlineColor.java │ │ │ │ │ │ └── ReorganizeObtainRelicGetHook.java │ │ │ │ │ ├── rewards │ │ │ │ │ └── AvoidCardGenerationForCustomRewardsPatch.java │ │ │ │ │ ├── rooms │ │ │ │ │ ├── AbstractRoom │ │ │ │ │ │ ├── EndBattleHook.java │ │ │ │ │ │ ├── EventCombatSave.java │ │ │ │ │ │ ├── FixUnnecessaryRewardCulling.java │ │ │ │ │ │ ├── PreRenderHook.java │ │ │ │ │ │ └── StartBattleHook.java │ │ │ │ │ └── CampfireUI │ │ │ │ │ │ └── GiryaFix.java │ │ │ │ │ ├── saveAndContinue │ │ │ │ │ ├── SaveAndContinue │ │ │ │ │ │ └── Save.java │ │ │ │ │ └── SaveFile │ │ │ │ │ │ ├── ConstructSaveFilePatch.java │ │ │ │ │ │ ├── CustomRewardSave.java │ │ │ │ │ │ └── ModSaves.java │ │ │ │ │ ├── screens │ │ │ │ │ ├── CombatRewardScreen │ │ │ │ │ │ └── RewardsScrolling.java │ │ │ │ │ ├── DeathScreen │ │ │ │ │ │ ├── ForceUnlock.java │ │ │ │ │ │ ├── NotFoundFix.java │ │ │ │ │ │ └── PostDeathHook.java │ │ │ │ │ ├── NoUnlockBar.java │ │ │ │ │ ├── SingleCardViewPopup │ │ │ │ │ │ ├── BackgroundFix.java │ │ │ │ │ │ ├── BetaArtToggle.java │ │ │ │ │ │ ├── CustomRendering.java │ │ │ │ │ │ ├── FakeKeywords.java │ │ │ │ │ │ ├── FixEnergyTooltip.java │ │ │ │ │ │ ├── FixLockedArt.java │ │ │ │ │ │ ├── MissingPortraitFix.java │ │ │ │ │ │ ├── OpenFix.java │ │ │ │ │ │ ├── RenderCardDescriptorsSCV.java │ │ │ │ │ │ ├── RenderCustomDynamicVariable.java │ │ │ │ │ │ ├── RenderCustomDynamicVariableCN.java │ │ │ │ │ │ ├── RenderDescriptionEnergy.java │ │ │ │ │ │ ├── ScrollingTooltips.java │ │ │ │ │ │ ├── ShrinkLongDescription.java │ │ │ │ │ │ └── TitleFontSize.java │ │ │ │ │ ├── SingleRelicViewPopup │ │ │ │ │ │ ├── FixFrameColor.java │ │ │ │ │ │ ├── FixLargeRelicArt.java │ │ │ │ │ │ ├── MultiwordKeywords.java │ │ │ │ │ │ └── ScrollingTooltipsForSRV.java │ │ │ │ │ ├── VictoryScreen │ │ │ │ │ │ └── TrackKilledHeart.java │ │ │ │ │ ├── charSelect │ │ │ │ │ │ └── CharacterOption │ │ │ │ │ │ │ ├── CorrectRemainingUnlocks.java │ │ │ │ │ │ │ ├── FixModdedSelectAnimation.java │ │ │ │ │ │ │ ├── HideLongRelicDescriptions.java │ │ │ │ │ │ │ ├── MultilineStarterRelicFix.java │ │ │ │ │ │ │ ├── MultiwordKeywords.java │ │ │ │ │ │ │ └── UpdateHitboxBgImg.java │ │ │ │ │ ├── compendium │ │ │ │ │ │ ├── CardLibraryScreen │ │ │ │ │ │ │ ├── EverythingFix.java │ │ │ │ │ │ │ ├── NoCompendium.java │ │ │ │ │ │ │ ├── NoCompendiumBaseColorsFix.java │ │ │ │ │ │ │ └── NoLibraryType.java │ │ │ │ │ │ ├── PotionViewScreen │ │ │ │ │ │ │ └── ScrollBoundsFix.java │ │ │ │ │ │ └── RelicViewScreen │ │ │ │ │ │ │ └── ScrollBoundsFix.java │ │ │ │ │ ├── custom │ │ │ │ │ │ └── CustomModeScreen │ │ │ │ │ │ │ ├── AddCustomModeModsHook.java │ │ │ │ │ │ │ ├── FixEverythingPosition.java │ │ │ │ │ │ │ ├── InitializeCharacterButtons.java │ │ │ │ │ │ │ ├── MyTrueFormPatch.java │ │ │ │ │ │ │ └── PositionCharacterButtons.java │ │ │ │ │ ├── mainMenu │ │ │ │ │ │ ├── ColorTabBar │ │ │ │ │ │ │ └── ColorTabBarFix.java │ │ │ │ │ │ ├── DisplayRunInfo.java │ │ │ │ │ │ └── MainMenuScreen │ │ │ │ │ │ │ ├── CharacterSelectControllerSupport.java │ │ │ │ │ │ │ └── SwapCharacterSelectScreen.java │ │ │ │ │ ├── options │ │ │ │ │ │ ├── DropdownMenu │ │ │ │ │ │ │ └── DropdownColoring.java │ │ │ │ │ │ ├── OptionsPanel │ │ │ │ │ │ │ ├── FixLanguageDropdownSizeInRun.java │ │ │ │ │ │ │ ├── FixToggleHitboxSizeInRun.java │ │ │ │ │ │ │ └── RefreshSwitch.java │ │ │ │ │ │ └── SettingsScreen │ │ │ │ │ │ │ └── PopupSwitch.java │ │ │ │ │ ├── runHistory │ │ │ │ │ │ ├── RunHistoryScreen │ │ │ │ │ │ │ └── FixCharacterFilter.java │ │ │ │ │ │ └── TinyCard │ │ │ │ │ │ │ ├── ColorPatch.java │ │ │ │ │ │ │ └── HitboxPatch.java │ │ │ │ │ ├── select │ │ │ │ │ │ ├── FixBossRelicStarterUpgradesPatch.java │ │ │ │ │ │ ├── GridCardSelectScreen │ │ │ │ │ │ │ ├── CustomActionHooks.java │ │ │ │ │ │ │ └── GridCardSelectScreenFields.java │ │ │ │ │ │ └── HandCardSelectScreen │ │ │ │ │ │ │ └── DynamicVariableUpgradePreview.java │ │ │ │ │ └── stats │ │ │ │ │ │ ├── CharStat │ │ │ │ │ │ └── UnlockStats.java │ │ │ │ │ │ └── StatsScreen │ │ │ │ │ │ └── UpdateStats.java │ │ │ │ │ ├── shop │ │ │ │ │ └── ShopScreen │ │ │ │ │ │ ├── PostCreateShopPotionHook.java │ │ │ │ │ │ └── PostCreateShopRelicHook.java │ │ │ │ │ ├── ui │ │ │ │ │ ├── buttons │ │ │ │ │ │ ├── CancelButton │ │ │ │ │ │ │ └── ModSettingsCheck.java │ │ │ │ │ │ └── ProceedButton │ │ │ │ │ │ │ ├── EventCombatProceed.java │ │ │ │ │ │ │ └── ResetSeenEvents.java │ │ │ │ │ ├── campfire │ │ │ │ │ │ └── AbstractCampfireOption │ │ │ │ │ │ │ └── PostCampfireHook.java │ │ │ │ │ └── panels │ │ │ │ │ │ ├── EnergyPanel │ │ │ │ │ │ └── InfiniteEnergy.java │ │ │ │ │ │ ├── PotionPopUp │ │ │ │ │ │ ├── PostPotionUseHook.java │ │ │ │ │ │ ├── PostPotionUseHookTargetMode.java │ │ │ │ │ │ ├── PrePotionUseHook.java │ │ │ │ │ │ └── PrePotionUseHookTargetMode.java │ │ │ │ │ │ └── TopPanel │ │ │ │ │ │ └── TopPanelPatches.java │ │ │ │ │ ├── unlock │ │ │ │ │ └── UnlockTracker │ │ │ │ │ │ ├── CountModdedUnlockCards.java │ │ │ │ │ │ ├── GetUnlockBundleSwitch.java │ │ │ │ │ │ ├── PostRefresh.java │ │ │ │ │ │ └── UnlockCardModID.java │ │ │ │ │ └── vfx │ │ │ │ │ ├── FixLimeColor.java │ │ │ │ │ └── FixMemoryChurn.java │ │ │ ├── de │ │ │ │ └── robojumper │ │ │ │ │ └── ststwitch │ │ │ │ │ └── TwitchVoter │ │ │ │ │ └── TwitchVoterNoCrash.java │ │ │ ├── imgui │ │ │ │ └── ImGuiPatches.java │ │ │ └── whatmod │ │ │ │ ├── CardView.java │ │ │ │ ├── Events.java │ │ │ │ ├── FixCardPreviewPlacement.java │ │ │ │ ├── LinkedRelics.java │ │ │ │ ├── MonsterPowerTips.java │ │ │ │ ├── PlayerPowerTips.java │ │ │ │ ├── PotionTips.java │ │ │ │ ├── RelicTips.java │ │ │ │ ├── RelicView.java │ │ │ │ └── WhatMod.java │ │ └── screens │ │ │ └── ModalChoiceScreen.java │ └── com │ │ ├── brashmonkey │ │ └── spriter │ │ │ └── LibGdx │ │ │ ├── LibGdxAtlasLoader.java │ │ │ ├── LibGdxDrawer.java │ │ │ └── LibGdxLoader.java │ │ └── google │ │ └── gson │ │ └── typeadapters │ │ └── RuntimeTypeAdapterFactory.java │ └── resources │ ├── ModTheSpire.json │ ├── img │ ├── BaseModBadge.png │ ├── BaseModBadge.xcf │ ├── BlankButton.png │ ├── ButtonLeft.png │ ├── ButtonMiddle.png │ ├── ButtonRight.png │ ├── ColorDisplay.png │ ├── ConsoleBackground.png │ ├── ModPanelBg.png │ ├── test │ │ └── test │ │ │ ├── 512 │ │ │ ├── bg_attack_purple.png │ │ │ ├── bg_power_purple.png │ │ │ ├── bg_skill_purple.png │ │ │ └── card_purple_orb.png │ │ │ ├── cards │ │ │ ├── defend_purple.png │ │ │ └── strike_purple.png │ │ │ ├── charSelect │ │ │ ├── purplecladButton.png │ │ │ └── purplecladPortrait.jpg │ │ │ └── relics │ │ │ └── arcanosphere.png │ ├── tinyLeftArrow.png │ └── tinyRightArrow.png │ └── localization │ ├── basemod │ ├── eng │ │ ├── cardMods.json │ │ ├── customMods.json │ │ └── ui.json │ ├── rus │ │ ├── cardMods.json │ │ └── customMods.json │ └── zhs │ │ ├── cardMods.json │ │ ├── customMods.json │ │ └── ui.json │ ├── cards.json │ └── relics.json ├── pom.xml └── testmod ├── pom.xml └── src └── main ├── java └── basemod │ └── test │ ├── Arcanosphere.java │ ├── ArcanosphereAction.java │ ├── CardLibraryPatch.java │ ├── CharacterEnumPatch.java │ ├── ColorEnumPatch.java │ ├── Defend_Purple.java │ ├── GetEventPatch.java │ ├── Purpleclad.java │ ├── Strike_Purple.java │ ├── TestDuplicator.java │ └── TestMod.java └── resources └── ModTheSpire.json /.gitignore: -------------------------------------------------------------------------------- 1 | # Compiled class file 2 | *.class 3 | 4 | # Log file 5 | *.log 6 | 7 | # BlueJ files 8 | *.ctxt 9 | 10 | # Mobile Tools for Java (J2ME) 11 | .mtj.tmp/ 12 | 13 | # Package Files # 14 | *.jar 15 | *.war 16 | *.ear 17 | *.zip 18 | *.tar.gz 19 | *.rar 20 | 21 | # virtual machine crash logs, see http://www.java.com/en/download/help/error_hotspot.xml 22 | hs_err_pid* 23 | 24 | # Custom 25 | .classpath 26 | .project 27 | .factorypath 28 | .idea/ 29 | .settings/ 30 | *.iml 31 | src/main/java/com/megacrit/**/*.java 32 | target/ 33 | /bin/ 34 | 35 | # Mvn Shade Files 36 | dependency-reduced-pom.xml 37 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2018 t-larson 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /github_resources/console.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/daviscook477/BaseMod/423648791016a1407eb56ce7691c2dff26af8de4/github_resources/console.png -------------------------------------------------------------------------------- /github_resources/wiki/all_jars.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/daviscook477/BaseMod/423648791016a1407eb56ce7691c2dff26af8de4/github_resources/wiki/all_jars.png -------------------------------------------------------------------------------- /github_resources/wiki/build_path.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/daviscook477/BaseMod/423648791016a1407eb56ce7691c2dff26af8de4/github_resources/wiki/build_path.png -------------------------------------------------------------------------------- /github_resources/wiki/decompile_open.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/daviscook477/BaseMod/423648791016a1407eb56ce7691c2dff26af8de4/github_resources/wiki/decompile_open.png -------------------------------------------------------------------------------- /github_resources/wiki/decompile_save_all.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/daviscook477/BaseMod/423648791016a1407eb56ce7691c2dff26af8de4/github_resources/wiki/decompile_save_all.png -------------------------------------------------------------------------------- /github_resources/wiki/final_lib_folder.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/daviscook477/BaseMod/423648791016a1407eb56ce7691c2dff26af8de4/github_resources/wiki/final_lib_folder.png -------------------------------------------------------------------------------- /github_resources/wiki/folder_setup.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/daviscook477/BaseMod/423648791016a1407eb56ce7691c2dff26af8de4/github_resources/wiki/folder_setup.png -------------------------------------------------------------------------------- /github_resources/wiki/lib_folder.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/daviscook477/BaseMod/423648791016a1407eb56ce7691c2dff26af8de4/github_resources/wiki/lib_folder.png -------------------------------------------------------------------------------- /github_resources/wiki/mod_properties.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/daviscook477/BaseMod/423648791016a1407eb56ce7691c2dff26af8de4/github_resources/wiki/mod_properties.png -------------------------------------------------------------------------------- /github_resources/wiki/new_java_project.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/daviscook477/BaseMod/423648791016a1407eb56ce7691c2dff26af8de4/github_resources/wiki/new_java_project.png -------------------------------------------------------------------------------- /github_resources/wiki/new_java_project_modal.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/daviscook477/BaseMod/423648791016a1407eb56ce7691c2dff26af8de4/github_resources/wiki/new_java_project_modal.png -------------------------------------------------------------------------------- /github_resources/wiki/new_source_folder.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/daviscook477/BaseMod/423648791016a1407eb56ce7691c2dff26af8de4/github_resources/wiki/new_source_folder.png -------------------------------------------------------------------------------- /github_resources/wiki/new_workspace.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/daviscook477/BaseMod/423648791016a1407eb56ce7691c2dff26af8de4/github_resources/wiki/new_workspace.png -------------------------------------------------------------------------------- /github_resources/wiki/switch_workspace.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/daviscook477/BaseMod/423648791016a1407eb56ce7691c2dff26af8de4/github_resources/wiki/switch_workspace.png -------------------------------------------------------------------------------- /mod/src/main/java/basemod/CustomEventRoom.java: -------------------------------------------------------------------------------- 1 | package basemod; 2 | 3 | import com.megacrit.cardcrawl.dungeons.AbstractDungeon; 4 | import com.megacrit.cardcrawl.helpers.EventHelper; 5 | import com.megacrit.cardcrawl.rooms.EventRoom; 6 | 7 | public class CustomEventRoom extends EventRoom { 8 | @Override 9 | public void onPlayerEntry() { 10 | AbstractDungeon.overlayMenu.proceedButton.hide(); 11 | String eventName = AbstractDungeon.eventList.remove(0); 12 | this.event = EventHelper.getEvent(eventName); 13 | this.event.onEnterRoom(); 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /mod/src/main/java/basemod/IUIElement.java: -------------------------------------------------------------------------------- 1 | package basemod; 2 | 3 | import com.badlogic.gdx.graphics.g2d.SpriteBatch; 4 | 5 | public interface IUIElement { 6 | void render(SpriteBatch sb); 7 | void update(); 8 | int renderLayer(); 9 | int updateOrder(); 10 | //Moves the IUIElement and its Hitbox to the specified coordinate 11 | //Should not be premultiplied by Settings.scale if the constructor of the IUIElement doesn't either. 12 | default void set(float xPos, float yPos) {} 13 | default void setX(float xPos) {} 14 | default void setY(float yPos) {} 15 | //Returns the x/y coordinate of the IUIElement. 16 | //Divided by Settings.scale if the constructor multiplies the input by it 17 | default float getX() {return Integer.MIN_VALUE;} 18 | default float getY() {return Integer.MIN_VALUE;} 19 | } 20 | -------------------------------------------------------------------------------- /mod/src/main/java/basemod/ModImage.java: -------------------------------------------------------------------------------- 1 | package basemod; 2 | 3 | import com.badlogic.gdx.graphics.Color; 4 | import com.badlogic.gdx.graphics.Texture; 5 | import com.badlogic.gdx.graphics.g2d.SpriteBatch; 6 | import com.megacrit.cardcrawl.core.Settings; 7 | import com.megacrit.cardcrawl.helpers.ImageMaster; 8 | 9 | public class ModImage implements IUIElement { 10 | private Texture texture; 11 | private float x; 12 | private float y; 13 | private float w; 14 | private float h; 15 | 16 | public ModImage(float x, float y, String texturePath) { 17 | this.texture = ImageMaster.loadImage(texturePath); 18 | this.x = x * Settings.scale; 19 | this.y = y * Settings.scale; 20 | this.w = texture.getWidth() * Settings.scale; 21 | this.h = texture.getHeight() * Settings.scale; 22 | } 23 | 24 | public ModImage(float x, float y, Texture tex) { 25 | this.texture = tex; 26 | this.x = x * Settings.scale; 27 | this.y = y * Settings.scale; 28 | this.w = texture.getWidth() * Settings.scale; 29 | this.h = texture.getHeight() * Settings.scale; 30 | } 31 | 32 | public void render(SpriteBatch sb) { 33 | sb.setColor(Color.WHITE); 34 | sb.draw(texture, x, y, w, h); 35 | } 36 | 37 | public void update() {} 38 | 39 | @Override 40 | public int renderLayer() { 41 | return ModPanel.BACKGROUND_LAYER; 42 | } 43 | 44 | @Override 45 | public int updateOrder() { 46 | return ModPanel.DEFAULT_UPDATE; 47 | } 48 | } -------------------------------------------------------------------------------- /mod/src/main/java/basemod/ModRadioButtonGroup.java: -------------------------------------------------------------------------------- 1 | package basemod; 2 | 3 | import java.util.ArrayList; 4 | import java.util.List; 5 | 6 | public class ModRadioButtonGroup { 7 | private List buttons; 8 | private ModToggleButton selected; 9 | 10 | public ModRadioButtonGroup(){ 11 | this.buttons = new ArrayList(); 12 | } 13 | 14 | public ModRadioButtonGroup(ModToggleButton... buttons){ 15 | this(); 16 | for(ModToggleButton b : buttons){ 17 | addButton(b); 18 | } 19 | } 20 | 21 | public boolean addButton(ModToggleButton b){ 22 | b.addConsumer( 23 | button -> 24 | { 25 | selectButton(button); 26 | }); 27 | return buttons.add(b); 28 | } 29 | 30 | public boolean removeButton(ModToggleButton b){ 31 | return buttons.remove(b); 32 | } 33 | 34 | public void selectButton(ModToggleButton b){ 35 | this.selected=b; 36 | updateButtons(); 37 | } 38 | 39 | public void updateButtons(){ 40 | for(ModToggleButton b : buttons){ 41 | b.enabled = selected.equals(b); 42 | } 43 | } 44 | } -------------------------------------------------------------------------------- /mod/src/main/java/basemod/Pair.java: -------------------------------------------------------------------------------- 1 | package basemod; 2 | 3 | import java.util.Objects; 4 | 5 | public class Pair 6 | { 7 | private final K key; 8 | private final V value; 9 | 10 | public Pair(K key, V value) 11 | { 12 | this.key = key; 13 | this.value = value; 14 | } 15 | 16 | public K getKey() 17 | { 18 | return key; 19 | } 20 | 21 | public V getValue() 22 | { 23 | return value; 24 | } 25 | 26 | @Override 27 | public String toString() 28 | { 29 | return key + "=" + value; 30 | } 31 | 32 | @Override 33 | public boolean equals(Object o) 34 | { 35 | if (!(o instanceof Pair)) { 36 | return false; 37 | } 38 | 39 | Pair other = (Pair) o; 40 | return Objects.equals(key, other.key) && Objects.equals(value, other.value); 41 | } 42 | 43 | @Override 44 | public int hashCode() 45 | { 46 | return Objects.hash(key, value); 47 | } 48 | } 49 | -------------------------------------------------------------------------------- /mod/src/main/java/basemod/TopPanelArrow.java: -------------------------------------------------------------------------------- 1 | package basemod; 2 | 3 | import com.badlogic.gdx.graphics.Texture; 4 | import com.megacrit.cardcrawl.core.Settings; 5 | 6 | public abstract class TopPanelArrow extends ClickableUIElement 7 | { 8 | public TopPanelArrow(Texture image, float x, float y, float hb_w, float hb_h) 9 | { 10 | super(image, x, y, hb_w, hb_h); 11 | 12 | hitbox.move(this.x + image.getWidth() / 2.0f * Settings.scale, this.y + image.getHeight() / 2.0f * Settings.scale); 13 | } 14 | 15 | @Override 16 | protected void onHover() 17 | { 18 | tint.a = 0.25f; 19 | } 20 | 21 | @Override 22 | protected void onUnhover() 23 | { 24 | tint.a = 0; 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /mod/src/main/java/basemod/TopPanelItem.java: -------------------------------------------------------------------------------- 1 | package basemod; 2 | 3 | import com.badlogic.gdx.graphics.Texture; 4 | import com.megacrit.cardcrawl.helpers.Hitbox; 5 | import com.megacrit.cardcrawl.helpers.MathHelper; 6 | 7 | public abstract class TopPanelItem extends ClickableUIElement{ 8 | 9 | private static final float WIDTH = 64.0f; 10 | private static final float HEIGHT = 64.0f; 11 | private String ID; 12 | 13 | public TopPanelItem(Texture image, String ID) { 14 | super(image, 0, 0, WIDTH, HEIGHT); 15 | this.ID = ID; 16 | } 17 | 18 | public Texture getImage(){ 19 | return this.image; 20 | } 21 | 22 | public Hitbox getHitbox() { 23 | return this.hitbox; 24 | } 25 | 26 | public String getID() { 27 | return this.ID; 28 | } 29 | 30 | @Override 31 | protected void onHover() 32 | { 33 | angle = MathHelper.angleLerpSnap(angle, 15.0f); 34 | tint.a = 0.25f; 35 | } 36 | 37 | @Override 38 | protected void onUnhover() 39 | { 40 | angle = MathHelper.angleLerpSnap(angle, 0.0f); 41 | tint.a = 0; 42 | } 43 | } 44 | -------------------------------------------------------------------------------- /mod/src/main/java/basemod/abstracts/CustomBottleRelic.java: -------------------------------------------------------------------------------- 1 | package basemod.abstracts; 2 | 3 | import com.megacrit.cardcrawl.cards.AbstractCard; 4 | 5 | import java.util.function.Predicate; 6 | 7 | public interface CustomBottleRelic 8 | { 9 | Predicate isOnCard(); 10 | } 11 | -------------------------------------------------------------------------------- /mod/src/main/java/basemod/abstracts/CustomPotion.java: -------------------------------------------------------------------------------- 1 | package basemod.abstracts; 2 | 3 | import com.megacrit.cardcrawl.potions.AbstractPotion; 4 | 5 | public abstract class CustomPotion extends AbstractPotion{ 6 | public CustomPotion(String name, String id, PotionRarity rarity, PotionSize size, PotionColor color) { 7 | super(name, id, rarity, size, color); 8 | } 9 | } -------------------------------------------------------------------------------- /mod/src/main/java/basemod/abstracts/CustomSavable.java: -------------------------------------------------------------------------------- 1 | package basemod.abstracts; 2 | 3 | import com.google.gson.Gson; 4 | import com.google.gson.JsonElement; 5 | 6 | import java.lang.reflect.ParameterizedType; 7 | import java.lang.reflect.Type; 8 | 9 | public interface CustomSavable extends CustomSavableRaw 10 | { 11 | Gson saveFileGson = new Gson(); 12 | 13 | T onSave(); 14 | void onLoad(T object); 15 | 16 | default Type savedType() 17 | { 18 | Class clz = getClass(); 19 | for (Type t : clz.getGenericInterfaces()) { 20 | if (t instanceof ParameterizedType) { 21 | ParameterizedType pt = (ParameterizedType) t; 22 | if (pt.getRawType().equals(CustomSavable.class)) { 23 | return pt.getActualTypeArguments()[0]; 24 | } 25 | } 26 | } 27 | 28 | throw new RuntimeException("Implement [Type savedType()]"); 29 | } 30 | 31 | @Override 32 | default JsonElement onSaveRaw() { 33 | return saveFileGson.toJsonTree(onSave()); 34 | } 35 | 36 | @Override 37 | default void onLoadRaw(JsonElement value) { 38 | if (value != null) { 39 | T parsed = saveFileGson.fromJson(value, savedType()); 40 | onLoad(parsed); 41 | } else { 42 | onLoad(null); 43 | } 44 | } 45 | } -------------------------------------------------------------------------------- /mod/src/main/java/basemod/abstracts/CustomSavableRaw.java: -------------------------------------------------------------------------------- 1 | package basemod.abstracts; 2 | 3 | import com.google.gson.JsonElement; 4 | 5 | public interface CustomSavableRaw 6 | { 7 | JsonElement onSaveRaw(); 8 | void onLoadRaw(JsonElement value); 9 | } -------------------------------------------------------------------------------- /mod/src/main/java/basemod/abstracts/CustomUnlock.java: -------------------------------------------------------------------------------- 1 | package basemod.abstracts; 2 | 3 | import com.megacrit.cardcrawl.helpers.CardLibrary; 4 | import com.megacrit.cardcrawl.helpers.RelicLibrary; 5 | import com.megacrit.cardcrawl.unlock.AbstractUnlock; 6 | 7 | public class CustomUnlock extends AbstractUnlock { 8 | 9 | public CustomUnlock(String cardID) { 10 | this(UnlockType.CARD, cardID); 11 | } 12 | 13 | public CustomUnlock(UnlockType type, String id) { 14 | this.type = type; 15 | switch (this.type) { 16 | case CARD: 17 | card = CardLibrary.getCard(id); 18 | key = card.cardID; 19 | title = card.name; 20 | case RELIC: 21 | relic = RelicLibrary.getRelic(id); 22 | key = relic.relicId; 23 | title = relic.name; 24 | } 25 | } 26 | 27 | } 28 | -------------------------------------------------------------------------------- /mod/src/main/java/basemod/abstracts/cardbuilder/actionbuilder/ActionBuilder.java: -------------------------------------------------------------------------------- 1 | package basemod.abstracts.cardbuilder.actionbuilder; 2 | 3 | import basemod.abstracts.cardbuilder.CardBasic; 4 | import com.megacrit.cardcrawl.actions.AbstractGameAction; 5 | import com.megacrit.cardcrawl.characters.AbstractPlayer; 6 | import com.megacrit.cardcrawl.monsters.AbstractMonster; 7 | 8 | public abstract class ActionBuilder { 9 | public boolean toTop() { return false; } 10 | 11 | public String description(CardBasic card) { return ""; } 12 | 13 | public abstract AbstractGameAction buildAction(CardBasic card, AbstractPlayer player, AbstractMonster monster); 14 | } -------------------------------------------------------------------------------- /mod/src/main/java/basemod/abstracts/cardbuilder/actionbuilder/AmountActionBuilder.java: -------------------------------------------------------------------------------- 1 | package basemod.abstracts.cardbuilder.actionbuilder; 2 | 3 | import basemod.abstracts.cardbuilder.CardBasic; 4 | 5 | public abstract class AmountActionBuilder extends ActionBuilder { 6 | 7 | private boolean useMagicNumber; 8 | private int amount; 9 | private int upgradedAmount; 10 | 11 | public AmountActionBuilder() { 12 | this.useMagicNumber = true; 13 | } 14 | 15 | public AmountActionBuilder(int amount, int upgradedAmount) { 16 | this.useMagicNumber = false; 17 | this.amount = amount; 18 | this.upgradedAmount = upgradedAmount; 19 | } 20 | 21 | public boolean usingMagicNumber() { 22 | return useMagicNumber; 23 | } 24 | 25 | public int getAmount(CardBasic card) { 26 | if (this.useMagicNumber) { 27 | return card.magicNumber; 28 | } else { 29 | return card.upgraded ? upgradedAmount : amount; 30 | } 31 | } 32 | 33 | } 34 | -------------------------------------------------------------------------------- /mod/src/main/java/basemod/abstracts/cardbuilder/actionbuilder/HealActionBuilder.java: -------------------------------------------------------------------------------- 1 | package basemod.abstracts.cardbuilder.actionbuilder; 2 | 3 | import basemod.abstracts.cardbuilder.CardBasic; 4 | import com.megacrit.cardcrawl.actions.AbstractGameAction; 5 | import com.megacrit.cardcrawl.actions.common.HealAction; 6 | import com.megacrit.cardcrawl.characters.AbstractPlayer; 7 | import com.megacrit.cardcrawl.monsters.AbstractMonster; 8 | 9 | public class HealActionBuilder extends AmountActionBuilder { 10 | 11 | public HealActionBuilder() { 12 | super(); 13 | } 14 | 15 | public HealActionBuilder(int amount, int upgradedAmount) { 16 | super(amount, upgradedAmount); 17 | } 18 | 19 | @Override 20 | public String description(CardBasic card) { 21 | StringBuilder description = new StringBuilder(); 22 | description.append("Heal "); 23 | if (usingMagicNumber()) { 24 | description.append("!M! "); 25 | } else { 26 | description.append(getAmount(card)); 27 | description.append(" "); 28 | } 29 | description.append("HP. "); 30 | return description.toString(); 31 | } 32 | 33 | @Override 34 | public AbstractGameAction buildAction(CardBasic card, AbstractPlayer player, AbstractMonster monster) { 35 | return new HealAction(player, player, getAmount(card)); 36 | } 37 | 38 | } 39 | -------------------------------------------------------------------------------- /mod/src/main/java/basemod/abstracts/cardbuilder/actionbuilder/PoisonActionBuilder.java: -------------------------------------------------------------------------------- 1 | package basemod.abstracts.cardbuilder.actionbuilder; 2 | 3 | import com.megacrit.cardcrawl.powers.PoisonPower; 4 | 5 | public class PoisonActionBuilder extends ApplyPowerActionBuilder { 6 | 7 | public PoisonActionBuilder() { 8 | super( 9 | (card, player, monster, amount) -> new PoisonPower(monster, player, amount), 10 | () -> "Posion"); 11 | } 12 | 13 | public PoisonActionBuilder(int amount, int upgradedAmount) { 14 | super(amount, upgradedAmount, 15 | (card, player, monster, realAmount) -> new PoisonPower(monster, player, realAmount), 16 | () -> "Posion"); 17 | } 18 | 19 | } 20 | -------------------------------------------------------------------------------- /mod/src/main/java/basemod/abstracts/events/phases/EventPhase.java: -------------------------------------------------------------------------------- 1 | package basemod.abstracts.events.phases; 2 | 3 | import basemod.abstracts.events.PhasedEvent; 4 | import com.badlogic.gdx.graphics.g2d.SpriteBatch; 5 | 6 | import java.util.function.Consumer; 7 | 8 | public abstract class EventPhase { 9 | private Consumer updateHandler = null; 10 | 11 | public abstract void transition(PhasedEvent event); 12 | public abstract void hide(PhasedEvent event); 13 | 14 | public void reset() { 15 | updateHandler = null; 16 | } 17 | 18 | public void setUpdateHandler(Consumer handler) { 19 | updateHandler = handler; 20 | } 21 | 22 | public Consumer getUpdateHandler() { 23 | return updateHandler; 24 | } 25 | 26 | public void update() { 27 | if (updateHandler != null) updateHandler.accept(this); 28 | } 29 | 30 | public void render(SpriteBatch sb) { 31 | 32 | } 33 | public void renderAboveTopPanel(SpriteBatch sb) { 34 | 35 | } 36 | 37 | public boolean reopen(PhasedEvent phasedEvent) { 38 | return false; 39 | } 40 | } 41 | -------------------------------------------------------------------------------- /mod/src/main/java/basemod/abstracts/events/phases/ImageEventPhase.java: -------------------------------------------------------------------------------- 1 | package basemod.abstracts.events.phases; 2 | 3 | import basemod.abstracts.events.PhasedEvent; 4 | import com.megacrit.cardcrawl.events.GenericEventDialog; 5 | 6 | public abstract class ImageEventPhase extends EventPhase { 7 | public void optionChosen(PhasedEvent event, int i) { 8 | optionChosen(i); 9 | } 10 | public void optionChosen(int i) { 11 | 12 | } 13 | 14 | @Override 15 | public void hide(PhasedEvent event) { 16 | event.imageEventText.clearAllDialogs(); 17 | GenericEventDialog.hide(); 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /mod/src/main/java/basemod/animations/AbstractAnimation.java: -------------------------------------------------------------------------------- 1 | package basemod.animations; 2 | 3 | import com.badlogic.gdx.graphics.g2d.SpriteBatch; 4 | import com.badlogic.gdx.graphics.g3d.Environment; 5 | import com.badlogic.gdx.graphics.g3d.ModelBatch; 6 | import com.megacrit.cardcrawl.characters.AbstractPlayer; 7 | import com.megacrit.cardcrawl.dungeons.AbstractDungeon; 8 | 9 | public abstract class AbstractAnimation 10 | { 11 | public enum Type 12 | { 13 | NONE, SPRITE, MODEL 14 | } 15 | 16 | public abstract Type type(); 17 | 18 | public void setFlip(boolean horizontal, boolean vertical) {} 19 | 20 | @Deprecated 21 | public void renderSprite(SpriteBatch batch) 22 | { 23 | AbstractPlayer player = AbstractDungeon.player; 24 | renderSprite(batch, player.drawX + player.animX, player.drawY + player.animY + AbstractDungeon.sceneOffsetY); 25 | } 26 | public void renderSprite(SpriteBatch batch, float x, float y) {} 27 | public void renderModel(ModelBatch batch, Environment env) {} 28 | } 29 | -------------------------------------------------------------------------------- /mod/src/main/java/basemod/animations/SpineAnimation.java: -------------------------------------------------------------------------------- 1 | package basemod.animations; 2 | 3 | public class SpineAnimation extends AbstractAnimation 4 | { 5 | public String atlasUrl; 6 | public String skeletonUrl; 7 | public float scale; 8 | 9 | public SpineAnimation(String atlasUrl, String skeletonUrl, float scale) 10 | { 11 | this.atlasUrl = atlasUrl; 12 | this.skeletonUrl = skeletonUrl; 13 | this.scale = scale; 14 | } 15 | 16 | @Override 17 | public Type type() 18 | { 19 | return Type.NONE; 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /mod/src/main/java/basemod/cardmods/EtherealMod.java: -------------------------------------------------------------------------------- 1 | package basemod.cardmods; 2 | 3 | import basemod.abstracts.AbstractCardModifier; 4 | import com.megacrit.cardcrawl.cards.AbstractCard; 5 | import com.megacrit.cardcrawl.core.CardCrawlGame; 6 | import com.megacrit.cardcrawl.localization.UIStrings; 7 | 8 | 9 | public class EtherealMod extends AbstractCardModifier { 10 | public static String ID = "basemod:EtherealCardModifier"; 11 | private static final UIStrings uiStrings = CardCrawlGame.languagePack.getUIString(ID); 12 | 13 | @Override 14 | public String modifyDescription(String rawDescription, AbstractCard card) { 15 | return String.format(uiStrings.TEXT[0], rawDescription); 16 | } 17 | 18 | @Override 19 | public boolean shouldApply(AbstractCard card) { 20 | return !card.isEthereal; 21 | } 22 | 23 | @Override 24 | public void onInitialApplication(AbstractCard card) { 25 | card.isEthereal = true; 26 | } 27 | 28 | @Override 29 | public void onRemove(AbstractCard card) { 30 | card.isEthereal = false; 31 | } 32 | 33 | @Override 34 | public AbstractCardModifier makeCopy() { 35 | return new EtherealMod(); 36 | } 37 | 38 | @Override 39 | public String identifier(AbstractCard card) { 40 | return ID; 41 | } 42 | } 43 | -------------------------------------------------------------------------------- /mod/src/main/java/basemod/cardmods/ExhaustMod.java: -------------------------------------------------------------------------------- 1 | package basemod.cardmods; 2 | 3 | import basemod.abstracts.AbstractCardModifier; 4 | import com.megacrit.cardcrawl.cards.AbstractCard; 5 | import com.megacrit.cardcrawl.core.CardCrawlGame; 6 | import com.megacrit.cardcrawl.localization.UIStrings; 7 | 8 | public class ExhaustMod extends AbstractCardModifier { 9 | public static String ID = "basemod:ExhaustCardModifier"; 10 | private static final UIStrings uiStrings = CardCrawlGame.languagePack.getUIString(ID); 11 | 12 | @Override 13 | public String modifyDescription(String rawDescription, AbstractCard card) { 14 | return String.format(uiStrings.TEXT[0], rawDescription); 15 | } 16 | 17 | @Override 18 | public boolean shouldApply(AbstractCard card) { 19 | return !card.exhaust; 20 | } 21 | 22 | @Override 23 | public void onInitialApplication(AbstractCard card) { 24 | card.exhaust = true; 25 | } 26 | 27 | @Override 28 | public void onRemove(AbstractCard card) { 29 | card.exhaust = false; 30 | } 31 | 32 | @Override 33 | public AbstractCardModifier makeCopy() { 34 | return new ExhaustMod(); 35 | } 36 | 37 | @Override 38 | public String identifier(AbstractCard card) { 39 | return ID; 40 | } 41 | } 42 | -------------------------------------------------------------------------------- /mod/src/main/java/basemod/cardmods/InnateMod.java: -------------------------------------------------------------------------------- 1 | package basemod.cardmods; 2 | 3 | import basemod.abstracts.AbstractCardModifier; 4 | import com.megacrit.cardcrawl.cards.AbstractCard; 5 | import com.megacrit.cardcrawl.core.CardCrawlGame; 6 | import com.megacrit.cardcrawl.localization.UIStrings; 7 | 8 | public class InnateMod extends AbstractCardModifier { 9 | public static String ID = "basemod:InnateCardModifier"; 10 | private static final UIStrings uiStrings = CardCrawlGame.languagePack.getUIString(ID); 11 | 12 | @Override 13 | public String modifyDescription(String rawDescription, AbstractCard card) { 14 | return String.format(uiStrings.TEXT[0], rawDescription); 15 | } 16 | 17 | @Override 18 | public boolean shouldApply(AbstractCard card) { 19 | return !card.isInnate; 20 | } 21 | 22 | @Override 23 | public void onInitialApplication(AbstractCard card) { 24 | card.isInnate = true; 25 | } 26 | 27 | @Override 28 | public void onRemove(AbstractCard card) { 29 | card.isInnate = false; 30 | } 31 | 32 | @Override 33 | public AbstractCardModifier makeCopy() { 34 | return new InnateMod(); 35 | } 36 | 37 | @Override 38 | public String identifier(AbstractCard card) { 39 | return ID; 40 | } 41 | } 42 | -------------------------------------------------------------------------------- /mod/src/main/java/basemod/cardmods/RetainMod.java: -------------------------------------------------------------------------------- 1 | package basemod.cardmods; 2 | 3 | import basemod.abstracts.AbstractCardModifier; 4 | import com.megacrit.cardcrawl.cards.AbstractCard; 5 | import com.megacrit.cardcrawl.core.CardCrawlGame; 6 | import com.megacrit.cardcrawl.localization.UIStrings; 7 | 8 | public class RetainMod extends AbstractCardModifier { 9 | public static String ID = "basemod:RetainCardModifier"; 10 | private static final UIStrings uiStrings = CardCrawlGame.languagePack.getUIString(ID); 11 | 12 | @Override 13 | public String modifyDescription(String rawDescription, AbstractCard card) { 14 | return String.format(uiStrings.TEXT[0], rawDescription); 15 | } 16 | 17 | @Override 18 | public boolean shouldApply(AbstractCard card) { 19 | return !card.selfRetain; 20 | } 21 | 22 | @Override 23 | public void onInitialApplication(AbstractCard card) { 24 | card.selfRetain = true; 25 | } 26 | 27 | @Override 28 | public void onRemove(AbstractCard card) { 29 | card.selfRetain = false; 30 | } 31 | 32 | @Override 33 | public AbstractCardModifier makeCopy() { 34 | return new RetainMod(); 35 | } 36 | 37 | @Override 38 | public String identifier(AbstractCard card) { 39 | return ID; 40 | } 41 | } 42 | -------------------------------------------------------------------------------- /mod/src/main/java/basemod/devcommands/Help.java: -------------------------------------------------------------------------------- 1 | package basemod.devcommands; 2 | 3 | import basemod.DevConsole; 4 | 5 | import java.util.Iterator; 6 | 7 | public class Help extends ConsoleCommand { 8 | 9 | @Override 10 | public void execute(String[] tokens, int depth) { 11 | 12 | // print help info 13 | // Needs to be dynamic, of course 14 | 15 | String thang = "options are:"; 16 | 17 | Iterator var3 = getKeys(); 18 | 19 | String s; 20 | while(var3.hasNext()) { 21 | s = var3.next(); 22 | 23 | if(thang.length() > 0) { 24 | thang += ' '; 25 | } 26 | thang += s; 27 | if(thang.length() > 50) { 28 | DevConsole.log(thang + "..."); 29 | thang = ""; 30 | } 31 | } 32 | if(thang.length() > 0) { 33 | DevConsole.log(thang); 34 | } 35 | } 36 | } 37 | -------------------------------------------------------------------------------- /mod/src/main/java/basemod/devcommands/InvalidCommandException.java: -------------------------------------------------------------------------------- 1 | package basemod.devcommands; 2 | 3 | public class InvalidCommandException extends Exception { 4 | } 5 | -------------------------------------------------------------------------------- /mod/src/main/java/basemod/devcommands/blight/Blight.java: -------------------------------------------------------------------------------- 1 | package basemod.devcommands.blight; 2 | 3 | import basemod.devcommands.ConsoleCommand; 4 | import basemod.DevConsole; 5 | 6 | public class Blight extends ConsoleCommand { 7 | public Blight() { 8 | followup.put("add", BlightAdd.class); 9 | followup.put("remove", BlightRemove.class); 10 | requiresPlayer = true; 11 | } 12 | 13 | @Override 14 | public void execute(String[] tokens, int depth) { 15 | cmdBlightHelp(); 16 | } 17 | 18 | public void errorMsg() { 19 | cmdBlightHelp(); 20 | } 21 | 22 | public static void cmdBlightHelp() { 23 | DevConsole.couldNotParse(); 24 | DevConsole.log("options are:"); 25 | DevConsole.log("* add [id]"); 26 | DevConsole.log("* remove [id]"); 27 | } 28 | } 29 | -------------------------------------------------------------------------------- /mod/src/main/java/basemod/devcommands/deck/Deck.java: -------------------------------------------------------------------------------- 1 | package basemod.devcommands.deck; 2 | 3 | import basemod.devcommands.ConsoleCommand; 4 | import basemod.DevConsole; 5 | 6 | public class Deck extends ConsoleCommand { 7 | public Deck() { 8 | followup.put("add", DeckAdd.class); 9 | followup.put("remove", DeckRemove.class); 10 | requiresPlayer = true; 11 | } 12 | 13 | @Override 14 | public void execute(String[] tokens, int depth) { 15 | cmdDeckHelp(); 16 | } 17 | 18 | @Override 19 | public void errorMsg() { 20 | cmdDeckHelp(); 21 | } 22 | 23 | public static void cmdDeckHelp() { 24 | DevConsole.couldNotParse(); 25 | DevConsole.log("options are:"); 26 | DevConsole.log("* add [id] {count} {upgrade amt}"); 27 | DevConsole.log("* remove [id]"); 28 | DevConsole.log("* remove all"); 29 | } 30 | } 31 | -------------------------------------------------------------------------------- /mod/src/main/java/basemod/devcommands/deck/DeckRemove.java: -------------------------------------------------------------------------------- 1 | package basemod.devcommands.deck; 2 | 3 | import basemod.devcommands.ConsoleCommand; 4 | import com.megacrit.cardcrawl.dungeons.AbstractDungeon; 5 | 6 | import java.util.ArrayList; 7 | 8 | public class DeckRemove extends DeckManipulator { 9 | 10 | public DeckRemove() { 11 | maxExtraTokens = 1; 12 | simpleCheck = true; 13 | } 14 | 15 | public void execute(String[] tokens, int depth) { 16 | // remove all cards 17 | if (tokens[2].equals("all")) { 18 | for (String str : AbstractDungeon.player.masterDeck.getCardNames()) { 19 | AbstractDungeon.player.masterDeck.removeCard(str); 20 | } 21 | // remove single card 22 | } else { 23 | AbstractDungeon.player.masterDeck.removeCard(getCardID(tokens)); 24 | } 25 | } 26 | 27 | @Override 28 | public ArrayList extraOptions(String[] tokens, int depth) { 29 | ArrayList result = ConsoleCommand.getCardOptionsFromCardGroup(AbstractDungeon.player.masterDeck); 30 | 31 | result.add("all"); 32 | 33 | return result; 34 | } 35 | } 36 | -------------------------------------------------------------------------------- /mod/src/main/java/basemod/devcommands/key/KeyCommand.java: -------------------------------------------------------------------------------- 1 | package basemod.devcommands.key; 2 | 3 | import basemod.devcommands.ConsoleCommand; 4 | import basemod.DevConsole; 5 | 6 | public class KeyCommand extends ConsoleCommand { 7 | 8 | public KeyCommand() { 9 | requiresPlayer = true; 10 | minExtraTokens = 1; 11 | simpleCheck = true; 12 | followup.put("add", KeyAdd.class); 13 | followup.put("lose", KeyLose.class); 14 | } 15 | 16 | @Override 17 | public void execute(String[] tokens, int depth) { 18 | errorMsg(); 19 | } 20 | 21 | @Override 22 | public void errorMsg() { 23 | cmdDrawHelp(); 24 | } 25 | 26 | private static void cmdDrawHelp() { 27 | DevConsole.couldNotParse(); 28 | DevConsole.log("options are:"); 29 | DevConsole.log("* draw [amt]"); 30 | } 31 | } 32 | -------------------------------------------------------------------------------- /mod/src/main/java/basemod/devcommands/potions/Potionlist.java: -------------------------------------------------------------------------------- 1 | package basemod.devcommands.potions; 2 | 3 | import basemod.devcommands.ConsoleCommand; 4 | import basemod.DevConsole; 5 | import com.megacrit.cardcrawl.characters.AbstractPlayer; 6 | import com.megacrit.cardcrawl.helpers.PotionHelper; 7 | 8 | import java.util.ArrayList; 9 | import java.util.Collections; 10 | import java.util.List; 11 | 12 | public class Potionlist extends ConsoleCommand { 13 | 14 | public void execute(String[] tokens, int depth) { 15 | // PlayerClass doesn't matter 16 | List allPotions = PotionHelper.getPotions(AbstractPlayer.PlayerClass.IRONCLAD, true); 17 | Collections.sort(allPotions); 18 | DevConsole.log(allPotions); 19 | } 20 | 21 | @Override 22 | public ArrayList extraOptions(String[] tokens, int depth) { 23 | complete = true; 24 | if(tokens.length > depth && tokens[depth].length() > 0) { 25 | tooManyTokensError(); 26 | } 27 | return null; 28 | } 29 | } 30 | -------------------------------------------------------------------------------- /mod/src/main/java/basemod/devcommands/relic/RelicAdd.java: -------------------------------------------------------------------------------- 1 | package basemod.devcommands.relic; 2 | 3 | import basemod.devcommands.ConsoleCommand; 4 | import com.megacrit.cardcrawl.core.Settings; 5 | import com.megacrit.cardcrawl.dungeons.AbstractDungeon; 6 | import com.megacrit.cardcrawl.helpers.RelicLibrary; 7 | 8 | import java.util.ArrayList; 9 | import java.util.Arrays; 10 | 11 | public class RelicAdd extends ConsoleCommand { 12 | public RelicAdd() { 13 | requiresPlayer = true; 14 | minExtraTokens = 1; 15 | maxExtraTokens = 1; 16 | simpleCheck = true; 17 | } 18 | 19 | @Override 20 | public void execute(String[] tokens, int depth) { 21 | String[] relicNameArray = Arrays.copyOfRange(tokens, 2, tokens.length); 22 | String relicName = Relic.getRelicName(relicNameArray); 23 | AbstractDungeon.getCurrRoom().spawnRelicAndObtain(Settings.WIDTH / 2, Settings.HEIGHT / 2, 24 | RelicLibrary.getRelic(relicName).makeCopy()); 25 | } 26 | 27 | @Override 28 | public ArrayList extraOptions(String[] tokens, int depth) { 29 | return ConsoleCommand.getRelicOptions(); 30 | } 31 | 32 | @Override 33 | public void errorMsg() { 34 | Relic.cmdRelicHelp(); 35 | } 36 | } 37 | 38 | 39 | 40 | 41 | -------------------------------------------------------------------------------- /mod/src/main/java/basemod/devcommands/relic/RelicDescription.java: -------------------------------------------------------------------------------- 1 | package basemod.devcommands.relic; 2 | 3 | import basemod.devcommands.ConsoleCommand; 4 | import basemod.DevConsole; 5 | import com.megacrit.cardcrawl.helpers.RelicLibrary; 6 | 7 | import java.util.ArrayList; 8 | import java.util.Arrays; 9 | 10 | public class RelicDescription extends ConsoleCommand { 11 | public RelicDescription() { 12 | minExtraTokens = 1; 13 | maxExtraTokens = 1; 14 | simpleCheck = true; 15 | } 16 | 17 | @Override 18 | public void execute(String[] tokens, int depth) { 19 | String[] relicNameArray = Arrays.copyOfRange(tokens, 2, tokens.length); 20 | String relicName = Relic.getRelicName(relicNameArray); 21 | DevConsole.log(RelicLibrary.getRelic(relicName).description); 22 | } 23 | 24 | @Override 25 | public ArrayList extraOptions(String[] tokens, int depth) { 26 | return ConsoleCommand.getRelicOptions(); 27 | } 28 | 29 | @Override 30 | public void errorMsg() { 31 | Relic.cmdRelicHelp(); 32 | } 33 | } 34 | 35 | 36 | 37 | 38 | -------------------------------------------------------------------------------- /mod/src/main/java/basemod/devcommands/relic/RelicPool.java: -------------------------------------------------------------------------------- 1 | package basemod.devcommands.relic; 2 | 3 | import basemod.devcommands.ConsoleCommand; 4 | import basemod.DevConsole; 5 | import com.megacrit.cardcrawl.helpers.RelicLibrary; 6 | 7 | import java.util.ArrayList; 8 | import java.util.Arrays; 9 | 10 | public class RelicPool extends ConsoleCommand { 11 | public RelicPool() { 12 | minExtraTokens = 1; 13 | maxExtraTokens = 1; 14 | simpleCheck = true; 15 | } 16 | 17 | @Override 18 | public void execute(String[] tokens, int depth) { 19 | String[] relicNameArray = Arrays.copyOfRange(tokens, 2, tokens.length); 20 | String relicName = Relic.getRelicName(relicNameArray); 21 | DevConsole.log(RelicLibrary.getRelic(relicName).tier.toString()); 22 | } 23 | 24 | @Override 25 | public ArrayList extraOptions(String[] tokens, int depth) { 26 | return ConsoleCommand.getRelicOptions(); 27 | } 28 | 29 | @Override 30 | public void errorMsg() { 31 | Relic.cmdRelicHelp(); 32 | } 33 | } 34 | 35 | 36 | 37 | 38 | -------------------------------------------------------------------------------- /mod/src/main/java/basemod/devcommands/relic/RelicRemove.java: -------------------------------------------------------------------------------- 1 | package basemod.devcommands.relic; 2 | 3 | import basemod.devcommands.ConsoleCommand; 4 | import com.megacrit.cardcrawl.dungeons.AbstractDungeon; 5 | import com.megacrit.cardcrawl.relics.AbstractRelic; 6 | 7 | import java.util.ArrayList; 8 | import java.util.Arrays; 9 | 10 | public class RelicRemove extends ConsoleCommand { 11 | public RelicRemove() { 12 | requiresPlayer = true; 13 | minExtraTokens = 1; 14 | maxExtraTokens = 1; 15 | simpleCheck = true; 16 | } 17 | 18 | @Override 19 | public void execute(String[] tokens, int depth) { 20 | String[] relicNameArray = Arrays.copyOfRange(tokens, 2, tokens.length); 21 | String relicName = Relic.getRelicName(relicNameArray); 22 | AbstractDungeon.player.loseRelic(relicName); 23 | } 24 | 25 | @Override 26 | public ArrayList extraOptions(String[] tokens, int depth) { 27 | ArrayList result = new ArrayList<>(); 28 | for (AbstractRelic relic : AbstractDungeon.player.relics) { 29 | result.add(relic.relicId.replace(' ', '_')); 30 | } 31 | return result; 32 | } 33 | 34 | @Override 35 | public void errorMsg() { 36 | Relic.cmdRelicHelp(); 37 | } 38 | 39 | } 40 | 41 | 42 | 43 | 44 | -------------------------------------------------------------------------------- /mod/src/main/java/basemod/eventUtil/util/Condition.java: -------------------------------------------------------------------------------- 1 | package basemod.eventUtil.util; 2 | 3 | public interface Condition { 4 | boolean test(); 5 | } 6 | -------------------------------------------------------------------------------- /mod/src/main/java/basemod/helpers/BaseModCardTags.java: -------------------------------------------------------------------------------- 1 | package basemod.helpers; 2 | 3 | import com.evacipated.cardcrawl.modthespire.lib.SpireEnum; 4 | import com.megacrit.cardcrawl.cards.AbstractCard; 5 | 6 | public class BaseModCardTags 7 | { 8 | // For Back to Basics, Vampires, Pandora's Box 9 | @Deprecated 10 | public static AbstractCard.CardTags BASIC_STRIKE = AbstractCard.CardTags.STARTER_STRIKE; 11 | @Deprecated 12 | public static AbstractCard.CardTags BASIC_DEFEND = AbstractCard.CardTags.STARTER_DEFEND; 13 | // For My True Form 14 | @SpireEnum public static AbstractCard.CardTags FORM; 15 | } 16 | -------------------------------------------------------------------------------- /mod/src/main/java/basemod/helpers/CardPowerTip.java: -------------------------------------------------------------------------------- 1 | package basemod.helpers; 2 | 3 | import com.badlogic.gdx.graphics.Texture; 4 | import com.badlogic.gdx.graphics.g2d.TextureAtlas; 5 | import com.megacrit.cardcrawl.cards.AbstractCard; 6 | import com.megacrit.cardcrawl.helpers.PowerTip; 7 | 8 | public class CardPowerTip extends PowerTip { 9 | public AbstractCard card; 10 | public float textHeight = 0.0f; 11 | public float cardScale = 0.8f; 12 | 13 | public CardPowerTip(AbstractCard card) { 14 | this.card = card; 15 | header = ""; 16 | body = ""; 17 | img = null; 18 | imgRegion = null; 19 | } 20 | 21 | public CardPowerTip(AbstractCard card, String header, String body) { 22 | super(header, body); 23 | this.card = card; 24 | } 25 | 26 | public CardPowerTip(AbstractCard card, String header, String body, Texture img) { 27 | super(header, body, img); 28 | this.card = card; 29 | } 30 | 31 | public CardPowerTip(AbstractCard card, String header, String body, TextureAtlas.AtlasRegion region48) { 32 | super(header, body, region48); 33 | this.card = card; 34 | } 35 | } 36 | -------------------------------------------------------------------------------- /mod/src/main/java/basemod/helpers/CardTags.java: -------------------------------------------------------------------------------- 1 | package basemod.helpers; 2 | 3 | import com.megacrit.cardcrawl.cards.AbstractCard; 4 | 5 | import java.util.Arrays; 6 | import java.util.List; 7 | 8 | public class CardTags 9 | { 10 | public static boolean hasTag(AbstractCard card, AbstractCard.CardTags tag) 11 | { 12 | return card.hasTag(tag); 13 | } 14 | 15 | public static List getAllTags(AbstractCard card) 16 | { 17 | return card.tags; 18 | } 19 | 20 | public static void addTags(AbstractCard card, AbstractCard.CardTags... tags) 21 | { 22 | card.tags.addAll(Arrays.asList(tags)); 23 | } 24 | 25 | public static void removeTags(AbstractCard card, AbstractCard.CardTags... tags) 26 | { 27 | card.tags.removeAll(Arrays.asList(tags)); 28 | } 29 | 30 | public static void removeAllTags(AbstractCard card) 31 | { 32 | card.tags.clear(); 33 | } 34 | 35 | public static void toggleTag(AbstractCard card, AbstractCard.CardTags tag) 36 | { 37 | if (hasTag(card, tag)) { 38 | removeTags(card, tag); 39 | } else { 40 | addTags(card, tag); 41 | } 42 | } 43 | } 44 | -------------------------------------------------------------------------------- /mod/src/main/java/basemod/helpers/ConvertHelper.java: -------------------------------------------------------------------------------- 1 | package basemod.helpers; 2 | 3 | public class ConvertHelper { 4 | public static Integer tryParseInt(String txt) { 5 | try { 6 | return Integer.parseInt(txt); 7 | } catch (NumberFormatException e) { 8 | return null; 9 | } 10 | } 11 | 12 | public static Integer tryParseInt(String txt, Integer def) { 13 | try { 14 | return Integer.parseInt(txt); 15 | } catch (NumberFormatException e) { 16 | return def; 17 | } 18 | } 19 | } -------------------------------------------------------------------------------- /mod/src/main/java/basemod/helpers/RelicType.java: -------------------------------------------------------------------------------- 1 | package basemod.helpers; 2 | 3 | public enum RelicType { 4 | SHARED, RED, GREEN, BLUE, PURPLE 5 | } 6 | -------------------------------------------------------------------------------- /mod/src/main/java/basemod/helpers/ScreenPostProcessorManager.java: -------------------------------------------------------------------------------- 1 | package basemod.helpers; 2 | 3 | import basemod.interfaces.ScreenPostProcessor; 4 | import basemod.patches.com.megacrit.cardcrawl.core.CardCrawlGame.ApplyScreenPostProcessor; 5 | 6 | import java.util.Comparator; 7 | 8 | public class ScreenPostProcessorManager { 9 | public static void addPostProcessor(ScreenPostProcessor postProcessor) { 10 | ApplyScreenPostProcessor.postProcessors.add(postProcessor); 11 | ApplyScreenPostProcessor.postProcessors.sort(Comparator.comparingInt(ScreenPostProcessor::priority)); 12 | } 13 | 14 | public static boolean removePostProcessor(ScreenPostProcessor postProcessor) { 15 | return ApplyScreenPostProcessor.postProcessors.remove(postProcessor); 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /mod/src/main/java/basemod/helpers/TooltipInfo.java: -------------------------------------------------------------------------------- 1 | package basemod.helpers; 2 | 3 | import com.megacrit.cardcrawl.helpers.PowerTip; 4 | 5 | public class TooltipInfo 6 | { 7 | public String title; 8 | public String description; 9 | 10 | public TooltipInfo(String title, String description) 11 | { 12 | this.title = title; 13 | this.description = description; 14 | } 15 | 16 | public PowerTip toPowerTip() 17 | { 18 | return new PowerTip(title, description); 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /mod/src/main/java/basemod/helpers/UIElementModificationHelper.java: -------------------------------------------------------------------------------- 1 | package basemod.helpers; 2 | 3 | import com.megacrit.cardcrawl.core.Settings; 4 | import com.megacrit.cardcrawl.helpers.Hitbox; 5 | 6 | public class UIElementModificationHelper { 7 | public static void moveHitboxByOriginalParameters(Hitbox hb, float x, float y) { 8 | hb.move(x + hb.width / 2.0F, y + hb.height / 2.0F); 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /mod/src/main/java/basemod/helpers/dynamicvariables/BlockVariable.java: -------------------------------------------------------------------------------- 1 | package basemod.helpers.dynamicvariables; 2 | 3 | import basemod.abstracts.DynamicVariable; 4 | import com.megacrit.cardcrawl.cards.AbstractCard; 5 | 6 | public class BlockVariable extends DynamicVariable 7 | { 8 | @Override 9 | public String key() 10 | { 11 | return "B"; 12 | } 13 | 14 | @Override 15 | public boolean isModified(AbstractCard card) 16 | { 17 | return card.isBlockModified; 18 | } 19 | 20 | @Override 21 | public void setIsModified(AbstractCard card, boolean v) 22 | { 23 | card.isBlockModified = v; 24 | } 25 | 26 | @Override 27 | public int value(AbstractCard card) 28 | { 29 | return card.block; 30 | } 31 | 32 | @Override 33 | public int baseValue(AbstractCard card) 34 | { 35 | return card.baseBlock; 36 | } 37 | 38 | @Override 39 | public boolean upgraded(AbstractCard card) 40 | { 41 | return card.upgradedBlock; 42 | } 43 | } 44 | -------------------------------------------------------------------------------- /mod/src/main/java/basemod/helpers/dynamicvariables/DamageVariable.java: -------------------------------------------------------------------------------- 1 | package basemod.helpers.dynamicvariables; 2 | 3 | import basemod.abstracts.DynamicVariable; 4 | import com.megacrit.cardcrawl.cards.AbstractCard; 5 | 6 | public class DamageVariable extends DynamicVariable 7 | { 8 | @Override 9 | public String key() 10 | { 11 | return "D"; 12 | } 13 | 14 | @Override 15 | public boolean isModified(AbstractCard card) 16 | { 17 | return card.isDamageModified; 18 | } 19 | 20 | @Override 21 | public void setIsModified(AbstractCard card, boolean v) 22 | { 23 | card.isDamageModified = v; 24 | } 25 | 26 | @Override 27 | public int value(AbstractCard card) 28 | { 29 | return card.damage; 30 | } 31 | 32 | @Override 33 | public int baseValue(AbstractCard card) 34 | { 35 | return card.baseDamage; 36 | } 37 | 38 | @Override 39 | public boolean upgraded(AbstractCard card) 40 | { 41 | return card.upgradedDamage; 42 | } 43 | } 44 | -------------------------------------------------------------------------------- /mod/src/main/java/basemod/helpers/dynamicvariables/MagicNumberVariable.java: -------------------------------------------------------------------------------- 1 | package basemod.helpers.dynamicvariables; 2 | 3 | import basemod.abstracts.DynamicVariable; 4 | import com.megacrit.cardcrawl.cards.AbstractCard; 5 | 6 | public class MagicNumberVariable extends DynamicVariable 7 | { 8 | @Override 9 | public String key() 10 | { 11 | return "M"; 12 | } 13 | 14 | @Override 15 | public boolean isModified(AbstractCard card) 16 | { 17 | return card.isMagicNumberModified; 18 | } 19 | 20 | @Override 21 | public void setIsModified(AbstractCard card, boolean v) 22 | { 23 | card.isMagicNumberModified = v; 24 | } 25 | 26 | @Override 27 | public int value(AbstractCard card) 28 | { 29 | return card.magicNumber; 30 | } 31 | 32 | @Override 33 | public int baseValue(AbstractCard card) 34 | { 35 | return card.baseMagicNumber; 36 | } 37 | 38 | @Override 39 | public boolean upgraded(AbstractCard card) 40 | { 41 | return card.upgradedMagicNumber; 42 | } 43 | } 44 | -------------------------------------------------------------------------------- /mod/src/main/java/basemod/interfaces/AddAudioSubscriber.java: -------------------------------------------------------------------------------- 1 | package basemod.interfaces; 2 | 3 | public interface AddAudioSubscriber extends ISubscriber { 4 | void receiveAddAudio(); 5 | } 6 | -------------------------------------------------------------------------------- /mod/src/main/java/basemod/interfaces/AddCustomModeModsSubscriber.java: -------------------------------------------------------------------------------- 1 | package basemod.interfaces; 2 | 3 | import com.megacrit.cardcrawl.screens.custom.CustomMod; 4 | 5 | import java.util.List; 6 | 7 | public interface AddCustomModeModsSubscriber extends ISubscriber { 8 | void receiveCustomModeMods(List modList); 9 | } 10 | -------------------------------------------------------------------------------- /mod/src/main/java/basemod/interfaces/AlternateCardCostModifier.java: -------------------------------------------------------------------------------- 1 | package basemod.interfaces; 2 | 3 | import com.badlogic.gdx.graphics.Color; 4 | import com.megacrit.cardcrawl.cards.AbstractCard; 5 | 6 | public interface AlternateCardCostModifier { 7 | int getAlternateResource(AbstractCard card); 8 | 9 | default boolean prioritizeAlternateCost(AbstractCard card) { 10 | return false; 11 | } 12 | 13 | default boolean canSplitCost(AbstractCard card) { 14 | return false; 15 | } 16 | 17 | int spendAlternateCost(AbstractCard card, int costToSpend); 18 | 19 | default boolean costEffectActive(AbstractCard card) { 20 | return true; 21 | } 22 | 23 | default int setXCostLimit(AbstractCard card) { 24 | return -1; 25 | } 26 | 27 | default boolean disableEnergyForX(AbstractCard card) { 28 | return false; 29 | } 30 | 31 | default String replaceCostString(AbstractCard card, String currentCostString, Color currentCostColor) { 32 | return currentCostString; 33 | } 34 | } 35 | -------------------------------------------------------------------------------- /mod/src/main/java/basemod/interfaces/CloneablePowerInterface.java: -------------------------------------------------------------------------------- 1 | package basemod.interfaces; 2 | 3 | import com.megacrit.cardcrawl.powers.AbstractPower; 4 | 5 | public interface CloneablePowerInterface { 6 | 7 | AbstractPower makeCopy(); 8 | 9 | } 10 | -------------------------------------------------------------------------------- /mod/src/main/java/basemod/interfaces/EditCardsSubscriber.java: -------------------------------------------------------------------------------- 1 | package basemod.interfaces; 2 | 3 | public interface EditCardsSubscriber extends ISubscriber { 4 | void receiveEditCards(); 5 | } 6 | -------------------------------------------------------------------------------- /mod/src/main/java/basemod/interfaces/EditCharactersSubscriber.java: -------------------------------------------------------------------------------- 1 | package basemod.interfaces; 2 | 3 | public interface EditCharactersSubscriber extends ISubscriber { 4 | void receiveEditCharacters(); 5 | } 6 | -------------------------------------------------------------------------------- /mod/src/main/java/basemod/interfaces/EditKeywordsSubscriber.java: -------------------------------------------------------------------------------- 1 | package basemod.interfaces; 2 | 3 | public interface EditKeywordsSubscriber extends ISubscriber { 4 | void receiveEditKeywords(); 5 | } 6 | -------------------------------------------------------------------------------- /mod/src/main/java/basemod/interfaces/EditRelicsSubscriber.java: -------------------------------------------------------------------------------- 1 | package basemod.interfaces; 2 | 3 | public interface EditRelicsSubscriber extends ISubscriber { 4 | void receiveEditRelics(); 5 | } 6 | -------------------------------------------------------------------------------- /mod/src/main/java/basemod/interfaces/EditStringsSubscriber.java: -------------------------------------------------------------------------------- 1 | package basemod.interfaces; 2 | 3 | public interface EditStringsSubscriber extends ISubscriber { 4 | void receiveEditStrings(); 5 | } 6 | -------------------------------------------------------------------------------- /mod/src/main/java/basemod/interfaces/ISubscriber.java: -------------------------------------------------------------------------------- 1 | package basemod.interfaces; 2 | 3 | public interface ISubscriber { 4 | 5 | } 6 | -------------------------------------------------------------------------------- /mod/src/main/java/basemod/interfaces/ImGuiSubscriber.java: -------------------------------------------------------------------------------- 1 | package basemod.interfaces; 2 | 3 | public interface ImGuiSubscriber extends ISubscriber { 4 | void receiveImGui(); 5 | } 6 | -------------------------------------------------------------------------------- /mod/src/main/java/basemod/interfaces/MaxHPChangeSubscriber.java: -------------------------------------------------------------------------------- 1 | package basemod.interfaces; 2 | 3 | public interface MaxHPChangeSubscriber extends ISubscriber 4 | { 5 | @Deprecated 6 | default int receiveMapHPChange(int amount) 7 | { 8 | return receiveMaxHPChange(amount); 9 | } 10 | 11 | default int receiveMaxHPChange(int amount) 12 | { 13 | return amount; 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /mod/src/main/java/basemod/interfaces/ModelRenderSubscriber.java: -------------------------------------------------------------------------------- 1 | package basemod.interfaces; 2 | 3 | import com.badlogic.gdx.graphics.g3d.Environment; 4 | import com.badlogic.gdx.graphics.g3d.ModelBatch; 5 | 6 | public interface ModelRenderSubscriber extends ISubscriber { 7 | void receiveModelRender(ModelBatch batch, Environment env); 8 | } 9 | -------------------------------------------------------------------------------- /mod/src/main/java/basemod/interfaces/OnCardUseSubscriber.java: -------------------------------------------------------------------------------- 1 | package basemod.interfaces; 2 | 3 | import com.megacrit.cardcrawl.cards.AbstractCard; 4 | 5 | public interface OnCardUseSubscriber extends ISubscriber { 6 | void receiveCardUsed(AbstractCard c); 7 | } 8 | -------------------------------------------------------------------------------- /mod/src/main/java/basemod/interfaces/OnCreateDescriptionSubscriber.java: -------------------------------------------------------------------------------- 1 | package basemod.interfaces; 2 | 3 | import com.megacrit.cardcrawl.cards.AbstractCard; 4 | 5 | public interface OnCreateDescriptionSubscriber extends ISubscriber { 6 | String receiveCreateCardDescription(String rawDescription, AbstractCard card); 7 | } 8 | -------------------------------------------------------------------------------- /mod/src/main/java/basemod/interfaces/OnPlayerDamagedSubscriber.java: -------------------------------------------------------------------------------- 1 | package basemod.interfaces; 2 | 3 | import com.megacrit.cardcrawl.cards.DamageInfo; 4 | 5 | public interface OnPlayerDamagedSubscriber extends ISubscriber { 6 | int receiveOnPlayerDamaged(int amount, DamageInfo info); 7 | } 8 | -------------------------------------------------------------------------------- /mod/src/main/java/basemod/interfaces/OnPlayerLoseBlockSubscriber.java: -------------------------------------------------------------------------------- 1 | package basemod.interfaces; 2 | 3 | public interface OnPlayerLoseBlockSubscriber extends ISubscriber { 4 | int receiveOnPlayerLoseBlock(int amount); 5 | } 6 | -------------------------------------------------------------------------------- /mod/src/main/java/basemod/interfaces/OnPlayerTurnStartPostDrawSubscriber.java: -------------------------------------------------------------------------------- 1 | package basemod.interfaces; 2 | 3 | public interface OnPlayerTurnStartPostDrawSubscriber extends ISubscriber { 4 | void receiveOnPlayerTurnStartPostDraw(); 5 | } 6 | -------------------------------------------------------------------------------- /mod/src/main/java/basemod/interfaces/OnPlayerTurnStartSubscriber.java: -------------------------------------------------------------------------------- 1 | package basemod.interfaces; 2 | 3 | public interface OnPlayerTurnStartSubscriber extends ISubscriber { 4 | void receiveOnPlayerTurnStart(); 5 | } 6 | -------------------------------------------------------------------------------- /mod/src/main/java/basemod/interfaces/OnPowersModifiedSubscriber.java: -------------------------------------------------------------------------------- 1 | package basemod.interfaces; 2 | 3 | public interface OnPowersModifiedSubscriber extends ISubscriber { 4 | void receivePowersModified(); 5 | } 6 | -------------------------------------------------------------------------------- /mod/src/main/java/basemod/interfaces/OnStartBattleSubscriber.java: -------------------------------------------------------------------------------- 1 | package basemod.interfaces; 2 | 3 | import com.megacrit.cardcrawl.rooms.AbstractRoom; 4 | 5 | public interface OnStartBattleSubscriber extends ISubscriber { 6 | void receiveOnBattleStart(AbstractRoom room); 7 | } 8 | -------------------------------------------------------------------------------- /mod/src/main/java/basemod/interfaces/PostBattleSubscriber.java: -------------------------------------------------------------------------------- 1 | package basemod.interfaces; 2 | 3 | import com.megacrit.cardcrawl.rooms.AbstractRoom; 4 | 5 | public interface PostBattleSubscriber extends ISubscriber { 6 | void receivePostBattle(AbstractRoom battleRoom); 7 | } 8 | -------------------------------------------------------------------------------- /mod/src/main/java/basemod/interfaces/PostCampfireSubscriber.java: -------------------------------------------------------------------------------- 1 | package basemod.interfaces; 2 | 3 | public interface PostCampfireSubscriber extends ISubscriber { 4 | boolean receivePostCampfire(); 5 | } -------------------------------------------------------------------------------- /mod/src/main/java/basemod/interfaces/PostCreateShopPotionSubscriber.java: -------------------------------------------------------------------------------- 1 | package basemod.interfaces; 2 | 3 | import com.megacrit.cardcrawl.shop.ShopScreen; 4 | import com.megacrit.cardcrawl.shop.StorePotion; 5 | 6 | import java.util.ArrayList; 7 | 8 | public interface PostCreateShopPotionSubscriber extends ISubscriber { 9 | void receiveCreateShopPotions(ArrayList potions, ShopScreen screenInstance); 10 | } 11 | -------------------------------------------------------------------------------- /mod/src/main/java/basemod/interfaces/PostCreateShopRelicSubscriber.java: -------------------------------------------------------------------------------- 1 | package basemod.interfaces; 2 | 3 | import com.megacrit.cardcrawl.shop.ShopScreen; 4 | import com.megacrit.cardcrawl.shop.StoreRelic; 5 | 6 | import java.util.ArrayList; 7 | 8 | public interface PostCreateShopRelicSubscriber extends ISubscriber { 9 | void receiveCreateShopRelics(ArrayList relics, ShopScreen screenInstance); 10 | } 11 | -------------------------------------------------------------------------------- /mod/src/main/java/basemod/interfaces/PostCreateStartingDeckSubscriber.java: -------------------------------------------------------------------------------- 1 | package basemod.interfaces; 2 | 3 | import com.megacrit.cardcrawl.cards.CardGroup; 4 | import com.megacrit.cardcrawl.characters.AbstractPlayer; 5 | 6 | public interface PostCreateStartingDeckSubscriber extends ISubscriber { 7 | void receivePostCreateStartingDeck(AbstractPlayer.PlayerClass chosenClass, CardGroup addCardsToMe); 8 | } 9 | -------------------------------------------------------------------------------- /mod/src/main/java/basemod/interfaces/PostCreateStartingRelicsSubscriber.java: -------------------------------------------------------------------------------- 1 | package basemod.interfaces; 2 | 3 | import com.megacrit.cardcrawl.characters.AbstractPlayer; 4 | 5 | import java.util.ArrayList; 6 | 7 | public interface PostCreateStartingRelicsSubscriber extends ISubscriber { 8 | void receivePostCreateStartingRelics(AbstractPlayer.PlayerClass chosenClass, ArrayList addRelicsToMe); 9 | } 10 | -------------------------------------------------------------------------------- /mod/src/main/java/basemod/interfaces/PostDeathSubscriber.java: -------------------------------------------------------------------------------- 1 | package basemod.interfaces; 2 | 3 | public interface PostDeathSubscriber extends ISubscriber { 4 | void receivePostDeath(); 5 | } 6 | -------------------------------------------------------------------------------- /mod/src/main/java/basemod/interfaces/PostDrawSubscriber.java: -------------------------------------------------------------------------------- 1 | package basemod.interfaces; 2 | 3 | import com.megacrit.cardcrawl.cards.AbstractCard; 4 | 5 | public interface PostDrawSubscriber extends ISubscriber { 6 | void receivePostDraw(AbstractCard c); 7 | } -------------------------------------------------------------------------------- /mod/src/main/java/basemod/interfaces/PostDungeonInitializeSubscriber.java: -------------------------------------------------------------------------------- 1 | package basemod.interfaces; 2 | 3 | public interface PostDungeonInitializeSubscriber extends ISubscriber { 4 | void receivePostDungeonInitialize(); 5 | } 6 | -------------------------------------------------------------------------------- /mod/src/main/java/basemod/interfaces/PostDungeonUpdateSubscriber.java: -------------------------------------------------------------------------------- 1 | package basemod.interfaces; 2 | 3 | public interface PostDungeonUpdateSubscriber extends ISubscriber{ 4 | void receivePostDungeonUpdate(); 5 | } 6 | -------------------------------------------------------------------------------- /mod/src/main/java/basemod/interfaces/PostEnergyRechargeSubscriber.java: -------------------------------------------------------------------------------- 1 | package basemod.interfaces; 2 | 3 | public interface PostEnergyRechargeSubscriber extends ISubscriber { 4 | void receivePostEnergyRecharge(); 5 | } -------------------------------------------------------------------------------- /mod/src/main/java/basemod/interfaces/PostExhaustSubscriber.java: -------------------------------------------------------------------------------- 1 | package basemod.interfaces; 2 | 3 | import com.megacrit.cardcrawl.cards.AbstractCard; 4 | 5 | public interface PostExhaustSubscriber extends ISubscriber { 6 | void receivePostExhaust(AbstractCard c); 7 | } 8 | -------------------------------------------------------------------------------- /mod/src/main/java/basemod/interfaces/PostInitializeSubscriber.java: -------------------------------------------------------------------------------- 1 | package basemod.interfaces; 2 | 3 | public interface PostInitializeSubscriber extends ISubscriber { 4 | void receivePostInitialize(); 5 | } -------------------------------------------------------------------------------- /mod/src/main/java/basemod/interfaces/PostPlayerUpdateSubscriber.java: -------------------------------------------------------------------------------- 1 | package basemod.interfaces; 2 | 3 | public interface PostPlayerUpdateSubscriber extends ISubscriber { 4 | void receivePostPlayerUpdate(); 5 | } 6 | -------------------------------------------------------------------------------- /mod/src/main/java/basemod/interfaces/PostPotionUseSubscriber.java: -------------------------------------------------------------------------------- 1 | package basemod.interfaces; 2 | 3 | import com.megacrit.cardcrawl.potions.AbstractPotion; 4 | 5 | public interface PostPotionUseSubscriber extends ISubscriber { 6 | void receivePostPotionUse(AbstractPotion p); 7 | } 8 | -------------------------------------------------------------------------------- /mod/src/main/java/basemod/interfaces/PostPowerApplySubscriber.java: -------------------------------------------------------------------------------- 1 | package basemod.interfaces; 2 | 3 | import com.megacrit.cardcrawl.core.AbstractCreature; 4 | import com.megacrit.cardcrawl.powers.AbstractPower; 5 | 6 | public interface PostPowerApplySubscriber extends ISubscriber { 7 | void receivePostPowerApplySubscriber(AbstractPower p, AbstractCreature target, AbstractCreature source); 8 | } 9 | -------------------------------------------------------------------------------- /mod/src/main/java/basemod/interfaces/PostRenderSubscriber.java: -------------------------------------------------------------------------------- 1 | package basemod.interfaces; 2 | 3 | import com.badlogic.gdx.graphics.g2d.SpriteBatch; 4 | 5 | public interface PostRenderSubscriber extends ISubscriber { 6 | void receivePostRender(SpriteBatch sb); 7 | } -------------------------------------------------------------------------------- /mod/src/main/java/basemod/interfaces/PostUpdateSubscriber.java: -------------------------------------------------------------------------------- 1 | package basemod.interfaces; 2 | 3 | public interface PostUpdateSubscriber extends ISubscriber { 4 | void receivePostUpdate(); 5 | } -------------------------------------------------------------------------------- /mod/src/main/java/basemod/interfaces/PotionGetSubscriber.java: -------------------------------------------------------------------------------- 1 | package basemod.interfaces; 2 | 3 | import com.megacrit.cardcrawl.potions.AbstractPotion; 4 | 5 | public interface PotionGetSubscriber extends ISubscriber { 6 | void receivePotionGet(AbstractPotion p); 7 | } 8 | -------------------------------------------------------------------------------- /mod/src/main/java/basemod/interfaces/PreDungeonUpdateSubscriber.java: -------------------------------------------------------------------------------- 1 | package basemod.interfaces; 2 | 3 | public interface PreDungeonUpdateSubscriber extends ISubscriber{ 4 | void receivePreDungeonUpdate(); 5 | } 6 | -------------------------------------------------------------------------------- /mod/src/main/java/basemod/interfaces/PreMonsterTurnSubscriber.java: -------------------------------------------------------------------------------- 1 | package basemod.interfaces; 2 | 3 | import com.megacrit.cardcrawl.monsters.AbstractMonster; 4 | 5 | public interface PreMonsterTurnSubscriber extends ISubscriber { 6 | boolean receivePreMonsterTurn(AbstractMonster m); 7 | } -------------------------------------------------------------------------------- /mod/src/main/java/basemod/interfaces/PrePlayerUpdateSubscriber.java: -------------------------------------------------------------------------------- 1 | package basemod.interfaces; 2 | 3 | public interface PrePlayerUpdateSubscriber extends ISubscriber{ 4 | void receivePrePlayerUpdate(); 5 | } 6 | -------------------------------------------------------------------------------- /mod/src/main/java/basemod/interfaces/PrePotionUseSubscriber.java: -------------------------------------------------------------------------------- 1 | package basemod.interfaces; 2 | 3 | import com.megacrit.cardcrawl.potions.AbstractPotion; 4 | 5 | public interface PrePotionUseSubscriber extends ISubscriber { 6 | void receivePrePotionUse(AbstractPotion p); 7 | } 8 | -------------------------------------------------------------------------------- /mod/src/main/java/basemod/interfaces/PreRenderSubscriber.java: -------------------------------------------------------------------------------- 1 | package basemod.interfaces; 2 | 3 | import com.badlogic.gdx.graphics.OrthographicCamera; 4 | 5 | public interface PreRenderSubscriber extends ISubscriber { 6 | void receiveCameraRender(OrthographicCamera camera); 7 | } 8 | -------------------------------------------------------------------------------- /mod/src/main/java/basemod/interfaces/PreRoomRenderSubscriber.java: -------------------------------------------------------------------------------- 1 | package basemod.interfaces; 2 | 3 | import com.badlogic.gdx.graphics.g2d.SpriteBatch; 4 | 5 | public interface PreRoomRenderSubscriber extends ISubscriber{ 6 | void receivePreRoomRender(SpriteBatch sb); 7 | } 8 | -------------------------------------------------------------------------------- /mod/src/main/java/basemod/interfaces/PreStartGameSubscriber.java: -------------------------------------------------------------------------------- 1 | package basemod.interfaces; 2 | 3 | public interface PreStartGameSubscriber extends ISubscriber { 4 | void receivePreStartGame(); 5 | } -------------------------------------------------------------------------------- /mod/src/main/java/basemod/interfaces/PreUpdateSubscriber.java: -------------------------------------------------------------------------------- 1 | package basemod.interfaces; 2 | 3 | public interface PreUpdateSubscriber extends ISubscriber { 4 | void receivePreUpdate(); 5 | } -------------------------------------------------------------------------------- /mod/src/main/java/basemod/interfaces/RelicGetSubscriber.java: -------------------------------------------------------------------------------- 1 | package basemod.interfaces; 2 | 3 | import com.megacrit.cardcrawl.relics.AbstractRelic; 4 | 5 | public interface RelicGetSubscriber extends ISubscriber { 6 | void receiveRelicGet(AbstractRelic r); 7 | } 8 | -------------------------------------------------------------------------------- /mod/src/main/java/basemod/interfaces/RenderSubscriber.java: -------------------------------------------------------------------------------- 1 | package basemod.interfaces; 2 | 3 | import com.badlogic.gdx.graphics.g2d.SpriteBatch; 4 | 5 | public interface RenderSubscriber extends ISubscriber { 6 | void receiveRender(SpriteBatch sb); 7 | } -------------------------------------------------------------------------------- /mod/src/main/java/basemod/interfaces/ScreenPostProcessor.java: -------------------------------------------------------------------------------- 1 | package basemod.interfaces; 2 | 3 | import com.badlogic.gdx.graphics.OrthographicCamera; 4 | import com.badlogic.gdx.graphics.g2d.SpriteBatch; 5 | import com.badlogic.gdx.graphics.g2d.TextureRegion; 6 | 7 | public interface ScreenPostProcessor { 8 | void postProcess(SpriteBatch sb, TextureRegion frameTexture, OrthographicCamera camera); 9 | 10 | // Lower = earlier 11 | default int priority() { 12 | return 50; 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /mod/src/main/java/basemod/interfaces/SetUnlocksSubscriber.java: -------------------------------------------------------------------------------- 1 | package basemod.interfaces; 2 | 3 | public interface SetUnlocksSubscriber extends ISubscriber { 4 | void receiveSetUnlocks(); 5 | } 6 | -------------------------------------------------------------------------------- /mod/src/main/java/basemod/interfaces/StartActSubscriber.java: -------------------------------------------------------------------------------- 1 | package basemod.interfaces; 2 | 3 | public interface StartActSubscriber extends ISubscriber { 4 | void receiveStartAct(); 5 | } 6 | -------------------------------------------------------------------------------- /mod/src/main/java/basemod/interfaces/StartGameSubscriber.java: -------------------------------------------------------------------------------- 1 | package basemod.interfaces; 2 | 3 | public interface StartGameSubscriber extends ISubscriber { 4 | void receiveStartGame(); 5 | } 6 | -------------------------------------------------------------------------------- /mod/src/main/java/basemod/interfaces/TextReceiver.java: -------------------------------------------------------------------------------- 1 | package basemod.interfaces; 2 | 3 | public interface TextReceiver { 4 | String getCurrentText(); 5 | void setText(String updatedText); 6 | boolean isDone(); 7 | 8 | //If you need additional input for extra functionality. 9 | default boolean onKeyDown(int keycode) { return false; } 10 | default boolean onKeyUp(int keycode) { return false; } 11 | 12 | //Return true to absorb the input. Otherwise, these characters will be added to the text. 13 | default boolean onPushEnter() { return true; } 14 | default boolean onPushTab() { return true; } 15 | default boolean onPushBackspace() { return false; } 16 | 17 | boolean acceptCharacter(char c); //recommended to return "font.getData().hasGlyph(character)" to make sure it's a character that will be displayed properly. 18 | //Can also be used to just process certain characters as other input. 19 | default String getAppendedText(char c) { return String.valueOf(c); } //allows changing what is actually typed when characters are input 20 | 21 | default int getCharLimit() { return -1; } //no limit 22 | } -------------------------------------------------------------------------------- /mod/src/main/java/basemod/interfaces/XCostModifier.java: -------------------------------------------------------------------------------- 1 | package basemod.interfaces; 2 | 3 | import com.megacrit.cardcrawl.cards.AbstractCard; 4 | 5 | public interface XCostModifier { 6 | int modifyX(AbstractCard c); 7 | 8 | default boolean xCostModifierActive(AbstractCard c) { 9 | return true; 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /mod/src/main/java/basemod/patches/com/megacrit/cardcrawl/actions/GameActionManager/NoFadeLimbo.java: -------------------------------------------------------------------------------- 1 | package basemod.patches.com.megacrit.cardcrawl.actions.GameActionManager; 2 | 3 | import basemod.BaseMod; 4 | import com.evacipated.cardcrawl.modthespire.lib.*; 5 | import com.evacipated.cardcrawl.modthespire.patcher.PatchingException; 6 | import com.megacrit.cardcrawl.actions.GameActionManager; 7 | import com.megacrit.cardcrawl.characters.AbstractPlayer; 8 | import javassist.CannotCompileException; 9 | import javassist.CtBehavior; 10 | 11 | @SpirePatch( 12 | clz = GameActionManager.class, 13 | method = "cleanCardQueue" 14 | ) 15 | public class NoFadeLimbo { 16 | @SpireInsertPatch( 17 | locator = Locator.class 18 | ) 19 | public static SpireReturn youCanStillRemoveTheCardsInHandThough(GameActionManager __instance) { 20 | if (BaseMod.fixesEnabled) 21 | return SpireReturn.Return(); 22 | return SpireReturn.Continue(); 23 | } 24 | 25 | private static class Locator extends SpireInsertLocator 26 | { 27 | public int[] Locate(CtBehavior ctMethodToPatch) throws CannotCompileException, PatchingException 28 | { 29 | Matcher finalMatcher = new Matcher.FieldAccessMatcher(AbstractPlayer.class, "limbo"); 30 | 31 | return LineFinder.findInOrder(ctMethodToPatch, finalMatcher); 32 | } 33 | } 34 | } 35 | -------------------------------------------------------------------------------- /mod/src/main/java/basemod/patches/com/megacrit/cardcrawl/actions/GameActionManager/PreMonsterTurnHook.java: -------------------------------------------------------------------------------- 1 | package basemod.patches.com.megacrit.cardcrawl.actions.GameActionManager; 2 | 3 | import com.evacipated.cardcrawl.modthespire.lib.SpirePatch; 4 | import javassist.CannotCompileException; 5 | import javassist.expr.ExprEditor; 6 | import javassist.expr.MethodCall; 7 | 8 | @SpirePatch(cls="com.megacrit.cardcrawl.actions.GameActionManager", method="getNextAction") 9 | public class PreMonsterTurnHook { 10 | public static ExprEditor Instrument() { 11 | return new ExprEditor() { 12 | public void edit(MethodCall m) throws CannotCompileException { 13 | if (m.getClassName().equals("com.megacrit.cardcrawl.monsters.AbstractMonster") && m.getMethodName().equals("takeTurn")) { 14 | m.replace("{ if (basemod.BaseMod.publishPreMonsterTurn(m)) { $proceed(); } }"); 15 | } 16 | } 17 | }; 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /mod/src/main/java/basemod/patches/com/megacrit/cardcrawl/actions/common/ApplyPowerAction/ApplyPowerActionPostPowerApplyHook.java: -------------------------------------------------------------------------------- 1 | package basemod.patches.com.megacrit.cardcrawl.actions.common.ApplyPowerAction; 2 | 3 | import basemod.BaseMod; 4 | import com.evacipated.cardcrawl.modthespire.lib.SpireInsertPatch; 5 | import com.evacipated.cardcrawl.modthespire.lib.SpirePatch; 6 | import com.megacrit.cardcrawl.actions.common.ApplyPowerAction; 7 | import com.megacrit.cardcrawl.core.AbstractCreature; 8 | import com.megacrit.cardcrawl.powers.AbstractPower; 9 | 10 | @SpirePatch(cls="com.megacrit.cardcrawl.actions.common.ApplyPowerAction", method="update") 11 | public class ApplyPowerActionPostPowerApplyHook { 12 | @SpireInsertPatch(rloc=6,localvars= {"powerToApply","target","source"}) 13 | public static void Insert(ApplyPowerAction apa, AbstractPower powerToApply, AbstractCreature target, AbstractCreature source) { 14 | BaseMod.publishPostPowerApply(powerToApply, target, source);; 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /mod/src/main/java/basemod/patches/com/megacrit/cardcrawl/audio/SoundMaster/AddAudio.java: -------------------------------------------------------------------------------- 1 | package basemod.patches.com.megacrit.cardcrawl.audio.SoundMaster; 2 | 3 | import basemod.BaseMod; 4 | import com.evacipated.cardcrawl.modthespire.lib.SpirePatch; 5 | import com.megacrit.cardcrawl.audio.SoundMaster; 6 | 7 | @SpirePatch( 8 | clz=SoundMaster.class, 9 | method=SpirePatch.CONSTRUCTOR 10 | ) 11 | public class AddAudio { 12 | public static void Postfix(SoundMaster __obj_instance) { 13 | BaseMod.publishAddAudio(__obj_instance); 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /mod/src/main/java/basemod/patches/com/megacrit/cardcrawl/cards/CardGroup/CardPlayableMonsterNullCrashFix.java: -------------------------------------------------------------------------------- 1 | package basemod.patches.com.megacrit.cardcrawl.cards.CardGroup; 2 | 3 | import basemod.BaseMod; 4 | import com.evacipated.cardcrawl.modthespire.Loader; 5 | import com.evacipated.cardcrawl.modthespire.lib.SpirePatch2; 6 | import com.evacipated.cardcrawl.modthespire.lib.SpirePrefixPatch; 7 | import com.evacipated.cardcrawl.modthespire.lib.SpireReturn; 8 | import com.megacrit.cardcrawl.cards.CardGroup; 9 | import com.megacrit.cardcrawl.dungeons.AbstractDungeon; 10 | 11 | //Under certain circumstances CardGroup:RefreshHandLayout is called when the player is out of combat which causes a crash when glowCheck calls c.triggerOnGlowCheck() which calls c.canUse() which calls c.cardPlayable(m) whose if statement crashes if monsters is null 12 | @SpirePatch2(clz = CardGroup.class, method = "glowCheck") 13 | public class CardPlayableMonsterNullCrashFix { 14 | @SpirePrefixPatch 15 | public static SpireReturn patch() { 16 | if(AbstractDungeon.getMonsters() == null) { 17 | if(Loader.DEBUG) { 18 | BaseMod.logger.warn("cardPlayable crash has been averted."); 19 | } 20 | return SpireReturn.Return(); 21 | } 22 | 23 | return SpireReturn.Continue(); 24 | } 25 | } 26 | -------------------------------------------------------------------------------- /mod/src/main/java/basemod/patches/com/megacrit/cardcrawl/cards/CardGroup/ModalExhaustFix.java: -------------------------------------------------------------------------------- 1 | package basemod.patches.com.megacrit.cardcrawl.cards.CardGroup; 2 | 3 | import basemod.BaseMod; 4 | import com.evacipated.cardcrawl.modthespire.lib.SpirePatch; 5 | import com.megacrit.cardcrawl.cards.AbstractCard; 6 | import com.megacrit.cardcrawl.cards.CardGroup; 7 | import javassist.CannotCompileException; 8 | import javassist.CtBehavior; 9 | 10 | @SpirePatch( 11 | cls="com.megacrit.cardcrawl.cards.CardGroup", 12 | method="moveToExhaustPile" 13 | ) 14 | public class ModalExhaustFix 15 | { 16 | public static void Raw(CtBehavior ctMethodToPatch) throws CannotCompileException 17 | { 18 | String src = 19 | "if (basemod.BaseMod.modalChoiceScreen.isOpen) {" + 20 | "basemod.patches.com.megacrit.cardcrawl.cards.CardGroup.ModalExhaustFix.Nested.Delay($0, $1);" + 21 | "return;" + 22 | "}"; 23 | ctMethodToPatch.insertBefore(src); 24 | } 25 | 26 | public static class Nested { 27 | public static void Delay(CardGroup __instance, AbstractCard card) { 28 | BaseMod.modalChoiceScreen.delayExhaust(__instance, card); 29 | } 30 | } 31 | } 32 | -------------------------------------------------------------------------------- /mod/src/main/java/basemod/patches/com/megacrit/cardcrawl/cards/CardGroup/MoveToExhaustPileHook.java: -------------------------------------------------------------------------------- 1 | package basemod.patches.com.megacrit.cardcrawl.cards.CardGroup; 2 | 3 | import basemod.BaseMod; 4 | import com.evacipated.cardcrawl.modthespire.lib.SpireInsertPatch; 5 | import com.evacipated.cardcrawl.modthespire.lib.SpirePatch; 6 | import com.megacrit.cardcrawl.cards.AbstractCard; 7 | 8 | @SpirePatch(cls="com.megacrit.cardcrawl.cards.CardGroup", method="moveToExhaustPile") 9 | public class MoveToExhaustPileHook { 10 | @SpireInsertPatch(rloc=6) 11 | public static void Insert(Object __obj_instance, Object cObj) { 12 | BaseMod.publishPostExhaust((AbstractCard) cObj); 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /mod/src/main/java/basemod/patches/com/megacrit/cardcrawl/cards/CardGroup/WithoutBottledCardsPatch.java: -------------------------------------------------------------------------------- 1 | package basemod.patches.com.megacrit.cardcrawl.cards.CardGroup; 2 | 3 | import basemod.BaseMod; 4 | import basemod.Pair; 5 | import com.evacipated.cardcrawl.modthespire.lib.SpirePatch; 6 | import com.megacrit.cardcrawl.cards.AbstractCard; 7 | import com.megacrit.cardcrawl.cards.CardGroup; 8 | import com.megacrit.cardcrawl.relics.AbstractRelic; 9 | 10 | import java.util.function.Predicate; 11 | 12 | @SpirePatch( 13 | clz=CardGroup.class, 14 | method="getGroupWithoutBottledCards" 15 | ) 16 | public class WithoutBottledCardsPatch 17 | { 18 | public static CardGroup Postfix(CardGroup __result, CardGroup group) 19 | { 20 | for (Pair, AbstractRelic> info : BaseMod.getBottledRelicList()) { 21 | __result.group.removeIf(info.getKey()); 22 | } 23 | 24 | return __result; 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /mod/src/main/java/basemod/patches/com/megacrit/cardcrawl/cards/FixExpungerDescription.java: -------------------------------------------------------------------------------- 1 | package basemod.patches.com.megacrit.cardcrawl.cards; 2 | 3 | import com.evacipated.cardcrawl.modthespire.lib.SpirePatch; 4 | import com.megacrit.cardcrawl.cards.AbstractCard; 5 | import com.megacrit.cardcrawl.cards.tempCards.Expunger; 6 | 7 | @SpirePatch( 8 | clz = Expunger.class, 9 | method = "makeStatEquivalentCopy" 10 | ) 11 | public class FixExpungerDescription 12 | { 13 | public static AbstractCard Postfix(AbstractCard __result, Expunger __instance) 14 | { 15 | __result.rawDescription = __instance.rawDescription; 16 | return __result; 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /mod/src/main/java/basemod/patches/com/megacrit/cardcrawl/cards/TagBasicCards.java: -------------------------------------------------------------------------------- 1 | package basemod.patches.com.megacrit.cardcrawl.cards; 2 | 3 | import basemod.helpers.BaseModCardTags; 4 | import com.evacipated.cardcrawl.modthespire.lib.SpirePatch; 5 | import com.megacrit.cardcrawl.cards.AbstractCard; 6 | import com.megacrit.cardcrawl.cards.blue.EchoForm; 7 | import com.megacrit.cardcrawl.cards.green.WraithForm; 8 | import com.megacrit.cardcrawl.cards.purple.DevaForm; 9 | import com.megacrit.cardcrawl.cards.red.DemonForm; 10 | 11 | public class TagBasicCards 12 | { 13 | @SpirePatch( 14 | clz=DemonForm.class, 15 | method=SpirePatch.CONSTRUCTOR 16 | ) 17 | @SpirePatch( 18 | clz=WraithForm.class, 19 | method=SpirePatch.CONSTRUCTOR 20 | ) 21 | @SpirePatch( 22 | clz=EchoForm.class, 23 | method=SpirePatch.CONSTRUCTOR 24 | ) 25 | @SpirePatch( 26 | clz=DevaForm.class, 27 | method=SpirePatch.CONSTRUCTOR 28 | ) 29 | public static class Forms 30 | { 31 | public static void Postfix(AbstractCard __instance) 32 | { 33 | __instance.tags.add(BaseModCardTags.FORM); 34 | } 35 | } 36 | } 37 | -------------------------------------------------------------------------------- /mod/src/main/java/basemod/patches/com/megacrit/cardcrawl/characters/AbstractPlayer/GiveOrbSlotOnChannel.java: -------------------------------------------------------------------------------- 1 | package basemod.patches.com.megacrit.cardcrawl.characters.AbstractPlayer; 2 | 3 | import basemod.BaseMod; 4 | import com.evacipated.cardcrawl.modthespire.lib.SpirePatch; 5 | import com.megacrit.cardcrawl.characters.AbstractPlayer; 6 | import com.megacrit.cardcrawl.orbs.AbstractOrb; 7 | 8 | @SpirePatch( 9 | clz=AbstractPlayer.class, 10 | method="channelOrb" 11 | ) 12 | public class GiveOrbSlotOnChannel 13 | { 14 | public static void Prefix(AbstractPlayer __instance, AbstractOrb orbToSet) 15 | { 16 | if (BaseMod.fixesEnabled && __instance.masterMaxOrbs == 0 && __instance.maxOrbs == 0) { 17 | __instance.masterMaxOrbs = 1; 18 | __instance.increaseMaxOrbSlots(1, true); 19 | } 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /mod/src/main/java/basemod/patches/com/megacrit/cardcrawl/characters/AbstractPlayer/HasRelicModID.java: -------------------------------------------------------------------------------- 1 | package basemod.patches.com.megacrit.cardcrawl.characters.AbstractPlayer; 2 | 3 | import basemod.BaseMod; 4 | import com.evacipated.cardcrawl.modthespire.lib.ByRef; 5 | import com.evacipated.cardcrawl.modthespire.lib.SpirePatch; 6 | import com.megacrit.cardcrawl.characters.AbstractPlayer; 7 | import com.megacrit.cardcrawl.relics.Circlet; 8 | 9 | @SpirePatch( 10 | cls="com.megacrit.cardcrawl.characters.AbstractPlayer", 11 | method="hasRelic" 12 | ) 13 | public class HasRelicModID 14 | { 15 | public static void Prefix(AbstractPlayer __instance, @ByRef String[] targetID) 16 | { 17 | if (!targetID[0].equals(Circlet.ID) && !BaseMod.hasModID(targetID[0])) { 18 | targetID[0] = BaseMod.convertToModID(targetID[0]); 19 | } 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /mod/src/main/java/basemod/patches/com/megacrit/cardcrawl/characters/AbstractPlayer/PlayerUpdateHooks.java: -------------------------------------------------------------------------------- 1 | package basemod.patches.com.megacrit.cardcrawl.characters.AbstractPlayer; 2 | 3 | import basemod.BaseMod; 4 | import com.evacipated.cardcrawl.modthespire.lib.SpirePatch; 5 | import com.megacrit.cardcrawl.characters.AbstractPlayer; 6 | 7 | @SpirePatch(cls = "com.megacrit.cardcrawl.characters.AbstractPlayer", method = "update") 8 | public class PlayerUpdateHooks { 9 | public static void Prefix(AbstractPlayer __instance) { 10 | BaseMod.publishPrePlayerUpdate(); 11 | } 12 | 13 | public static void Postfix(AbstractPlayer __instance) { 14 | BaseMod.publishPostPlayerUpdate(); 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /mod/src/main/java/basemod/patches/com/megacrit/cardcrawl/characters/AbstractPlayer/PostDrawHook.java: -------------------------------------------------------------------------------- 1 | package basemod.patches.com.megacrit.cardcrawl.characters.AbstractPlayer; 2 | 3 | import basemod.BaseMod; 4 | import com.evacipated.cardcrawl.modthespire.lib.*; 5 | import com.megacrit.cardcrawl.cards.AbstractCard; 6 | import com.megacrit.cardcrawl.characters.AbstractPlayer; 7 | import javassist.CtBehavior; 8 | 9 | @SpirePatch( 10 | clz=AbstractPlayer.class, 11 | method="draw", 12 | paramtypez={ 13 | int.class 14 | } 15 | ) 16 | public class PostDrawHook 17 | { 18 | @SpireInsertPatch( 19 | locator=Locator.class, 20 | localvars={"c"} 21 | ) 22 | public static void Insert(AbstractPlayer __instance, int numCards, AbstractCard c) 23 | { 24 | BaseMod.publishPostDraw(c); 25 | } 26 | 27 | private static class Locator extends SpireInsertLocator 28 | { 29 | @Override 30 | public int[] Locate(CtBehavior ctMethodToPatch) throws Exception 31 | { 32 | Matcher finalMatcher = new Matcher.FieldAccessMatcher(AbstractPlayer.class, "relics"); 33 | return LineFinder.findInOrder(ctMethodToPatch, finalMatcher); 34 | } 35 | } 36 | } 37 | -------------------------------------------------------------------------------- /mod/src/main/java/basemod/patches/com/megacrit/cardcrawl/characters/AbstractPlayer/PostInitializeStarterDeckHookSwitch.java: -------------------------------------------------------------------------------- 1 | package basemod.patches.com.megacrit.cardcrawl.characters.AbstractPlayer; 2 | 3 | import basemod.BaseMod; 4 | import com.evacipated.cardcrawl.modthespire.lib.SpirePatch; 5 | import com.megacrit.cardcrawl.characters.AbstractPlayer; 6 | 7 | @SpirePatch( 8 | clz=AbstractPlayer.class, 9 | method="initializeStarterDeck" 10 | ) 11 | public class PostInitializeStarterDeckHookSwitch 12 | { 13 | public static void Postfix(AbstractPlayer __instance) 14 | { 15 | BaseMod.publishPostCreateStartingDeck(__instance.chosenClass, __instance.masterDeck); 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /mod/src/main/java/basemod/patches/com/megacrit/cardcrawl/characters/AbstractPlayer/PostInitializeStarterRelicsHookSwitch.java: -------------------------------------------------------------------------------- 1 | package basemod.patches.com.megacrit.cardcrawl.characters.AbstractPlayer; 2 | 3 | import basemod.BaseMod; 4 | import com.evacipated.cardcrawl.modthespire.lib.ByRef; 5 | import com.evacipated.cardcrawl.modthespire.lib.SpireInsertPatch; 6 | import com.evacipated.cardcrawl.modthespire.lib.SpirePatch; 7 | import com.megacrit.cardcrawl.characters.AbstractPlayer; 8 | import com.megacrit.cardcrawl.characters.AbstractPlayer.PlayerClass; 9 | 10 | import java.util.ArrayList; 11 | 12 | @SpirePatch( 13 | clz=AbstractPlayer.class, 14 | method="initializeStarterRelics", 15 | paramtypez={ 16 | PlayerClass.class 17 | } 18 | ) 19 | public class PostInitializeStarterRelicsHookSwitch 20 | { 21 | @SpireInsertPatch( 22 | rloc=14, 23 | localvars={"relics"} 24 | ) 25 | public static void Insert(AbstractPlayer __instance, PlayerClass chosenClass, @ByRef ArrayList[] relics) { 26 | BaseMod.publishPostCreateStartingRelics(chosenClass, relics[0]); 27 | } 28 | } 29 | -------------------------------------------------------------------------------- /mod/src/main/java/basemod/patches/com/megacrit/cardcrawl/characters/AbstractPlayer/SeenEvents.java: -------------------------------------------------------------------------------- 1 | package basemod.patches.com.megacrit.cardcrawl.characters.AbstractPlayer; 2 | 3 | import com.evacipated.cardcrawl.modthespire.lib.SpireField; 4 | import com.evacipated.cardcrawl.modthespire.lib.SpirePatch; 5 | import com.megacrit.cardcrawl.characters.AbstractPlayer; 6 | 7 | import java.util.HashSet; 8 | 9 | @SpirePatch( 10 | clz = AbstractPlayer.class, 11 | method = SpirePatch.CLASS 12 | ) 13 | public class SeenEvents { 14 | public static SpireField> seenEvents = new SpireField<>(HashSet::new); 15 | } 16 | -------------------------------------------------------------------------------- /mod/src/main/java/basemod/patches/com/megacrit/cardcrawl/characters/AbstractPlayer/TurnStartHooks.java: -------------------------------------------------------------------------------- 1 | package basemod.patches.com.megacrit.cardcrawl.characters.AbstractPlayer; 2 | 3 | import basemod.BaseMod; 4 | import com.evacipated.cardcrawl.modthespire.lib.SpirePatch2; 5 | import com.megacrit.cardcrawl.characters.AbstractPlayer; 6 | 7 | public class TurnStartHooks 8 | { 9 | @SpirePatch2( 10 | clz = AbstractPlayer.class, 11 | method = "applyStartOfTurnRelics" 12 | ) 13 | public static class PreDraw 14 | { 15 | public static void Prefix() 16 | { 17 | BaseMod.publishOnPlayerTurnStart(); 18 | } 19 | } 20 | 21 | @SpirePatch2( 22 | clz = AbstractPlayer.class, 23 | method = "applyStartOfTurnPostDrawRelics" 24 | ) 25 | public static class PostDraw 26 | { 27 | public static void Prefix() 28 | { 29 | BaseMod.publishOnPlayerTurnStartPostDraw(); 30 | } 31 | } 32 | } 33 | -------------------------------------------------------------------------------- /mod/src/main/java/basemod/patches/com/megacrit/cardcrawl/characters/AbstractPlayer/UseCardModalComplete.java: -------------------------------------------------------------------------------- 1 | package basemod.patches.com.megacrit.cardcrawl.characters.AbstractPlayer; 2 | 3 | import basemod.BaseMod; 4 | import com.evacipated.cardcrawl.modthespire.lib.SpirePatch; 5 | import com.megacrit.cardcrawl.cards.AbstractCard; 6 | import com.megacrit.cardcrawl.characters.AbstractPlayer; 7 | import com.megacrit.cardcrawl.dungeons.AbstractDungeon; 8 | import com.megacrit.cardcrawl.monsters.AbstractMonster; 9 | 10 | @SpirePatch( 11 | cls="com.megacrit.cardcrawl.characters.AbstractPlayer", 12 | method="useCard" 13 | ) 14 | public class UseCardModalComplete 15 | { 16 | public static void Prefix(AbstractPlayer __instance, AbstractCard c, AbstractMonster monster, int energyOnUse) 17 | { 18 | if (BaseMod.modalChoiceScreen.isOpen) { 19 | AbstractDungeon.player.cardsPlayedThisTurn -= 1; 20 | AbstractDungeon.actionManager.cardsPlayedThisCombat.remove(AbstractDungeon.actionManager.cardsPlayedThisCombat.size() - 1); 21 | 22 | BaseMod.modalChoiceScreen.close(); 23 | } 24 | } 25 | } 26 | -------------------------------------------------------------------------------- /mod/src/main/java/basemod/patches/com/megacrit/cardcrawl/characters/FixWatcherVisualScale.java: -------------------------------------------------------------------------------- 1 | package basemod.patches.com.megacrit.cardcrawl.characters; 2 | 3 | import com.evacipated.cardcrawl.modthespire.lib.SpireInstrumentPatch; 4 | import com.evacipated.cardcrawl.modthespire.lib.SpirePatch2; 5 | import com.megacrit.cardcrawl.characters.Watcher; 6 | import com.megacrit.cardcrawl.core.Settings; 7 | import javassist.CannotCompileException; 8 | import javassist.expr.ExprEditor; 9 | import javassist.expr.FieldAccess; 10 | 11 | @SpirePatch2( 12 | clz = Watcher.class, 13 | method = "loadEyeAnimation" 14 | ) 15 | public class FixWatcherVisualScale 16 | { 17 | @SpireInstrumentPatch 18 | public static ExprEditor instrument() 19 | { 20 | return new ExprEditor() { 21 | @Override 22 | public void edit(FieldAccess f) throws CannotCompileException 23 | { 24 | if (f.isReader() && f.getClassName().equals(Settings.class.getName()) && f.getFieldName().equals("scale")) { 25 | f.replace("$_ = " + Settings.class.getName() + ".renderScale;"); 26 | } 27 | } 28 | }; 29 | } 30 | } 31 | -------------------------------------------------------------------------------- /mod/src/main/java/basemod/patches/com/megacrit/cardcrawl/core/AbstractCreature/ModifyPlayerLoseBlock.java: -------------------------------------------------------------------------------- 1 | package basemod.patches.com.megacrit.cardcrawl.core.AbstractCreature; 2 | 3 | import basemod.BaseMod; 4 | import basemod.patches.com.megacrit.cardcrawl.actions.GameActionManager.OnPlayerLoseBlockToggle; 5 | import com.evacipated.cardcrawl.modthespire.lib.ByRef; 6 | import com.evacipated.cardcrawl.modthespire.lib.SpirePatch; 7 | import com.megacrit.cardcrawl.core.AbstractCreature; 8 | 9 | @SpirePatch( 10 | clz=AbstractCreature.class, 11 | method="loseBlock", 12 | paramtypez={ 13 | int.class, 14 | boolean.class 15 | } 16 | ) 17 | public class ModifyPlayerLoseBlock 18 | { 19 | public static void Prefix(AbstractCreature __instance, @ByRef int[] amount, boolean noAnimation) 20 | { 21 | if (OnPlayerLoseBlockToggle.isEnabled) { 22 | amount[0] = BaseMod.publishOnPlayerLoseBlock(amount[0]); 23 | } 24 | if (amount[0] < 0) { 25 | amount[0] = 0; 26 | } 27 | } 28 | } 29 | -------------------------------------------------------------------------------- /mod/src/main/java/basemod/patches/com/megacrit/cardcrawl/core/CardCrawlGame/EditCharactersHook.java: -------------------------------------------------------------------------------- 1 | package basemod.patches.com.megacrit.cardcrawl.core.CardCrawlGame; 2 | 3 | import basemod.BaseMod; 4 | import com.evacipated.cardcrawl.modthespire.lib.*; 5 | import com.megacrit.cardcrawl.core.CardCrawlGame; 6 | import com.megacrit.cardcrawl.screens.splash.SplashScreen; 7 | import javassist.CtBehavior; 8 | 9 | @SpirePatch( 10 | clz=CardCrawlGame.class, 11 | method="create" 12 | ) 13 | public class EditCharactersHook 14 | { 15 | @SpireInsertPatch( 16 | locator=Locator.class 17 | ) 18 | public static void Insert(CardCrawlGame __instance) 19 | { 20 | BaseMod.publishEditCharacters(); 21 | } 22 | 23 | private static class Locator extends SpireInsertLocator 24 | { 25 | @Override 26 | public int[] Locate(CtBehavior ctMethodToPatch) throws Exception 27 | { 28 | Matcher finalMatcher = new Matcher.NewExprMatcher(SplashScreen.class); 29 | return LineFinder.findInOrder(ctMethodToPatch, finalMatcher); 30 | } 31 | } 32 | } 33 | -------------------------------------------------------------------------------- /mod/src/main/java/basemod/patches/com/megacrit/cardcrawl/core/CardCrawlGame/PreStartGameHook.java: -------------------------------------------------------------------------------- 1 | package basemod.patches.com.megacrit.cardcrawl.core.CardCrawlGame; 2 | 3 | import basemod.BaseMod; 4 | import com.evacipated.cardcrawl.modthespire.lib.SpirePatch; 5 | import com.megacrit.cardcrawl.characters.AbstractPlayer; 6 | import com.megacrit.cardcrawl.core.CardCrawlGame; 7 | import com.megacrit.cardcrawl.dungeons.AbstractDungeon; 8 | 9 | @SpirePatch( 10 | clz=CardCrawlGame.class, 11 | method="createCharacter" 12 | ) 13 | public class PreStartGameHook 14 | { 15 | public static void Prefix(AbstractPlayer.PlayerClass selection) { 16 | AbstractDungeon.victoryScreen = null; 17 | BaseMod.publishPreStartGame(); 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /mod/src/main/java/basemod/patches/com/megacrit/cardcrawl/core/EnergyManager/PostEnergyRechargeHook.java: -------------------------------------------------------------------------------- 1 | package basemod.patches.com.megacrit.cardcrawl.core.EnergyManager; 2 | 3 | import basemod.BaseMod; 4 | import com.evacipated.cardcrawl.modthespire.lib.*; 5 | import com.megacrit.cardcrawl.actions.GameActionManager; 6 | import com.megacrit.cardcrawl.audio.SoundMaster; 7 | import com.megacrit.cardcrawl.core.EnergyManager; 8 | import javassist.CtBehavior; 9 | 10 | @SpirePatch( 11 | clz=EnergyManager.class, 12 | method="recharge" 13 | ) 14 | public class PostEnergyRechargeHook 15 | { 16 | @SpireInsertPatch( 17 | locator=Locator.class 18 | ) 19 | public static void Insert(EnergyManager __instance) 20 | { 21 | BaseMod.publishPostEnergyRecharge(); 22 | } 23 | 24 | private static class Locator extends SpireInsertLocator 25 | { 26 | @Override 27 | public int[] Locate(CtBehavior ctMethodToPatch) throws Exception 28 | { 29 | Matcher finalMatcher = new Matcher.MethodCallMatcher(GameActionManager.class, "updateEnergyGain"); 30 | return LineFinder.findInOrder(ctMethodToPatch, finalMatcher); 31 | } 32 | } 33 | } 34 | -------------------------------------------------------------------------------- /mod/src/main/java/basemod/patches/com/megacrit/cardcrawl/cutscenes/Cutscene/CustomVictoryEffects.java: -------------------------------------------------------------------------------- 1 | package basemod.patches.com.megacrit.cardcrawl.cutscenes.Cutscene; 2 | 3 | import basemod.BaseMod; 4 | import basemod.abstracts.CustomPlayer; 5 | import com.evacipated.cardcrawl.modthespire.lib.SpirePatch; 6 | import com.megacrit.cardcrawl.dungeons.AbstractDungeon; 7 | import com.megacrit.cardcrawl.screens.VictoryScreen; 8 | import com.megacrit.cardcrawl.vfx.AbstractGameEffect; 9 | 10 | import java.lang.reflect.Field; 11 | import java.util.ArrayList; 12 | 13 | @SpirePatch( 14 | clz=VictoryScreen.class, 15 | method="updateVfx" 16 | ) 17 | public class CustomVictoryEffects 18 | { 19 | public static void Postfix(VictoryScreen __instance) 20 | { 21 | if (!BaseMod.isBaseGameCharacter(AbstractDungeon.player.chosenClass)) { 22 | if (AbstractDungeon.player instanceof CustomPlayer) { 23 | try { 24 | Field f = VictoryScreen.class.getDeclaredField("effect"); 25 | f.setAccessible(true); 26 | 27 | ArrayList effects = (ArrayList) f.get(__instance); 28 | ((CustomPlayer) AbstractDungeon.player).updateVictoryVfx(effects); 29 | } catch (IllegalAccessException | NoSuchFieldException e) { 30 | e.printStackTrace(); 31 | } 32 | } 33 | } 34 | } 35 | } 36 | -------------------------------------------------------------------------------- /mod/src/main/java/basemod/patches/com/megacrit/cardcrawl/dungeons/AbstractDungeon/DungeonUpdateHooks.java: -------------------------------------------------------------------------------- 1 | package basemod.patches.com.megacrit.cardcrawl.dungeons.AbstractDungeon; 2 | 3 | import basemod.BaseMod; 4 | import com.evacipated.cardcrawl.modthespire.lib.SpirePatch; 5 | import com.megacrit.cardcrawl.dungeons.AbstractDungeon; 6 | 7 | @SpirePatch(cls = "com.megacrit.cardcrawl.dungeons.AbstractDungeon", method = "update") 8 | public class DungeonUpdateHooks { 9 | public static void Prefix(AbstractDungeon __instance) { 10 | BaseMod.publishPreDungeonUpdate(); 11 | } 12 | 13 | public static void Postfix(AbstractDungeon __instance) { 14 | BaseMod.publishPostDungeonUpdate(); 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /mod/src/main/java/basemod/patches/com/megacrit/cardcrawl/dungeons/AbstractDungeon/FixDiscoveryLogSpam.java: -------------------------------------------------------------------------------- 1 | package basemod.patches.com.megacrit.cardcrawl.dungeons.AbstractDungeon; 2 | 3 | import com.evacipated.cardcrawl.modthespire.lib.SpirePatch; 4 | import com.megacrit.cardcrawl.cards.AbstractCard; 5 | import com.megacrit.cardcrawl.dungeons.AbstractDungeon; 6 | import com.megacrit.cardcrawl.unlock.UnlockTracker; 7 | import javassist.CannotCompileException; 8 | import javassist.expr.ExprEditor; 9 | import javassist.expr.MethodCall; 10 | 11 | @SpirePatch( 12 | clz = AbstractDungeon.class, 13 | method = "returnTrulyRandomCardInCombat", 14 | paramtypez = {} 15 | ) 16 | public class FixDiscoveryLogSpam 17 | { 18 | public static ExprEditor Instrument() 19 | { 20 | return new ExprEditor() { 21 | @Override 22 | public void edit(MethodCall m) throws CannotCompileException 23 | { 24 | if (m.getClassName().equals(UnlockTracker.class.getName()) && m.getMethodName().equals("markCardAsSeen")) { 25 | m.replace(""); 26 | } 27 | } 28 | }; 29 | } 30 | 31 | public static AbstractCard Postfix(AbstractCard __result) 32 | { 33 | UnlockTracker.markCardAsSeen(__result.cardID); 34 | return __result; 35 | } 36 | } 37 | -------------------------------------------------------------------------------- /mod/src/main/java/basemod/patches/com/megacrit/cardcrawl/dungeons/AbstractDungeon/FixLogging.java: -------------------------------------------------------------------------------- 1 | package basemod.patches.com.megacrit.cardcrawl.dungeons.AbstractDungeon; 2 | 3 | public class FixLogging 4 | { 5 | //Makes it possible to prefix/postfix patch these methods instead of making the default branch almost impossible to patch 6 | public static void unknownScreenUpdate() { 7 | 8 | } 9 | public static void unknownScreenRender() { 10 | 11 | } 12 | 13 | public static void unknownScreenClose() { 14 | 15 | } 16 | } -------------------------------------------------------------------------------- /mod/src/main/java/basemod/patches/com/megacrit/cardcrawl/dungeons/AbstractDungeon/NoPools.java: -------------------------------------------------------------------------------- 1 | package basemod.patches.com.megacrit.cardcrawl.dungeons.AbstractDungeon; 2 | 3 | import java.lang.annotation.ElementType; 4 | import java.lang.annotation.Retention; 5 | import java.lang.annotation.RetentionPolicy; 6 | import java.lang.annotation.Target; 7 | 8 | @Target({ElementType.TYPE}) 9 | @Retention(RetentionPolicy.RUNTIME) 10 | public @interface NoPools {} 11 | -------------------------------------------------------------------------------- /mod/src/main/java/basemod/patches/com/megacrit/cardcrawl/dungeons/AbstractDungeon/PostDungeonInitializeHook.java: -------------------------------------------------------------------------------- 1 | package basemod.patches.com.megacrit.cardcrawl.dungeons.AbstractDungeon; 2 | 3 | import basemod.BaseMod; 4 | import com.evacipated.cardcrawl.modthespire.lib.SpirePatch; 5 | 6 | @SpirePatch(cls="com.megacrit.cardcrawl.dungeons.AbstractDungeon", method="initializeRelicList") 7 | public class PostDungeonInitializeHook { 8 | public static void Postfix(Object __obj_instance) { 9 | BaseMod.publishPostDungeonInitialize(); 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /mod/src/main/java/basemod/patches/com/megacrit/cardcrawl/dungeons/AbstractDungeon/PowersModified.java: -------------------------------------------------------------------------------- 1 | package basemod.patches.com.megacrit.cardcrawl.dungeons.AbstractDungeon; 2 | 3 | import basemod.BaseMod; 4 | import com.evacipated.cardcrawl.modthespire.lib.SpirePatch; 5 | 6 | @SpirePatch(cls="com.megacrit.cardcrawl.dungeons.AbstractDungeon", method="onModifyPower") 7 | public class PowersModified { 8 | 9 | public static void Postfix() { 10 | BaseMod.publishOnPowersModified(); 11 | } 12 | 13 | } 14 | -------------------------------------------------------------------------------- /mod/src/main/java/basemod/patches/com/megacrit/cardcrawl/events/AbstractEvent/AdditionalEventParameters.java: -------------------------------------------------------------------------------- 1 | package basemod.patches.com.megacrit.cardcrawl.events.AbstractEvent; 2 | 3 | import basemod.eventUtil.AddEventParams; 4 | import com.evacipated.cardcrawl.modthespire.lib.SpireField; 5 | import com.evacipated.cardcrawl.modthespire.lib.SpirePatch; 6 | import com.megacrit.cardcrawl.events.AbstractEvent; 7 | 8 | @SpirePatch(clz = AbstractEvent.class, method = SpirePatch.CLASS) 9 | public class AdditionalEventParameters 10 | { 11 | public static SpireField additionalParameters = new SpireField<>(() -> null); 12 | } 13 | -------------------------------------------------------------------------------- /mod/src/main/java/basemod/patches/com/megacrit/cardcrawl/events/NoteForYourself/MissingCard.java: -------------------------------------------------------------------------------- 1 | package basemod.patches.com.megacrit.cardcrawl.events.NoteForYourself; 2 | 3 | import com.megacrit.cardcrawl.events.shrines.NoteForYourself; 4 | 5 | // This exists purely to avoid a crash with the Conspire mod 6 | public class MissingCard 7 | { 8 | public static void Replace(NoteForYourself __instance) 9 | { 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /mod/src/main/java/basemod/patches/com/megacrit/cardcrawl/helpers/CardHelper/GOGGetColorFix.java: -------------------------------------------------------------------------------- 1 | package basemod.patches.com.megacrit.cardcrawl.helpers.CardHelper; 2 | 3 | import com.badlogic.gdx.graphics.Color; 4 | import com.evacipated.cardcrawl.modthespire.lib.SpirePatch; 5 | import com.megacrit.cardcrawl.helpers.CardHelper; 6 | import javassist.*; 7 | import javassist.bytecode.DuplicateMemberException; 8 | 9 | @SpirePatch( 10 | clz = CardHelper.class, 11 | method = SpirePatch.CONSTRUCTOR 12 | ) 13 | public class GOGGetColorFix 14 | { 15 | public static void Raw(CtBehavior ctBehavior) 16 | { 17 | try { 18 | CtClass ctClass = ctBehavior.getDeclaringClass(); 19 | CtMethod method = CtNewMethod.make( 20 | String.format( 21 | "public static %1$s getColor(float r, float g, float b) {" + 22 | "return new %1$s(r / 255f, g / 255f, b / 255f, 1f);" + 23 | "}", 24 | Color.class.getName() 25 | ), 26 | ctClass 27 | ); 28 | ctClass.addMethod(method); 29 | } catch (DuplicateMemberException ignored) { 30 | } catch (CannotCompileException e) { 31 | e.printStackTrace(); 32 | } 33 | } 34 | } 35 | -------------------------------------------------------------------------------- /mod/src/main/java/basemod/patches/com/megacrit/cardcrawl/helpers/CardLibrary/AddSwitch.java: -------------------------------------------------------------------------------- 1 | package basemod.patches.com.megacrit.cardcrawl.helpers.CardLibrary; 2 | 3 | import basemod.BaseMod; 4 | import com.evacipated.cardcrawl.modthespire.lib.*; 5 | import com.megacrit.cardcrawl.cards.AbstractCard; 6 | import com.megacrit.cardcrawl.cards.AbstractCard.CardColor; 7 | import com.megacrit.cardcrawl.helpers.CardLibrary; 8 | import com.megacrit.cardcrawl.unlock.UnlockTracker; 9 | import javassist.CtBehavior; 10 | 11 | @SpirePatch( 12 | clz=CardLibrary.class, 13 | method="add" 14 | ) 15 | public class AddSwitch 16 | { 17 | @SpireInsertPatch( 18 | locator=Locator.class 19 | ) 20 | public static void Insert(AbstractCard card) 21 | { 22 | CardColor color = card.color; 23 | if (!BaseMod.isBaseGameCardColor(color)) { 24 | BaseMod.incrementCardCount(color); 25 | if (UnlockTracker.isCardSeen(card.cardID)) { 26 | BaseMod.incrementSeenCardCount(color); 27 | } 28 | } 29 | } 30 | 31 | private static class Locator extends SpireInsertLocator 32 | { 33 | @Override 34 | public int[] Locate(CtBehavior ctMethodToPatch) throws Exception 35 | { 36 | Matcher finalMatcher = new Matcher.MethodCallMatcher(UnlockTracker.class, "isCardSeen"); 37 | int[] lines = LineFinder.findAllInOrder(ctMethodToPatch, finalMatcher); 38 | return new int[]{lines[lines.length - 1]}; 39 | } 40 | } 41 | } 42 | -------------------------------------------------------------------------------- /mod/src/main/java/basemod/patches/com/megacrit/cardcrawl/helpers/CardLibrary/BlueCardsPatch.java: -------------------------------------------------------------------------------- 1 | package basemod.patches.com.megacrit.cardcrawl.helpers.CardLibrary; 2 | 3 | import basemod.BaseMod; 4 | import com.evacipated.cardcrawl.modthespire.lib.SpirePatch; 5 | import com.megacrit.cardcrawl.cards.AbstractCard; 6 | import com.megacrit.cardcrawl.helpers.CardLibrary; 7 | 8 | @SpirePatch( 9 | clz=CardLibrary.class, 10 | method="addBlueCards", 11 | paramtypez={} 12 | ) 13 | public class BlueCardsPatch 14 | { 15 | public static void Postfix() 16 | { 17 | // add new cards 18 | for (AbstractCard card : BaseMod.getBlueCardsToAdd()) { 19 | CardLibrary.add(card); 20 | } 21 | 22 | // remove old cards 23 | for (String cardID : BaseMod.getBlueCardsToRemove()) { 24 | CardLibrary.cards.remove(cardID); 25 | CardLibrary.blueCards--; 26 | CardLibrary.totalCardCount--; 27 | } 28 | } 29 | } 30 | -------------------------------------------------------------------------------- /mod/src/main/java/basemod/patches/com/megacrit/cardcrawl/helpers/CardLibrary/ColorlessCardsPatch.java: -------------------------------------------------------------------------------- 1 | package basemod.patches.com.megacrit.cardcrawl.helpers.CardLibrary; 2 | 3 | import basemod.BaseMod; 4 | import com.evacipated.cardcrawl.modthespire.lib.SpirePatch; 5 | import com.megacrit.cardcrawl.cards.AbstractCard; 6 | import com.megacrit.cardcrawl.helpers.CardLibrary; 7 | 8 | @SpirePatch( 9 | clz=CardLibrary.class, 10 | method="addColorlessCards", 11 | paramtypez={} 12 | ) 13 | public class ColorlessCardsPatch { 14 | 15 | public static void Postfix() { 16 | // add new cards 17 | for (AbstractCard card : BaseMod.getColorlessCardsToAdd()) { 18 | CardLibrary.add(card); 19 | } 20 | 21 | // remove old cards 22 | for (String cardID : BaseMod.getColorlessCardsToRemove()) { 23 | CardLibrary.cards.remove(cardID); 24 | CardLibrary.colorlessCards--; 25 | CardLibrary.totalCardCount--; 26 | } 27 | } 28 | } 29 | -------------------------------------------------------------------------------- /mod/src/main/java/basemod/patches/com/megacrit/cardcrawl/helpers/CardLibrary/CurseCardsPatch.java: -------------------------------------------------------------------------------- 1 | package basemod.patches.com.megacrit.cardcrawl.helpers.CardLibrary; 2 | 3 | import basemod.BaseMod; 4 | import basemod.ReflectionHacks; 5 | import com.evacipated.cardcrawl.modthespire.lib.SpirePatch; 6 | import com.megacrit.cardcrawl.cards.AbstractCard; 7 | import com.megacrit.cardcrawl.helpers.CardLibrary; 8 | 9 | import java.util.HashMap; 10 | 11 | @SpirePatch(cls="com.megacrit.cardcrawl.helpers.CardLibrary", method="addCurseCards") 12 | public class CurseCardsPatch { 13 | 14 | public static void Postfix() { 15 | // add new cards 16 | for (AbstractCard card : BaseMod.getCurseCardsToAdd()) { 17 | CardLibrary.add(card); 18 | } 19 | 20 | // remove old cards 21 | for (String cardID : BaseMod.getCurseCardsToRemove()) { 22 | // for some reason curses is set to private so we use reflection to access it 23 | Object cursesObj = ReflectionHacks.getPrivateStatic(CardLibrary.class, "curses"); 24 | @SuppressWarnings("unchecked") 25 | HashMap curses = (HashMap) cursesObj; 26 | curses.remove(cardID); 27 | CardLibrary.curseCards--; 28 | CardLibrary.totalCardCount--; 29 | } 30 | } 31 | } 32 | -------------------------------------------------------------------------------- /mod/src/main/java/basemod/patches/com/megacrit/cardcrawl/helpers/CardLibrary/EditCardsPatch.java: -------------------------------------------------------------------------------- 1 | package basemod.patches.com.megacrit.cardcrawl.helpers.CardLibrary; 2 | 3 | import basemod.BaseMod; 4 | import com.evacipated.cardcrawl.modthespire.lib.SpirePatch; 5 | 6 | @SpirePatch(cls="com.megacrit.cardcrawl.helpers.CardLibrary", method="initialize") 7 | public class EditCardsPatch { 8 | 9 | public static void Prefix() { 10 | // have mods register their changes to the card list here 11 | BaseMod.publishEditCards(); 12 | } 13 | 14 | } 15 | -------------------------------------------------------------------------------- /mod/src/main/java/basemod/patches/com/megacrit/cardcrawl/helpers/CardLibrary/GetCardListSwitch.java: -------------------------------------------------------------------------------- 1 | package basemod.patches.com.megacrit.cardcrawl.helpers.CardLibrary; 2 | 3 | import basemod.BaseMod; 4 | import com.evacipated.cardcrawl.modthespire.lib.SpirePatch; 5 | import com.megacrit.cardcrawl.cards.AbstractCard; 6 | import com.megacrit.cardcrawl.helpers.CardLibrary; 7 | import com.megacrit.cardcrawl.helpers.CardLibrary.LibraryType; 8 | 9 | import java.util.ArrayList; 10 | import java.util.Map; 11 | 12 | @SpirePatch( 13 | clz=CardLibrary.class, 14 | method="getCardList" 15 | ) 16 | public class GetCardListSwitch 17 | { 18 | public static ArrayList Postfix(ArrayList __result, LibraryType type) 19 | { 20 | if (!BaseMod.isBaseGameCardColor(AbstractCard.CardColor.valueOf(type.name()))) { 21 | for (Map.Entry c : CardLibrary.cards.entrySet()) { 22 | if (c.getValue().color.name().equals(type.name())) { 23 | __result.add(c.getValue()); 24 | } 25 | } 26 | } 27 | return __result; 28 | } 29 | } 30 | -------------------------------------------------------------------------------- /mod/src/main/java/basemod/patches/com/megacrit/cardcrawl/helpers/CardLibrary/GetCardModID.java: -------------------------------------------------------------------------------- 1 | package basemod.patches.com.megacrit.cardcrawl.helpers.CardLibrary; 2 | 3 | import basemod.BaseMod; 4 | import com.evacipated.cardcrawl.modthespire.lib.ByRef; 5 | import com.evacipated.cardcrawl.modthespire.lib.SpirePatch; 6 | import com.megacrit.cardcrawl.characters.AbstractPlayer; 7 | 8 | public class GetCardModID 9 | { 10 | @SpirePatch( 11 | cls="com.megacrit.cardcrawl.helpers.CardLibrary", 12 | method="getCard", 13 | paramtypes={"java.lang.String"} 14 | ) 15 | public static class GetCardPatch1 16 | { 17 | public static void Prefix(@ByRef String[] key) 18 | { 19 | key[0] = BaseMod.convertToModID(key[0]); 20 | } 21 | } 22 | 23 | @SpirePatch( 24 | cls="com.megacrit.cardcrawl.helpers.CardLibrary", 25 | method="getCard", 26 | paramtypes={"com.megacrit.cardcrawl.characters.AbstractPlayer$PlayerClass", "java.lang.String"} 27 | ) 28 | public static class GetCardPatch2 29 | { 30 | public static void Prefix(AbstractPlayer.PlayerClass plyrClass, @ByRef String[] key) 31 | { 32 | key[0] = BaseMod.convertToModID(key[0]); 33 | } 34 | } 35 | } 36 | -------------------------------------------------------------------------------- /mod/src/main/java/basemod/patches/com/megacrit/cardcrawl/helpers/CardLibrary/GreenCardsPatch.java: -------------------------------------------------------------------------------- 1 | package basemod.patches.com.megacrit.cardcrawl.helpers.CardLibrary; 2 | 3 | import basemod.BaseMod; 4 | import com.evacipated.cardcrawl.modthespire.lib.SpirePatch; 5 | import com.megacrit.cardcrawl.cards.AbstractCard; 6 | import com.megacrit.cardcrawl.helpers.CardLibrary; 7 | 8 | @SpirePatch( 9 | clz=CardLibrary.class, 10 | method="addGreenCards", 11 | paramtypez={} 12 | ) 13 | public class GreenCardsPatch { 14 | public static void Postfix() { 15 | // add new cards 16 | for (AbstractCard card : BaseMod.getGreenCardsToAdd()) { 17 | CardLibrary.add(card); 18 | } 19 | 20 | // remove old cards 21 | for (String cardID : BaseMod.getGreenCardsToRemove()) { 22 | CardLibrary.cards.remove(cardID); 23 | CardLibrary.greenCards--; 24 | CardLibrary.totalCardCount--; 25 | } 26 | } 27 | } 28 | -------------------------------------------------------------------------------- /mod/src/main/java/basemod/patches/com/megacrit/cardcrawl/helpers/CardLibrary/PurpleCardsPatch.java: -------------------------------------------------------------------------------- 1 | package basemod.patches.com.megacrit.cardcrawl.helpers.CardLibrary; 2 | 3 | import basemod.BaseMod; 4 | import com.evacipated.cardcrawl.modthespire.lib.SpirePatch; 5 | import com.megacrit.cardcrawl.cards.AbstractCard; 6 | import com.megacrit.cardcrawl.helpers.CardLibrary; 7 | 8 | @SpirePatch( 9 | clz= CardLibrary.class, 10 | method="addPurpleCards", 11 | paramtypez={} 12 | ) 13 | public class PurpleCardsPatch 14 | { 15 | public static void Postfix() 16 | { 17 | // add new cards 18 | for (AbstractCard card : BaseMod.getPurpleCardsToAdd()) { 19 | CardLibrary.add(card); 20 | } 21 | 22 | // remove old cards 23 | for (String cardID : BaseMod.getPurpleCardsToRemove()) { 24 | CardLibrary.cards.remove(cardID); 25 | CardLibrary.purpleCards--; 26 | CardLibrary.totalCardCount--; 27 | } 28 | } 29 | } 30 | -------------------------------------------------------------------------------- /mod/src/main/java/basemod/patches/com/megacrit/cardcrawl/helpers/CardLibrary/RedCardsPatch.java: -------------------------------------------------------------------------------- 1 | package basemod.patches.com.megacrit.cardcrawl.helpers.CardLibrary; 2 | 3 | import basemod.BaseMod; 4 | import com.evacipated.cardcrawl.modthespire.lib.SpirePatch; 5 | import com.megacrit.cardcrawl.cards.AbstractCard; 6 | import com.megacrit.cardcrawl.helpers.CardLibrary; 7 | 8 | @SpirePatch( 9 | clz=CardLibrary.class, 10 | method="addRedCards", 11 | paramtypez={} 12 | ) 13 | public class RedCardsPatch { 14 | public static void Postfix() { 15 | // add new cards 16 | for (AbstractCard card : BaseMod.getRedCardsToAdd()) { 17 | CardLibrary.add(card); 18 | } 19 | 20 | // remove old cards 21 | for (String cardID : BaseMod.getRedCardsToRemove()) { 22 | CardLibrary.cards.remove(cardID); 23 | CardLibrary.redCards--; 24 | CardLibrary.totalCardCount--; 25 | } 26 | } 27 | } 28 | -------------------------------------------------------------------------------- /mod/src/main/java/basemod/patches/com/megacrit/cardcrawl/helpers/FontHelper/FixSCPCardEnergyFont.java: -------------------------------------------------------------------------------- 1 | package basemod.patches.com.megacrit.cardcrawl.helpers.FontHelper; 2 | 3 | import basemod.ReflectionHacks; 4 | import com.badlogic.gdx.graphics.g2d.freetype.FreeTypeFontGenerator; 5 | import com.evacipated.cardcrawl.modthespire.lib.*; 6 | import com.megacrit.cardcrawl.helpers.FontHelper; 7 | import javassist.CtBehavior; 8 | 9 | @SpirePatch(clz = FontHelper.class, method = "ClearSCPFontTextures") 10 | public class FixSCPCardEnergyFont { 11 | @SpireInsertPatch(locator = Locator.class) 12 | public static void Insert() { 13 | ReflectionHacks.setPrivateStatic(FontHelper.class, "fontFile", 14 | FontHelper.SCP_cardEnergyFont.getData().fontFile); 15 | } 16 | 17 | public static class Locator extends SpireInsertLocator { 18 | @Override 19 | public int[] Locate(CtBehavior ctBehavior) throws Exception { 20 | Matcher finalMatcher = new Matcher.FieldAccessMatcher(FreeTypeFontGenerator.FreeTypeFontParameter.class, "borderStraight"); 21 | return LineFinder.findInOrder(ctBehavior, finalMatcher); 22 | } 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /mod/src/main/java/basemod/patches/com/megacrit/cardcrawl/helpers/GameDictionary/PostKeywordInitialize.java: -------------------------------------------------------------------------------- 1 | package basemod.patches.com.megacrit.cardcrawl.helpers.GameDictionary; 2 | 3 | import basemod.BaseMod; 4 | import com.evacipated.cardcrawl.modthespire.lib.SpirePatch; 5 | 6 | @SpirePatch(cls="com.megacrit.cardcrawl.helpers.GameDictionary", method="initialize") 7 | public class PostKeywordInitialize { 8 | 9 | public static void Postfix() { 10 | BaseMod.publishEditKeywords(); 11 | } 12 | 13 | } 14 | -------------------------------------------------------------------------------- /mod/src/main/java/basemod/patches/com/megacrit/cardcrawl/helpers/GetAllInBattleInstances/FixNPE.java: -------------------------------------------------------------------------------- 1 | package basemod.patches.com.megacrit.cardcrawl.helpers.GetAllInBattleInstances; 2 | 3 | import com.evacipated.cardcrawl.modthespire.lib.SpirePatch; 4 | import com.megacrit.cardcrawl.cards.colorless.Madness; 5 | import com.megacrit.cardcrawl.helpers.CardLibrary; 6 | import com.megacrit.cardcrawl.helpers.GetAllInBattleInstances; 7 | import javassist.CannotCompileException; 8 | import javassist.expr.ExprEditor; 9 | import javassist.expr.FieldAccess; 10 | 11 | @SpirePatch( 12 | clz=GetAllInBattleInstances.class, 13 | method="get" 14 | ) 15 | public class FixNPE 16 | { 17 | public static ExprEditor Instrument() 18 | { 19 | return new ExprEditor() { 20 | @Override 21 | public void edit(FieldAccess f) throws CannotCompileException 22 | { 23 | if (f.getFieldName().equals("cardInUse")) { 24 | f.replace("if ($0.cardInUse == null) {" + 25 | "$_ = " + CardLibrary.class.getName() + ".getCard(" + Madness.class.getName() + ".ID);" + 26 | "} else {" + 27 | "$_ = $proceed($$);" + 28 | "}"); 29 | } 30 | } 31 | }; 32 | } 33 | } 34 | -------------------------------------------------------------------------------- /mod/src/main/java/basemod/patches/com/megacrit/cardcrawl/helpers/Hitbox/FixRedNotBeingReset.java: -------------------------------------------------------------------------------- 1 | package basemod.patches.com.megacrit.cardcrawl.helpers.Hitbox; 2 | 3 | import com.badlogic.gdx.graphics.Color; 4 | import com.badlogic.gdx.graphics.g2d.SpriteBatch; 5 | import com.evacipated.cardcrawl.modthespire.lib.SpirePatch2; 6 | import com.evacipated.cardcrawl.modthespire.lib.SpirePostfixPatch; 7 | import com.evacipated.cardcrawl.modthespire.lib.SpirePrefixPatch; 8 | import com.megacrit.cardcrawl.core.Settings; 9 | import com.megacrit.cardcrawl.helpers.Hitbox; 10 | 11 | @SpirePatch2( 12 | clz = Hitbox.class, 13 | method = "render" 14 | ) 15 | public class FixRedNotBeingReset 16 | { 17 | private static final Color saved = new Color(1f, 1f, 1f, 1f); 18 | 19 | @SpirePrefixPatch 20 | public static void saveColor(SpriteBatch sb) 21 | { 22 | saved.set(sb.getColor()); 23 | } 24 | 25 | @SpirePostfixPatch 26 | public static void restoreColor(SpriteBatch sb) 27 | { 28 | if (Settings.isDebug || Settings.isInfo) { 29 | sb.setColor(saved); 30 | } 31 | } 32 | } 33 | -------------------------------------------------------------------------------- /mod/src/main/java/basemod/patches/com/megacrit/cardcrawl/helpers/MonsterHelper/GetEncounter.java: -------------------------------------------------------------------------------- 1 | package basemod.patches.com.megacrit.cardcrawl.helpers.MonsterHelper; 2 | 3 | import basemod.BaseMod; 4 | import com.evacipated.cardcrawl.modthespire.lib.SpirePatch; 5 | import com.megacrit.cardcrawl.helpers.MonsterHelper; 6 | import com.megacrit.cardcrawl.monsters.MonsterGroup; 7 | 8 | @SpirePatch( 9 | clz= MonsterHelper.class, 10 | method="getEncounter" 11 | ) 12 | public class GetEncounter 13 | { 14 | public static MonsterGroup Postfix(MonsterGroup __result, String key) 15 | { 16 | if (BaseMod.customMonsterExists(key)) { 17 | return BaseMod.getMonster(key); 18 | } 19 | return __result; 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /mod/src/main/java/basemod/patches/com/megacrit/cardcrawl/helpers/MonsterHelper/GetEncounterName.java: -------------------------------------------------------------------------------- 1 | package basemod.patches.com.megacrit.cardcrawl.helpers.MonsterHelper; 2 | 3 | import basemod.BaseMod; 4 | import com.evacipated.cardcrawl.modthespire.lib.SpirePatch; 5 | import com.megacrit.cardcrawl.helpers.MonsterHelper; 6 | 7 | @SpirePatch( 8 | clz=MonsterHelper.class, 9 | method="getEncounterName" 10 | ) 11 | public class GetEncounterName 12 | { 13 | public static String Postfix(String __result, String key) 14 | { 15 | if (__result.isEmpty() && BaseMod.customMonsterExists(key)) { 16 | return BaseMod.getMonsterName(key); 17 | } 18 | return __result; 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /mod/src/main/java/basemod/patches/com/megacrit/cardcrawl/helpers/PotionLibrary/PotionHelperGetPotions.java: -------------------------------------------------------------------------------- 1 | package basemod.patches.com.megacrit.cardcrawl.helpers.PotionLibrary; 2 | 3 | import basemod.BaseMod; 4 | import com.evacipated.cardcrawl.modthespire.lib.SpirePatch; 5 | import com.megacrit.cardcrawl.characters.AbstractPlayer; 6 | import com.megacrit.cardcrawl.helpers.PotionHelper; 7 | 8 | import java.util.ArrayList; 9 | 10 | @SpirePatch( 11 | clz=PotionHelper.class, 12 | method="getPotions" 13 | ) 14 | public class PotionHelperGetPotions 15 | { 16 | public static ArrayList Postfix(ArrayList __result, AbstractPlayer.PlayerClass c, boolean getAll) 17 | { 18 | for (String potionID : BaseMod.getPotionIDs()) { 19 | AbstractPlayer.PlayerClass potionClass = BaseMod.getPotionPlayerClass(potionID); 20 | if (getAll || potionClass == null || potionClass == c) { 21 | __result.add(potionID); 22 | } 23 | } 24 | return __result; 25 | } 26 | } -------------------------------------------------------------------------------- /mod/src/main/java/basemod/patches/com/megacrit/cardcrawl/helpers/RelicLibrary/EditRelicsPatch.java: -------------------------------------------------------------------------------- 1 | package basemod.patches.com.megacrit.cardcrawl.helpers.RelicLibrary; 2 | 3 | import basemod.BaseMod; 4 | import com.evacipated.cardcrawl.modthespire.lib.SpirePatch; 5 | 6 | @SpirePatch(cls="com.megacrit.cardcrawl.helpers.RelicLibrary", method="initialize") 7 | public class EditRelicsPatch { 8 | 9 | public static void Prefix() { 10 | // have mods register their changes to the relic list here 11 | BaseMod.publishEditRelics(); 12 | } 13 | 14 | } 15 | -------------------------------------------------------------------------------- /mod/src/main/java/basemod/patches/com/megacrit/cardcrawl/helpers/RelicLibrary/GetRelicFix.java: -------------------------------------------------------------------------------- 1 | package basemod.patches.com.megacrit.cardcrawl.helpers.RelicLibrary; 2 | 3 | import basemod.BaseMod; 4 | import com.evacipated.cardcrawl.modthespire.lib.ByRef; 5 | import com.evacipated.cardcrawl.modthespire.lib.SpirePatch; 6 | import com.megacrit.cardcrawl.relics.Circlet; 7 | import javassist.CannotCompileException; 8 | import javassist.expr.ExprEditor; 9 | import javassist.expr.NewExpr; 10 | 11 | @SpirePatch(cls="com.megacrit.cardcrawl.helpers.RelicLibrary", method="getRelic") 12 | public class GetRelicFix { 13 | 14 | public static ExprEditor Instrument() { 15 | return new ExprEditor() { 16 | @Override 17 | public void edit(NewExpr e) throws CannotCompileException 18 | { 19 | if (e.getClassName().equals("com.megacrit.cardcrawl.relics.Circlet")) { 20 | e.replace("$_ = basemod.BaseMod.getCustomRelic(key);"); 21 | } 22 | } 23 | }; 24 | } 25 | 26 | public static void Prefix(@ByRef String[] key) { 27 | if (key[0] != null && !key[0].equals(Circlet.ID) && !BaseMod.hasModID(key[0])) { 28 | key[0] = BaseMod.convertToModID(key[0]); 29 | } 30 | } 31 | 32 | } 33 | -------------------------------------------------------------------------------- /mod/src/main/java/basemod/patches/com/megacrit/cardcrawl/helpers/RelicLibrary/PopulateLists.java: -------------------------------------------------------------------------------- 1 | package basemod.patches.com.megacrit.cardcrawl.helpers.RelicLibrary; 2 | 3 | import basemod.BaseMod; 4 | import com.evacipated.cardcrawl.modthespire.lib.SpirePatch; 5 | import com.megacrit.cardcrawl.characters.AbstractPlayer; 6 | import com.megacrit.cardcrawl.dungeons.AbstractDungeon; 7 | import com.megacrit.cardcrawl.helpers.RelicLibrary; 8 | import com.megacrit.cardcrawl.relics.AbstractRelic; 9 | 10 | import java.util.ArrayList; 11 | import java.util.Map; 12 | 13 | @SpirePatch( 14 | clz=RelicLibrary.class, 15 | method="addClassSpecificRelics" 16 | ) 17 | public class PopulateLists 18 | { 19 | public static void Postfix(ArrayList relicPool) 20 | { 21 | AbstractPlayer.PlayerClass selection = AbstractDungeon.player.chosenClass; 22 | if (!BaseMod.isBaseGameCharacter(selection)) { 23 | for (Map.Entry r : BaseMod.getRelicsInCustomPool( 24 | AbstractDungeon.player.getCardColor()).entrySet()) { 25 | relicPool.add(r.getValue()); 26 | } 27 | } 28 | } 29 | } 30 | -------------------------------------------------------------------------------- /mod/src/main/java/basemod/patches/com/megacrit/cardcrawl/helpers/RelicLibrary/PopulatePools.java: -------------------------------------------------------------------------------- 1 | package basemod.patches.com.megacrit.cardcrawl.helpers.RelicLibrary; 2 | 3 | import basemod.BaseMod; 4 | import com.evacipated.cardcrawl.modthespire.lib.SpirePatch; 5 | import com.megacrit.cardcrawl.characters.AbstractPlayer; 6 | import com.megacrit.cardcrawl.core.Settings; 7 | import com.megacrit.cardcrawl.helpers.RelicLibrary; 8 | import com.megacrit.cardcrawl.relics.AbstractRelic; 9 | import com.megacrit.cardcrawl.unlock.UnlockTracker; 10 | 11 | import java.util.ArrayList; 12 | import java.util.HashMap; 13 | import java.util.Map; 14 | 15 | @SpirePatch( 16 | clz=RelicLibrary.class, 17 | method="populateRelicPool" 18 | ) 19 | public class PopulatePools { 20 | 21 | public static void Postfix(ArrayList pool, AbstractRelic.RelicTier tier, AbstractPlayer.PlayerClass chosenClass) { 22 | if (!BaseMod.isBaseGameCharacter(chosenClass)) { 23 | HashMap relics = BaseMod.getRelicsInCustomPool(BaseMod.findCharacter(chosenClass).getCardColor()); 24 | if (relics != null) { 25 | for (Map.Entry r : relics.entrySet()) { 26 | if (r.getValue().tier == tier && ( 27 | !UnlockTracker.isRelicLocked(r.getKey()) || 28 | Settings.isDailyRun)) { 29 | pool.add(r.getKey()); 30 | } 31 | } 32 | } 33 | } 34 | } 35 | 36 | } 37 | -------------------------------------------------------------------------------- /mod/src/main/java/basemod/patches/com/megacrit/cardcrawl/helpers/TopPanel/TopPanelHelper.java: -------------------------------------------------------------------------------- 1 | package basemod.patches.com.megacrit.cardcrawl.helpers.TopPanel; 2 | 3 | import basemod.TopPanelGroup; 4 | import basemod.TopPanelItem; 5 | 6 | import java.util.ArrayList; 7 | 8 | public class TopPanelHelper { 9 | 10 | public static TopPanelGroup topPanelGroup = new TopPanelGroup(new ArrayList()); 11 | 12 | } 13 | -------------------------------------------------------------------------------- /mod/src/main/java/basemod/patches/com/megacrit/cardcrawl/helpers/input/InputAction/DisableInputWhileTyping.java: -------------------------------------------------------------------------------- 1 | package basemod.patches.com.megacrit.cardcrawl.helpers.input.InputAction; 2 | 3 | import basemod.patches.com.megacrit.cardcrawl.helpers.input.ScrollInputProcessor.TextInput; 4 | import com.evacipated.cardcrawl.modthespire.lib.SpirePatch; 5 | import com.evacipated.cardcrawl.modthespire.lib.SpirePrefixPatch; 6 | import com.evacipated.cardcrawl.modthespire.lib.SpireReturn; 7 | import com.megacrit.cardcrawl.helpers.input.InputAction; 8 | 9 | public class DisableInputWhileTyping { 10 | @SpirePatch( 11 | clz = InputAction.class, 12 | method = "isJustPressed" 13 | ) 14 | public static class onInitialPress 15 | { 16 | @SpirePrefixPatch 17 | public static SpireReturn preventInitialPress(InputAction __instance) 18 | { 19 | if (TextInput.isTextInputActive()) 20 | { 21 | return SpireReturn.Return(false); 22 | } 23 | return SpireReturn.Continue(); 24 | } 25 | } 26 | @SpirePatch( 27 | clz = InputAction.class, 28 | method = "isPressed" 29 | ) 30 | public static class onPress 31 | { 32 | @SpirePrefixPatch 33 | public static SpireReturn preventPress(InputAction __instance) 34 | { 35 | if (TextInput.isTextInputActive()) 36 | { 37 | return SpireReturn.Return(false); 38 | } 39 | return SpireReturn.Continue(); 40 | } 41 | } 42 | } 43 | -------------------------------------------------------------------------------- /mod/src/main/java/basemod/patches/com/megacrit/cardcrawl/localization/LocalizedStrings/EditStrings.java: -------------------------------------------------------------------------------- 1 | package basemod.patches.com.megacrit.cardcrawl.localization.LocalizedStrings; 2 | 3 | import basemod.BaseMod; 4 | import com.evacipated.cardcrawl.modthespire.lib.SpirePatch; 5 | 6 | @SpirePatch(cls="com.megacrit.cardcrawl.localization.LocalizedStrings", method=SpirePatch.CONSTRUCTOR) 7 | public class EditStrings { 8 | public static void Postfix(Object __obj_instance) { 9 | BaseMod.publishEditStrings(); 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /mod/src/main/java/basemod/patches/com/megacrit/cardcrawl/localization/LocalizedStrings/GetCardStringsModID.java: -------------------------------------------------------------------------------- 1 | package basemod.patches.com.megacrit.cardcrawl.localization.LocalizedStrings; 2 | 3 | import basemod.BaseMod; 4 | import com.evacipated.cardcrawl.modthespire.lib.ByRef; 5 | import com.evacipated.cardcrawl.modthespire.lib.SpirePatch; 6 | import com.megacrit.cardcrawl.localization.LocalizedStrings; 7 | 8 | @SpirePatch( 9 | cls="com.megacrit.cardcrawl.localization.LocalizedStrings", 10 | method="getCardStrings" 11 | ) 12 | public class GetCardStringsModID 13 | { 14 | public static void Prefix(LocalizedStrings __instance, @ByRef String[] cardName) 15 | { 16 | cardName[0] = BaseMod.convertToModID(cardName[0]); 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /mod/src/main/java/basemod/patches/com/megacrit/cardcrawl/map/MapGenerator/PathDensityMultiplier.java: -------------------------------------------------------------------------------- 1 | package basemod.patches.com.megacrit.cardcrawl.map.MapGenerator; 2 | 3 | import com.evacipated.cardcrawl.modthespire.lib.SpirePatch; 4 | import javassist.CannotCompileException; 5 | import javassist.expr.ExprEditor; 6 | import javassist.expr.MethodCall; 7 | 8 | @SpirePatch(cls="com.megacrit.cardcrawl.map.MapGenerator", method="generateDungeon") 9 | public class PathDensityMultiplier { 10 | public static ExprEditor Instrument() { 11 | return new ExprEditor() { 12 | public void edit(MethodCall m) throws CannotCompileException { 13 | if (m.getClassName().equals("com.megacrit.cardcrawl.map.MapGenerator") && m.getMethodName().equals("createPaths")) { 14 | m.replace("{ $2 = (int)($2 * basemod.BaseMod.mapPathDensityMultiplier); $_ = $proceed($$); }"); 15 | } 16 | } 17 | }; 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /mod/src/main/java/basemod/patches/com/megacrit/cardcrawl/monsters/FixTransientCrash.java: -------------------------------------------------------------------------------- 1 | package basemod.patches.com.megacrit.cardcrawl.monsters; 2 | 3 | import com.evacipated.cardcrawl.modthespire.lib.SpirePatch; 4 | import com.megacrit.cardcrawl.cards.DamageInfo; 5 | import com.megacrit.cardcrawl.dungeons.AbstractDungeon; 6 | import com.megacrit.cardcrawl.monsters.beyond.Transient; 7 | import javassist.CannotCompileException; 8 | import javassist.expr.ExprEditor; 9 | import javassist.expr.MethodCall; 10 | 11 | import java.util.ArrayList; 12 | 13 | @SpirePatch( 14 | clz = Transient.class, 15 | method = "takeTurn" 16 | ) 17 | public class FixTransientCrash 18 | { 19 | public static ExprEditor Instrument() 20 | { 21 | return new ExprEditor() { 22 | @Override 23 | public void edit(MethodCall m) throws CannotCompileException 24 | { 25 | if (m.getClassName().equals(ArrayList.class.getName()) && m.getMethodName().equals("get")) { 26 | m.replace("$_ = " + FixTransientCrash.class.getName() + ".makeDamageInfo(this, $1, startingDeathDmg);"); 27 | } 28 | } 29 | }; 30 | } 31 | 32 | public static DamageInfo makeDamageInfo(Transient __instance, int count, int startingDeathDmg) 33 | { 34 | DamageInfo info = new DamageInfo(__instance, startingDeathDmg + count * 10); 35 | info.applyPowers(__instance, AbstractDungeon.player); 36 | return info; 37 | } 38 | } 39 | -------------------------------------------------------------------------------- /mod/src/main/java/basemod/patches/com/megacrit/cardcrawl/monsters/MonsterInfo/AddCustomMonsters.java: -------------------------------------------------------------------------------- 1 | package basemod.patches.com.megacrit.cardcrawl.monsters.MonsterInfo; 2 | 3 | import basemod.BaseMod; 4 | import com.evacipated.cardcrawl.modthespire.lib.ByRef; 5 | import com.evacipated.cardcrawl.modthespire.lib.SpirePatch; 6 | import com.megacrit.cardcrawl.dungeons.AbstractDungeon; 7 | import com.megacrit.cardcrawl.monsters.MonsterInfo; 8 | 9 | import java.util.ArrayList; 10 | 11 | @SpirePatch( 12 | clz=MonsterInfo.class, 13 | method="normalizeWeights" 14 | ) 15 | public class AddCustomMonsters 16 | { 17 | private static int calls = 0; 18 | 19 | public static void Prefix(@ByRef ArrayList[] monsters) 20 | { 21 | ++calls; 22 | 23 | switch (calls) { 24 | case 1: // Normal monsters 25 | for (MonsterInfo i : BaseMod.getMonsterEncounters(AbstractDungeon.id)) { 26 | monsters[0].add(new MonsterInfo(i.name, i.weight)); 27 | } 28 | break; 29 | case 2: // Strong monsters 30 | for (MonsterInfo i : BaseMod.getStrongMonsterEncounters(AbstractDungeon.id)) { 31 | monsters[0].add(new MonsterInfo(i.name, i.weight)); 32 | } 33 | break; 34 | case 3: // Elites 35 | for (MonsterInfo i : BaseMod.getEliteEncounters(AbstractDungeon.id)) { 36 | monsters[0].add(new MonsterInfo(i.name, i.weight)); 37 | } 38 | default: 39 | calls = 0; 40 | break; 41 | } 42 | } 43 | } 44 | -------------------------------------------------------------------------------- /mod/src/main/java/basemod/patches/com/megacrit/cardcrawl/orbs/OrbsPowersPatch.java: -------------------------------------------------------------------------------- 1 | package basemod.patches.com.megacrit.cardcrawl.orbs; 2 | 3 | import static com.megacrit.cardcrawl.dungeons.AbstractDungeon.*; 4 | import com.evacipated.cardcrawl.modthespire.lib.SpirePatch2; 5 | import com.megacrit.cardcrawl.monsters.AbstractMonster; 6 | import com.megacrit.cardcrawl.orbs.AbstractOrb; 7 | 8 | @SpirePatch2(cls = "com.megacrit.cardcrawl.dungeons.AbstractDungeon", method = "onModifyPower", paramtypes = {}) 9 | public class OrbsPowersPatch { 10 | 11 | //This small postfix patch removes an arbitrary check for focus when updating the description of orbs, which causes issues with custom orb's failing to update. 12 | 13 | public static void Postfix(){ 14 | if (player != null) { 15 | player.hand.applyPowers(); 16 | for (AbstractOrb o : player.orbs) { 17 | o.updateDescription(); 18 | } 19 | } 20 | if ((getCurrRoom()).monsters != null) { 21 | for (AbstractMonster m : (getCurrRoom()).monsters.monsters) 22 | m.applyPowers(); 23 | } 24 | } 25 | 26 | } 27 | -------------------------------------------------------------------------------- /mod/src/main/java/basemod/patches/com/megacrit/cardcrawl/potions/Color/AbstractPotionInitializeColor.java: -------------------------------------------------------------------------------- 1 | package basemod.patches.com.megacrit.cardcrawl.potions.Color; 2 | 3 | import basemod.BaseMod; 4 | import com.evacipated.cardcrawl.modthespire.lib.SpirePatch; 5 | import com.megacrit.cardcrawl.potions.AbstractPotion; 6 | 7 | @SpirePatch( 8 | cls = "com.megacrit.cardcrawl.potions.AbstractPotion", 9 | method = "initializeColor" 10 | ) 11 | public class AbstractPotionInitializeColor { 12 | public static void Postfix(Object __object__instance) { 13 | AbstractPotion potion = (AbstractPotion) __object__instance; 14 | if (BaseMod.getPotionLiquidColor(potion.ID) != null) { 15 | potion.liquidColor = BaseMod.getPotionLiquidColor(potion.ID); 16 | potion.hybridColor = BaseMod.getPotionHybridColor(potion.ID); 17 | potion.spotsColor = BaseMod.getPotionSpotsColor(potion.ID); 18 | } 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /mod/src/main/java/basemod/patches/com/megacrit/cardcrawl/potions/FixAddToTop.java: -------------------------------------------------------------------------------- 1 | package basemod.patches.com.megacrit.cardcrawl.potions; 2 | 3 | import com.evacipated.cardcrawl.modthespire.lib.SpirePatch; 4 | import com.megacrit.cardcrawl.actions.AbstractGameAction; 5 | import com.megacrit.cardcrawl.dungeons.AbstractDungeon; 6 | import com.megacrit.cardcrawl.potions.AbstractPotion; 7 | 8 | @SpirePatch( 9 | clz = AbstractPotion.class, 10 | method = "addToTop" 11 | ) 12 | public class FixAddToTop 13 | { 14 | public static void Replace(AbstractPotion __instance, AbstractGameAction action) 15 | { 16 | AbstractDungeon.actionManager.addToTop(action); 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /mod/src/main/java/basemod/patches/com/megacrit/cardcrawl/powers/CloneablePowers/MonsterOwnerAmountPowerPatch.java: -------------------------------------------------------------------------------- 1 | package basemod.patches.com.megacrit.cardcrawl.powers.CloneablePowers; 2 | 3 | import com.evacipated.cardcrawl.modthespire.lib.SpirePatch; 4 | import com.megacrit.cardcrawl.monsters.AbstractMonster; 5 | import com.megacrit.cardcrawl.powers.RegenerateMonsterPower; 6 | import javassist.CannotCompileException; 7 | import javassist.CtBehavior; 8 | import javassist.NotFoundException; 9 | 10 | 11 | @SpirePatch( 12 | clz = RegenerateMonsterPower.class, 13 | method = SpirePatch.CONSTRUCTOR 14 | ) 15 | public class MonsterOwnerAmountPowerPatch extends CloneablePowersPatch { 16 | public static void Raw(CtBehavior ctMethodToPatch) throws NotFoundException, CannotCompileException { 17 | addMakeCopyMethod(ctMethodToPatch, "(" + AbstractMonster.class.getName() + ")", "amount"); 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /mod/src/main/java/basemod/patches/com/megacrit/cardcrawl/powers/CloneablePowers/OwnerAmountCardPowerPatch.java: -------------------------------------------------------------------------------- 1 | package basemod.patches.com.megacrit.cardcrawl.powers.CloneablePowers; 2 | 3 | import com.evacipated.cardcrawl.modthespire.lib.SpirePatch; 4 | import com.megacrit.cardcrawl.powers.NightmarePower; 5 | import javassist.CannotCompileException; 6 | import javassist.CtBehavior; 7 | import javassist.NotFoundException; 8 | 9 | 10 | @SpirePatch( 11 | clz = NightmarePower.class, 12 | method = SpirePatch.CONSTRUCTOR 13 | ) 14 | public class OwnerAmountCardPowerPatch extends CloneablePowersPatch { 15 | public static void Raw(CtBehavior ctMethodToPatch) throws NotFoundException, CannotCompileException { 16 | addMakeCopyMethod(ctMethodToPatch, "amount, card"); 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /mod/src/main/java/basemod/patches/com/megacrit/cardcrawl/powers/CloneablePowers/OwnerAmountDamagePowerPatch.java: -------------------------------------------------------------------------------- 1 | package basemod.patches.com.megacrit.cardcrawl.powers.CloneablePowers; 2 | 3 | import com.evacipated.cardcrawl.modthespire.lib.SpirePatch; 4 | import com.megacrit.cardcrawl.powers.TheBombPower; 5 | import javassist.CannotCompileException; 6 | import javassist.CtBehavior; 7 | import javassist.NotFoundException; 8 | 9 | 10 | @SpirePatch( 11 | clz = TheBombPower.class, 12 | method = SpirePatch.CONSTRUCTOR 13 | ) 14 | public class OwnerAmountDamagePowerPatch extends CloneablePowersPatch { 15 | public static void Raw(CtBehavior ctMethodToPatch) throws NotFoundException, CannotCompileException { 16 | addMakeCopyMethod(ctMethodToPatch, "amount, damage"); 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /mod/src/main/java/basemod/patches/com/megacrit/cardcrawl/powers/CloneablePowers/OwnerAmountJustappliedPowerPatch.java: -------------------------------------------------------------------------------- 1 | package basemod.patches.com.megacrit.cardcrawl.powers.CloneablePowers; 2 | 3 | import com.evacipated.cardcrawl.modthespire.lib.SpirePatch; 4 | import com.megacrit.cardcrawl.powers.*; 5 | import javassist.CannotCompileException; 6 | import javassist.CtBehavior; 7 | import javassist.NotFoundException; 8 | 9 | 10 | @SpirePatch( 11 | clz = DoubleDamagePower.class, 12 | method = SpirePatch.CONSTRUCTOR 13 | ) 14 | @SpirePatch( 15 | clz = FrailPower.class, 16 | method = SpirePatch.CONSTRUCTOR 17 | ) 18 | @SpirePatch( 19 | clz = NoBlockPower.class, 20 | method = SpirePatch.CONSTRUCTOR 21 | ) 22 | @SpirePatch( 23 | clz = VulnerablePower.class, 24 | method = SpirePatch.CONSTRUCTOR 25 | ) 26 | @SpirePatch( 27 | clz = WeakPower.class, 28 | method = SpirePatch.CONSTRUCTOR 29 | ) 30 | public class OwnerAmountJustappliedPowerPatch extends CloneablePowersPatch { 31 | public static void Raw(CtBehavior ctMethodToPatch) throws NotFoundException, CannotCompileException { 32 | addMakeCopyMethod(ctMethodToPatch, "amount, justApplied"); 33 | } 34 | } 35 | -------------------------------------------------------------------------------- /mod/src/main/java/basemod/patches/com/megacrit/cardcrawl/powers/CloneablePowers/OwnerAmountNamePowerPatch.java: -------------------------------------------------------------------------------- 1 | package basemod.patches.com.megacrit.cardcrawl.powers.CloneablePowers; 2 | 3 | import com.evacipated.cardcrawl.modthespire.lib.SpirePatch; 4 | import com.megacrit.cardcrawl.core.AbstractCreature; 5 | import com.megacrit.cardcrawl.powers.NextTurnBlockPower; 6 | import javassist.CannotCompileException; 7 | import javassist.CtBehavior; 8 | import javassist.NotFoundException; 9 | 10 | 11 | @SpirePatch( 12 | clz = NextTurnBlockPower.class, 13 | method = SpirePatch.CONSTRUCTOR, 14 | paramtypez = { 15 | AbstractCreature.class, 16 | int.class, 17 | String.class 18 | } 19 | ) 20 | public class OwnerAmountNamePowerPatch extends CloneablePowersPatch { 21 | public static void Raw(CtBehavior ctMethodToPatch) throws NotFoundException, CannotCompileException { 22 | addMakeCopyMethod(ctMethodToPatch, "amount, name"); 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /mod/src/main/java/basemod/patches/com/megacrit/cardcrawl/powers/CloneablePowers/OwnerAmountOnplayerPowerPatch.java: -------------------------------------------------------------------------------- 1 | package basemod.patches.com.megacrit.cardcrawl.powers.CloneablePowers; 2 | 3 | import com.evacipated.cardcrawl.modthespire.lib.SpirePatch; 4 | import com.megacrit.cardcrawl.powers.RitualPower; 5 | import javassist.CannotCompileException; 6 | import javassist.CtBehavior; 7 | import javassist.NotFoundException; 8 | 9 | 10 | @SpirePatch( 11 | clz = RitualPower.class, 12 | method = SpirePatch.CONSTRUCTOR 13 | ) 14 | public class OwnerAmountOnplayerPowerPatch extends CloneablePowersPatch { 15 | public static void Raw(CtBehavior ctMethodToPatch) throws NotFoundException, CannotCompileException { 16 | addMakeCopyMethod(ctMethodToPatch, "amount, onPlayer"); 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /mod/src/main/java/basemod/patches/com/megacrit/cardcrawl/powers/CloneablePowers/OwnerCardPowerPatch.java: -------------------------------------------------------------------------------- 1 | package basemod.patches.com.megacrit.cardcrawl.powers.CloneablePowers; 2 | 3 | import com.evacipated.cardcrawl.modthespire.lib.SpirePatch; 4 | import com.megacrit.cardcrawl.powers.StasisPower; 5 | import javassist.CannotCompileException; 6 | import javassist.CtBehavior; 7 | import javassist.NotFoundException; 8 | 9 | 10 | @SpirePatch( 11 | clz = StasisPower.class, 12 | method = SpirePatch.CONSTRUCTOR 13 | ) 14 | public class OwnerCardPowerPatch extends CloneablePowersPatch { 15 | public static void Raw(CtBehavior ctMethodToPatch) throws NotFoundException, CannotCompileException { 16 | addMakeCopyMethod(ctMethodToPatch, "card"); 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /mod/src/main/java/basemod/patches/com/megacrit/cardcrawl/powers/CloneablePowers/OwnerHplossAmountPowerPatch.java: -------------------------------------------------------------------------------- 1 | package basemod.patches.com.megacrit.cardcrawl.powers.CloneablePowers; 2 | 3 | import com.evacipated.cardcrawl.modthespire.lib.SpirePatch; 4 | import com.megacrit.cardcrawl.powers.CombustPower; 5 | import javassist.CannotCompileException; 6 | import javassist.CtBehavior; 7 | import javassist.NotFoundException; 8 | 9 | 10 | @SpirePatch( 11 | clz = CombustPower.class, 12 | method = SpirePatch.CONSTRUCTOR 13 | ) 14 | public class OwnerHplossAmountPowerPatch extends CloneablePowersPatch { 15 | public static void Raw(CtBehavior ctMethodToPatch) throws NotFoundException, CannotCompileException { 16 | addMakeCopyMethod(ctMethodToPatch, "hpLoss, amount"); 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /mod/src/main/java/basemod/patches/com/megacrit/cardcrawl/powers/CloneablePowers/OwnerNameAmountPowerPatch.java: -------------------------------------------------------------------------------- 1 | package basemod.patches.com.megacrit.cardcrawl.powers.CloneablePowers; 2 | 3 | import com.evacipated.cardcrawl.modthespire.lib.SpirePatch; 4 | import com.megacrit.cardcrawl.powers.GenericStrengthUpPower; 5 | import javassist.CannotCompileException; 6 | import javassist.CtBehavior; 7 | import javassist.NotFoundException; 8 | 9 | 10 | @SpirePatch( 11 | clz = GenericStrengthUpPower.class, 12 | method = SpirePatch.CONSTRUCTOR 13 | ) 14 | public class OwnerNameAmountPowerPatch extends CloneablePowersPatch { 15 | public static void Raw(CtBehavior ctMethodToPatch) throws NotFoundException, CannotCompileException { 16 | addMakeCopyMethod(ctMethodToPatch, "name, amount"); 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /mod/src/main/java/basemod/patches/com/megacrit/cardcrawl/powers/CloneablePowers/OwnerSourceAmountPowerPatch.java: -------------------------------------------------------------------------------- 1 | package basemod.patches.com.megacrit.cardcrawl.powers.CloneablePowers; 2 | 3 | import com.evacipated.cardcrawl.modthespire.lib.SpirePatch; 4 | import com.megacrit.cardcrawl.powers.ConstrictedPower; 5 | import com.megacrit.cardcrawl.powers.PoisonPower; 6 | import com.megacrit.cardcrawl.powers.watcher.VaultPower; 7 | import javassist.CannotCompileException; 8 | import javassist.CtBehavior; 9 | import javassist.NotFoundException; 10 | 11 | 12 | @SpirePatch( 13 | clz = ConstrictedPower.class, 14 | method = SpirePatch.CONSTRUCTOR 15 | ) 16 | @SpirePatch( 17 | clz = PoisonPower.class, 18 | method = SpirePatch.CONSTRUCTOR 19 | ) 20 | @SpirePatch( 21 | clz = VaultPower.class, 22 | method = SpirePatch.CONSTRUCTOR 23 | ) 24 | public class OwnerSourceAmountPowerPatch extends CloneablePowersPatch { 25 | public static void Raw(CtBehavior ctMethodToPatch) throws NotFoundException, CannotCompileException { 26 | addMakeCopyMethod(ctMethodToPatch, "source, amount"); 27 | } 28 | } 29 | -------------------------------------------------------------------------------- /mod/src/main/java/basemod/patches/com/megacrit/cardcrawl/powers/FixVigorReduction.java: -------------------------------------------------------------------------------- 1 | package basemod.patches.com.megacrit.cardcrawl.powers; 2 | 3 | import com.evacipated.cardcrawl.modthespire.lib.SpirePatch; 4 | import com.megacrit.cardcrawl.actions.common.ReducePowerAction; 5 | import com.megacrit.cardcrawl.actions.common.RemoveSpecificPowerAction; 6 | import com.megacrit.cardcrawl.powers.watcher.VigorPower; 7 | import javassist.CannotCompileException; 8 | import javassist.expr.ExprEditor; 9 | import javassist.expr.NewExpr; 10 | 11 | @SpirePatch( 12 | clz = VigorPower.class, 13 | method = "onUseCard" 14 | ) 15 | public class FixVigorReduction 16 | { 17 | public static ExprEditor Instrument() 18 | { 19 | return new ExprEditor() { 20 | @Override 21 | public void edit(NewExpr e) throws CannotCompileException 22 | { 23 | if (e.getClassName().equals(RemoveSpecificPowerAction.class.getName())) { 24 | e.replace("$_ = new " + ReducePowerAction.class.getName() + "($$, amount);"); 25 | } 26 | } 27 | }; 28 | } 29 | } 30 | -------------------------------------------------------------------------------- /mod/src/main/java/basemod/patches/com/megacrit/cardcrawl/relics/AbstractRelic/InstantObtainRelicGetHook.java: -------------------------------------------------------------------------------- 1 | package basemod.patches.com.megacrit.cardcrawl.relics.AbstractRelic; 2 | 3 | import basemod.BaseMod; 4 | import com.evacipated.cardcrawl.modthespire.lib.*; 5 | import com.megacrit.cardcrawl.characters.AbstractPlayer; 6 | import com.megacrit.cardcrawl.dungeons.AbstractDungeon; 7 | import com.megacrit.cardcrawl.relics.AbstractRelic; 8 | import javassist.CtBehavior; 9 | 10 | @SpirePatch( 11 | clz=AbstractRelic.class, 12 | method="instantObtain", 13 | paramtypez={ 14 | AbstractPlayer.class, 15 | int.class, 16 | boolean.class 17 | } 18 | ) 19 | public class InstantObtainRelicGetHook 20 | { 21 | @SpireInsertPatch( 22 | locator=Locator.class 23 | ) 24 | public static void Insert(AbstractRelic __instance, AbstractPlayer p, int slot, boolean callOnEquip) 25 | { 26 | if (AbstractDungeon.player == p) { 27 | BaseMod.publishRelicGet(__instance); 28 | } 29 | } 30 | 31 | private static class Locator extends SpireInsertLocator 32 | { 33 | @Override 34 | public int[] Locate(CtBehavior ctBehavior) throws Exception 35 | { 36 | Matcher matcher = new Matcher.FieldAccessMatcher(AbstractPlayer.class, "relics"); 37 | return LineFinder.findInOrder(ctBehavior, matcher); 38 | } 39 | } 40 | } 41 | -------------------------------------------------------------------------------- /mod/src/main/java/basemod/patches/com/megacrit/cardcrawl/relics/AbstractRelic/InstantObtainRelicGetHook2.java: -------------------------------------------------------------------------------- 1 | package basemod.patches.com.megacrit.cardcrawl.relics.AbstractRelic; 2 | 3 | import basemod.BaseMod; 4 | import com.evacipated.cardcrawl.modthespire.lib.*; 5 | import com.megacrit.cardcrawl.characters.AbstractPlayer; 6 | import com.megacrit.cardcrawl.relics.AbstractRelic; 7 | import javassist.CtBehavior; 8 | 9 | @SpirePatch( 10 | clz=AbstractRelic.class, 11 | method="instantObtain", 12 | paramtypez={} 13 | ) 14 | public class InstantObtainRelicGetHook2 15 | { 16 | @SpireInsertPatch( 17 | locator=Locator.class 18 | ) 19 | public static void Insert(AbstractRelic __instance) 20 | { 21 | BaseMod.publishRelicGet(__instance); 22 | } 23 | 24 | private static class Locator extends SpireInsertLocator 25 | { 26 | @Override 27 | public int[] Locate(CtBehavior ctBehavior) throws Exception 28 | { 29 | Matcher matcher = new Matcher.FieldAccessMatcher(AbstractPlayer.class, "relics"); 30 | return LineFinder.findInOrder(ctBehavior, matcher); 31 | } 32 | } 33 | } 34 | -------------------------------------------------------------------------------- /mod/src/main/java/basemod/patches/com/megacrit/cardcrawl/relics/AbstractRelic/ObtainRelicGetHook.java: -------------------------------------------------------------------------------- 1 | package basemod.patches.com.megacrit.cardcrawl.relics.AbstractRelic; 2 | 3 | import basemod.BaseMod; 4 | import com.evacipated.cardcrawl.modthespire.lib.*; 5 | import com.megacrit.cardcrawl.characters.AbstractPlayer; 6 | import com.megacrit.cardcrawl.relics.AbstractRelic; 7 | import javassist.CtBehavior; 8 | 9 | @SpirePatch( 10 | clz=AbstractRelic.class, 11 | method="obtain" 12 | ) 13 | public class ObtainRelicGetHook 14 | { 15 | @SpireInsertPatch( 16 | locator=Locator.class 17 | ) 18 | public static void Insert(AbstractRelic __instance) 19 | { 20 | BaseMod.publishRelicGet(__instance); 21 | } 22 | 23 | private static class Locator extends SpireInsertLocator 24 | { 25 | @Override 26 | public int[] Locate(CtBehavior ctBehavior) throws Exception 27 | { 28 | Matcher matcher = new Matcher.FieldAccessMatcher(AbstractPlayer.class, "relics"); 29 | return LineFinder.findInOrder(ctBehavior, matcher); 30 | } 31 | } 32 | } 33 | -------------------------------------------------------------------------------- /mod/src/main/java/basemod/patches/com/megacrit/cardcrawl/relics/AbstractRelic/ReorganizeObtainRelicGetHook.java: -------------------------------------------------------------------------------- 1 | package basemod.patches.com.megacrit.cardcrawl.relics.AbstractRelic; 2 | 3 | import basemod.BaseMod; 4 | import com.evacipated.cardcrawl.modthespire.lib.*; 5 | import com.megacrit.cardcrawl.characters.AbstractPlayer; 6 | import com.megacrit.cardcrawl.dungeons.AbstractDungeon; 7 | import com.megacrit.cardcrawl.relics.AbstractRelic; 8 | import javassist.CtBehavior; 9 | 10 | @SpirePatch( 11 | clz=AbstractRelic.class, 12 | method="reorganizeObtain" 13 | ) 14 | public class ReorganizeObtainRelicGetHook 15 | { 16 | @SpireInsertPatch( 17 | locator=Locator.class 18 | ) 19 | public static void Insert(AbstractRelic __instance, AbstractPlayer p, int slot, boolean callOnEquip, int relicAmount) 20 | { 21 | if (AbstractDungeon.player == p) { 22 | BaseMod.publishRelicGet(__instance); 23 | } 24 | } 25 | 26 | private static class Locator extends SpireInsertLocator 27 | { 28 | @Override 29 | public int[] Locate(CtBehavior ctBehavior) throws Exception 30 | { 31 | Matcher matcher = new Matcher.FieldAccessMatcher(AbstractPlayer.class, "relics"); 32 | return LineFinder.findInOrder(ctBehavior, matcher); 33 | } 34 | } 35 | } 36 | -------------------------------------------------------------------------------- /mod/src/main/java/basemod/patches/com/megacrit/cardcrawl/rooms/AbstractRoom/EndBattleHook.java: -------------------------------------------------------------------------------- 1 | package basemod.patches.com.megacrit.cardcrawl.rooms.AbstractRoom; 2 | 3 | import basemod.BaseMod; 4 | import com.evacipated.cardcrawl.modthespire.lib.SpirePatch; 5 | import com.megacrit.cardcrawl.rooms.AbstractRoom; 6 | 7 | @SpirePatch(cls="com.megacrit.cardcrawl.rooms.AbstractRoom", method="endBattle") 8 | public class EndBattleHook { 9 | public static void Postfix(Object __obj_instance) { 10 | BaseMod.publishPostBattle((AbstractRoom) __obj_instance); 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /mod/src/main/java/basemod/patches/com/megacrit/cardcrawl/rooms/AbstractRoom/PreRenderHook.java: -------------------------------------------------------------------------------- 1 | package basemod.patches.com.megacrit.cardcrawl.rooms.AbstractRoom; 2 | 3 | 4 | import basemod.BaseMod; 5 | import com.badlogic.gdx.graphics.g2d.SpriteBatch; 6 | import com.evacipated.cardcrawl.modthespire.lib.SpirePatch; 7 | import com.evacipated.cardcrawl.modthespire.lib.SpirePrefixPatch; 8 | import com.megacrit.cardcrawl.rooms.AbstractRoom; 9 | 10 | @SpirePatch(clz= AbstractRoom.class, method = "render") 11 | public class PreRenderHook { 12 | @SpirePrefixPatch 13 | public static void preRoomRenderHook(AbstractRoom __instance, SpriteBatch sb) { 14 | BaseMod.publishPreRoomRender(sb); 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /mod/src/main/java/basemod/patches/com/megacrit/cardcrawl/rooms/AbstractRoom/StartBattleHook.java: -------------------------------------------------------------------------------- 1 | package basemod.patches.com.megacrit.cardcrawl.rooms.AbstractRoom; 2 | 3 | import basemod.BaseMod; 4 | import com.evacipated.cardcrawl.modthespire.lib.*; 5 | import com.megacrit.cardcrawl.rooms.AbstractRoom; 6 | import javassist.CtBehavior; 7 | 8 | import java.util.ArrayList; 9 | 10 | @SpirePatch( 11 | cls = "com.megacrit.cardcrawl.rooms.AbstractRoom", 12 | method = "update" 13 | ) 14 | public class StartBattleHook { 15 | 16 | @SpireInsertPatch( 17 | locator=Locator.class 18 | ) 19 | public static void Insert(AbstractRoom __instance) { 20 | BaseMod.publishStartBattle(__instance); 21 | } 22 | 23 | private static class Locator extends SpireInsertLocator { 24 | @Override 25 | public int[] Locate(CtBehavior ctBehavior) throws Exception { 26 | Matcher finalMatcher = new Matcher.MethodCallMatcher("com.megacrit.cardcrawl.characters.AbstractPlayer", "applyStartOfCombatPreDrawLogic"); 27 | return LineFinder.findInOrder(ctBehavior, new ArrayList<>(), finalMatcher); 28 | } 29 | } 30 | } 31 | -------------------------------------------------------------------------------- /mod/src/main/java/basemod/patches/com/megacrit/cardcrawl/screens/DeathScreen/NotFoundFix.java: -------------------------------------------------------------------------------- 1 | package basemod.patches.com.megacrit.cardcrawl.screens.DeathScreen; 2 | 3 | import basemod.ReflectionHacks; 4 | import com.evacipated.cardcrawl.modthespire.lib.SpirePatch; 5 | import com.megacrit.cardcrawl.screens.GameOverScreen; 6 | import com.megacrit.cardcrawl.unlock.AbstractUnlock; 7 | 8 | import java.util.ArrayList; 9 | 10 | @SpirePatch( 11 | clz=GameOverScreen.class, 12 | method="calculateUnlockProgress" 13 | ) 14 | public class NotFoundFix { 15 | public static void Postfix(GameOverScreen __instance) { 16 | ArrayList unlockBundle = ReflectionHacks.getPrivate(__instance, GameOverScreen.class, "unlockBundle"); 17 | if (unlockBundle != null && unlockBundle.size() <= 0) { 18 | // game checks for null, not for wrong size 19 | ReflectionHacks.setPrivate(__instance, GameOverScreen.class, "unlockBundle", null); 20 | } 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /mod/src/main/java/basemod/patches/com/megacrit/cardcrawl/screens/DeathScreen/PostDeathHook.java: -------------------------------------------------------------------------------- 1 | package basemod.patches.com.megacrit.cardcrawl.screens.DeathScreen; 2 | 3 | import basemod.BaseMod; 4 | import com.evacipated.cardcrawl.modthespire.lib.SpirePatch; 5 | import com.megacrit.cardcrawl.cutscenes.Cutscene; 6 | import com.megacrit.cardcrawl.dungeons.AbstractDungeon; 7 | import com.megacrit.cardcrawl.screens.DeathScreen; 8 | import com.megacrit.cardcrawl.screens.VictoryScreen; 9 | 10 | @SpirePatch( 11 | clz=DeathScreen.class, 12 | method=SpirePatch.CONSTRUCTOR 13 | ) 14 | @SpirePatch( 15 | clz=VictoryScreen.class, 16 | method=SpirePatch.CONSTRUCTOR 17 | ) 18 | public class PostDeathHook 19 | { 20 | private static boolean doHook = true; 21 | 22 | public static void Postfix(Object __obj_instance, Object __monster_group) 23 | { 24 | if (__obj_instance instanceof VictoryScreen && !doHook) { 25 | return; 26 | } 27 | 28 | BaseMod.publishPostDeath(); 29 | } 30 | 31 | @SpirePatch( 32 | clz=Cutscene.class, 33 | method="openVictoryScreen" 34 | ) 35 | public static class StopMultiVictory 36 | { 37 | public static void Prefix(Cutscene __instance) 38 | { 39 | doHook = (AbstractDungeon.victoryScreen == null); 40 | } 41 | } 42 | } 43 | -------------------------------------------------------------------------------- /mod/src/main/java/basemod/patches/com/megacrit/cardcrawl/screens/SingleCardViewPopup/FixEnergyTooltip.java: -------------------------------------------------------------------------------- 1 | package basemod.patches.com.megacrit.cardcrawl.screens.SingleCardViewPopup; 2 | 3 | import com.badlogic.gdx.graphics.g2d.SpriteBatch; 4 | import com.evacipated.cardcrawl.modthespire.lib.*; 5 | import com.megacrit.cardcrawl.screens.SingleCardViewPopup; 6 | import javassist.CtBehavior; 7 | 8 | @SpirePatch( 9 | clz=SingleCardViewPopup.class, 10 | method="renderTips" 11 | ) 12 | public class FixEnergyTooltip 13 | { 14 | @SpireInsertPatch( 15 | locator=Locator.class, 16 | localvars={"s"} 17 | ) 18 | public static void Insert(SingleCardViewPopup __instance, SpriteBatch sb, @ByRef String[] s) 19 | { 20 | if (s[0].equals("[E]")) { 21 | s[0] = "[R]"; 22 | } 23 | } 24 | 25 | private static class Locator extends SpireInsertLocator 26 | { 27 | @Override 28 | public int[] Locate(CtBehavior ctBehavior) throws Exception 29 | { 30 | Matcher matcher = new Matcher.MethodCallMatcher(String.class, "equals"); 31 | return LineFinder.findInOrder(ctBehavior, matcher); 32 | } 33 | } 34 | } 35 | -------------------------------------------------------------------------------- /mod/src/main/java/basemod/patches/com/megacrit/cardcrawl/screens/SingleCardViewPopup/FixLockedArt.java: -------------------------------------------------------------------------------- 1 | package basemod.patches.com.megacrit.cardcrawl.screens.SingleCardViewPopup; 2 | 3 | import com.badlogic.gdx.graphics.Texture; 4 | import com.badlogic.gdx.graphics.g2d.TextureAtlas; 5 | import com.evacipated.cardcrawl.modthespire.lib.SpirePatch2; 6 | import com.megacrit.cardcrawl.helpers.ImageMaster; 7 | 8 | @SpirePatch2( 9 | clz = ImageMaster.class, 10 | method = "initialize" 11 | ) 12 | public class FixLockedArt 13 | { 14 | public static void Postfix() 15 | { 16 | ImageMaster.CARD_LOCKED_ATTACK_L = toRegion(ImageMaster.loadImage("images/cards/locked_attack_l.png")); 17 | ImageMaster.CARD_LOCKED_SKILL_L = toRegion(ImageMaster.loadImage("images/cards/locked_skill_l.png")); 18 | ImageMaster.CARD_LOCKED_POWER_L = toRegion(ImageMaster.loadImage("images/cards/locked_power_l.png")); 19 | } 20 | 21 | private static TextureAtlas.AtlasRegion toRegion(Texture tex) 22 | { 23 | return new TextureAtlas.AtlasRegion(tex, 0, 0, tex.getWidth(), tex.getHeight()); 24 | } 25 | } 26 | -------------------------------------------------------------------------------- /mod/src/main/java/basemod/patches/com/megacrit/cardcrawl/screens/SingleCardViewPopup/MissingPortraitFix.java: -------------------------------------------------------------------------------- 1 | package basemod.patches.com.megacrit.cardcrawl.screens.SingleCardViewPopup; 2 | 3 | import com.badlogic.gdx.graphics.g2d.SpriteBatch; 4 | import com.evacipated.cardcrawl.modthespire.lib.*; 5 | import com.evacipated.cardcrawl.modthespire.patcher.PatchingException; 6 | import com.megacrit.cardcrawl.cards.AbstractCard; 7 | import com.megacrit.cardcrawl.screens.SingleCardViewPopup; 8 | import javassist.CannotCompileException; 9 | import javassist.CtBehavior; 10 | 11 | @SpirePatch( 12 | clz=SingleCardViewPopup.class, 13 | method="renderPortrait" 14 | ) 15 | public class MissingPortraitFix 16 | { 17 | @SpireInsertPatch( 18 | locator=Locator.class, 19 | localvars={"card"} 20 | ) 21 | public static SpireReturn Insert(SingleCardViewPopup __instance, SpriteBatch sb, AbstractCard card) 22 | { 23 | if (card.jokePortrait == null) { 24 | return SpireReturn.Return(null); 25 | } 26 | return SpireReturn.Continue(); 27 | } 28 | 29 | private static class Locator extends SpireInsertLocator 30 | { 31 | public int[] Locate(CtBehavior ctMethodToPatch) throws CannotCompileException, PatchingException 32 | { 33 | Matcher finalMatcher = new Matcher.FieldAccessMatcher(AbstractCard.class, "jokePortrait"); 34 | return LineFinder.findInOrder(ctMethodToPatch, finalMatcher); 35 | } 36 | } 37 | } 38 | -------------------------------------------------------------------------------- /mod/src/main/java/basemod/patches/com/megacrit/cardcrawl/screens/SingleRelicViewPopup/FixFrameColor.java: -------------------------------------------------------------------------------- 1 | package basemod.patches.com.megacrit.cardcrawl.screens.SingleRelicViewPopup; 2 | 3 | import com.evacipated.cardcrawl.modthespire.lib.SpirePatch2; 4 | import com.evacipated.cardcrawl.modthespire.lib.SpirePrefixPatch; 5 | import com.megacrit.cardcrawl.relics.AbstractRelic; 6 | import com.megacrit.cardcrawl.screens.SingleRelicViewPopup; 7 | import com.megacrit.cardcrawl.unlock.UnlockTracker; 8 | 9 | @SpirePatch2( 10 | clz = SingleRelicViewPopup.class, 11 | method = "generateFrameImg" 12 | ) 13 | public class FixFrameColor 14 | { 15 | @SpirePrefixPatch 16 | public static void fix(AbstractRelic ___relic) 17 | { 18 | ___relic.isSeen = UnlockTracker.isRelicSeen(___relic.relicId); 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /mod/src/main/java/basemod/patches/com/megacrit/cardcrawl/screens/SingleRelicViewPopup/MultiwordKeywords.java: -------------------------------------------------------------------------------- 1 | package basemod.patches.com.megacrit.cardcrawl.screens.SingleRelicViewPopup; 2 | 3 | import com.evacipated.cardcrawl.modthespire.lib.SpirePatch; 4 | import com.megacrit.cardcrawl.relics.AbstractRelic; 5 | import com.megacrit.cardcrawl.screens.SingleRelicViewPopup; 6 | import javassist.CannotCompileException; 7 | import javassist.expr.ExprEditor; 8 | import javassist.expr.FieldAccess; 9 | 10 | @SpirePatch( 11 | clz=SingleRelicViewPopup.class, 12 | method="renderDescription" 13 | ) 14 | public class MultiwordKeywords 15 | { 16 | public static ExprEditor Instrument() 17 | { 18 | return new ExprEditor() 19 | { 20 | @Override 21 | public void edit(FieldAccess f) throws CannotCompileException 22 | { 23 | if (f.getClassName().equals(AbstractRelic.class.getName()) && f.getFieldName().equals("description")) { 24 | f.replace("$_ = " + MultiwordKeywords.class.getName() + ".Do($proceed($$));"); 25 | } 26 | } 27 | }; 28 | } 29 | 30 | public static String Do(String input) 31 | { 32 | return basemod.patches.com.megacrit.cardcrawl.relics.AbstractRelic.MultiwordKeywords.replaceMultiWordKeywords(input); 33 | } 34 | } 35 | -------------------------------------------------------------------------------- /mod/src/main/java/basemod/patches/com/megacrit/cardcrawl/screens/charSelect/CharacterOption/HideLongRelicDescriptions.java: -------------------------------------------------------------------------------- 1 | package basemod.patches.com.megacrit.cardcrawl.screens.charSelect.CharacterOption; 2 | 3 | import com.badlogic.gdx.graphics.g2d.SpriteBatch; 4 | import com.evacipated.cardcrawl.modthespire.lib.SpirePatch; 5 | import com.evacipated.cardcrawl.modthespire.lib.SpireReturn; 6 | import com.megacrit.cardcrawl.core.Settings; 7 | import com.megacrit.cardcrawl.screens.charSelect.CharacterOption; 8 | 9 | @SpirePatch( 10 | clz=CharacterOption.class, 11 | method="renderInfo" 12 | ) 13 | public class HideLongRelicDescriptions 14 | { 15 | public static SpireReturn Prefix(CharacterOption __instance, SpriteBatch sb, float ___infoX) 16 | { 17 | if (___infoX < -600 * Settings.scale) { 18 | return SpireReturn.Return(null); 19 | } 20 | return SpireReturn.Continue(); 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /mod/src/main/java/basemod/patches/com/megacrit/cardcrawl/screens/charSelect/CharacterOption/MultilineStarterRelicFix.java: -------------------------------------------------------------------------------- 1 | package basemod.patches.com.megacrit.cardcrawl.screens.charSelect.CharacterOption; 2 | 3 | import com.badlogic.gdx.graphics.g2d.SpriteBatch; 4 | import com.evacipated.cardcrawl.modthespire.lib.SpirePatch; 5 | import com.megacrit.cardcrawl.screens.charSelect.CharacterOption; 6 | import javassist.CannotCompileException; 7 | import javassist.expr.ExprEditor; 8 | import javassist.expr.MethodCall; 9 | 10 | @SpirePatch(clz = CharacterOption.class, method = "renderRelics", paramtypez = {SpriteBatch.class}) 11 | public class MultilineStarterRelicFix { 12 | 13 | public static ExprEditor Instrument() { 14 | final int[] counter = {0}; 15 | return new ExprEditor() { 16 | @Override 17 | public void edit(MethodCall methodCall) throws CannotCompileException { 18 | if (methodCall.getMethodName().equals("renderSmartText")) { 19 | if (counter[0] == 1 || counter[0] == 3) { 20 | methodCall.replace( 21 | "$7 = 30 * com.megacrit.cardcrawl.core.Settings.scale; $_ = $proceed($$);" 22 | ); 23 | } 24 | counter[0]++; 25 | } 26 | } 27 | }; 28 | } 29 | 30 | } -------------------------------------------------------------------------------- /mod/src/main/java/basemod/patches/com/megacrit/cardcrawl/screens/compendium/CardLibraryScreen/NoCompendium.java: -------------------------------------------------------------------------------- 1 | package basemod.patches.com.megacrit.cardcrawl.screens.compendium.CardLibraryScreen; 2 | 3 | import java.lang.annotation.ElementType; 4 | import java.lang.annotation.Retention; 5 | import java.lang.annotation.RetentionPolicy; 6 | import java.lang.annotation.Target; 7 | 8 | @Target({ElementType.TYPE}) 9 | @Retention(RetentionPolicy.RUNTIME) 10 | public @interface NoCompendium {} 11 | -------------------------------------------------------------------------------- /mod/src/main/java/basemod/patches/com/megacrit/cardcrawl/screens/compendium/CardLibraryScreen/NoLibraryType.java: -------------------------------------------------------------------------------- 1 | package basemod.patches.com.megacrit.cardcrawl.screens.compendium.CardLibraryScreen; 2 | 3 | import java.lang.annotation.ElementType; 4 | import java.lang.annotation.Retention; 5 | import java.lang.annotation.RetentionPolicy; 6 | import java.lang.annotation.Target; 7 | 8 | @Target({ElementType.FIELD}) 9 | @Retention(RetentionPolicy.RUNTIME) 10 | public @interface NoLibraryType 11 | { 12 | } 13 | -------------------------------------------------------------------------------- /mod/src/main/java/basemod/patches/com/megacrit/cardcrawl/screens/custom/CustomModeScreen/AddCustomModeModsHook.java: -------------------------------------------------------------------------------- 1 | package basemod.patches.com.megacrit.cardcrawl.screens.custom.CustomModeScreen; 2 | 3 | import basemod.BaseMod; 4 | import basemod.ReflectionHacks; 5 | import com.evacipated.cardcrawl.modthespire.lib.SpirePatch; 6 | import com.megacrit.cardcrawl.screens.custom.CustomMod; 7 | import com.megacrit.cardcrawl.screens.custom.CustomModeScreen; 8 | 9 | import java.util.List; 10 | 11 | @SpirePatch( 12 | clz = CustomModeScreen.class, 13 | method = "initializeMods" 14 | ) 15 | public class AddCustomModeModsHook 16 | { 17 | public static void Postfix(CustomModeScreen _instance) { 18 | List modList = (List) ReflectionHacks.getPrivate(_instance, CustomModeScreen.class, "modList"); 19 | BaseMod.publishAddCustomModeMods(modList); 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /mod/src/main/java/basemod/patches/com/megacrit/cardcrawl/screens/custom/CustomModeScreen/InitializeCharacterButtons.java: -------------------------------------------------------------------------------- 1 | package basemod.patches.com.megacrit.cardcrawl.screens.custom.CustomModeScreen; 2 | 3 | import basemod.BaseMod; 4 | import com.evacipated.cardcrawl.modthespire.lib.*; 5 | import com.megacrit.cardcrawl.screens.custom.CustomModeCharacterButton; 6 | import com.megacrit.cardcrawl.screens.custom.CustomModeScreen; 7 | import javassist.CtBehavior; 8 | 9 | import java.util.ArrayList; 10 | 11 | @SpirePatch( 12 | clz=CustomModeScreen.class, 13 | method="initializeCharacters" 14 | ) 15 | public class InitializeCharacterButtons 16 | { 17 | @SpireInsertPatch( 18 | locator=Locator.class 19 | ) 20 | public static void Insert(CustomModeScreen __instance) 21 | { 22 | __instance.options.addAll(BaseMod.generateCustomCharacterOptions()); 23 | } 24 | 25 | private static class Locator extends SpireInsertLocator 26 | { 27 | @Override 28 | public int[] Locate(CtBehavior ctBehavior) throws Exception { 29 | Matcher finalMatcher = new Matcher.NewExprMatcher(CustomModeCharacterButton.class); 30 | 31 | int[] locations = LineFinder.findAllInOrder(ctBehavior, finalMatcher); 32 | return new int[]{locations[locations.length - 1]+1}; 33 | } 34 | } 35 | } 36 | -------------------------------------------------------------------------------- /mod/src/main/java/basemod/patches/com/megacrit/cardcrawl/screens/options/OptionsPanel/FixLanguageDropdownSizeInRun.java: -------------------------------------------------------------------------------- 1 | package basemod.patches.com.megacrit.cardcrawl.screens.options.OptionsPanel; 2 | 3 | import com.evacipated.cardcrawl.modthespire.lib.SpirePatch2; 4 | import com.megacrit.cardcrawl.screens.options.OptionsPanel; 5 | import javassist.CannotCompileException; 6 | import javassist.expr.ExprEditor; 7 | import javassist.expr.FieldAccess; 8 | 9 | @SpirePatch2( 10 | clz = OptionsPanel.class, 11 | method = "refresh" 12 | ) 13 | public class FixLanguageDropdownSizeInRun 14 | { 15 | public static ExprEditor Instrument() 16 | { 17 | return new ExprEditor() { 18 | @Override 19 | public void edit(FieldAccess f) throws CannotCompileException 20 | { 21 | if (f.isWriter() && f.getClassName().equals(OptionsPanel.class.getName()) && f.getFieldName().equals("languageDropdown")) { 22 | f.replace(""); 23 | } 24 | } 25 | }; 26 | } 27 | } 28 | -------------------------------------------------------------------------------- /mod/src/main/java/basemod/patches/com/megacrit/cardcrawl/screens/options/SettingsScreen/PopupSwitch.java: -------------------------------------------------------------------------------- 1 | package basemod.patches.com.megacrit.cardcrawl.screens.options.SettingsScreen; 2 | 3 | import basemod.BaseMod; 4 | import com.badlogic.gdx.Gdx; 5 | import com.evacipated.cardcrawl.modthespire.lib.SpireInsertPatch; 6 | import com.evacipated.cardcrawl.modthespire.lib.SpirePatch; 7 | import com.megacrit.cardcrawl.characters.AbstractPlayer; 8 | import com.megacrit.cardcrawl.dungeons.AbstractDungeon; 9 | import com.megacrit.cardcrawl.screens.options.SettingsScreen; 10 | 11 | @SpirePatch(cls="com.megacrit.cardcrawl.screens.options.SettingsScreen", method="popup") 12 | public class PopupSwitch { 13 | @SpireInsertPatch(rloc=35) 14 | public static void Insert(Object __obj_instance, Object typeObj) { 15 | // Probably not in a game 16 | if (AbstractDungeon.player == null) { 17 | return; 18 | } 19 | 20 | SettingsScreen screen = (SettingsScreen) __obj_instance; 21 | AbstractPlayer.PlayerClass selection = AbstractDungeon.player.chosenClass; 22 | if (!BaseMod.isBaseGameCharacter(selection)) { 23 | System.out.println("looking for file: " + (BaseMod.save_path + selection.name() + ".autosave")); 24 | if (!Gdx.files.local(BaseMod.save_path + selection.name() + ".autosave").exists()) { 25 | screen.exitPopup.desc = SettingsScreen.TEXT[3]; 26 | } 27 | } 28 | } 29 | } 30 | -------------------------------------------------------------------------------- /mod/src/main/java/basemod/patches/com/megacrit/cardcrawl/screens/runHistory/TinyCard/ColorPatch.java: -------------------------------------------------------------------------------- 1 | package basemod.patches.com.megacrit.cardcrawl.screens.runHistory.TinyCard; 2 | 3 | import basemod.BaseMod; 4 | import com.badlogic.gdx.graphics.Color; 5 | import com.evacipated.cardcrawl.modthespire.lib.SpirePatch; 6 | import com.megacrit.cardcrawl.cards.AbstractCard; 7 | import com.megacrit.cardcrawl.screens.runHistory.TinyCard; 8 | 9 | public class ColorPatch 10 | { 11 | @SpirePatch( 12 | clz = TinyCard.class, 13 | method = "getIconBackgroundColor" 14 | ) 15 | public static class BackgroundColor 16 | { 17 | public static Color Postfix(Color __result, TinyCard __instance, AbstractCard card) 18 | { 19 | if (!BaseMod.isBaseGameCardColor(card.color)) { 20 | Color c = BaseMod.getBackColor(card.color); 21 | if (c != null) { 22 | return c; 23 | } 24 | } 25 | return __result; 26 | } 27 | } 28 | 29 | @SpirePatch( 30 | clz = TinyCard.class, 31 | method = "getIconDescriptionColor" 32 | ) 33 | public static class DescriptionColor 34 | { 35 | public static Color Postfix(Color __result, TinyCard __instance, AbstractCard card) 36 | { 37 | if (!BaseMod.isBaseGameCardColor(card.color)) { 38 | Color c = BaseMod.getBackColor(card.color); 39 | if (c != null) { 40 | return c.cpy().lerp(Color.DARK_GRAY, 0.7f); 41 | } 42 | } 43 | return __result; 44 | } 45 | } 46 | } 47 | -------------------------------------------------------------------------------- /mod/src/main/java/basemod/patches/com/megacrit/cardcrawl/screens/runHistory/TinyCard/HitboxPatch.java: -------------------------------------------------------------------------------- 1 | package basemod.patches.com.megacrit.cardcrawl.screens.runHistory.TinyCard; 2 | 3 | import com.evacipated.cardcrawl.modthespire.lib.SpirePatch; 4 | import com.evacipated.cardcrawl.modthespire.lib.SpirePatch2; 5 | import com.evacipated.cardcrawl.modthespire.lib.SpirePostfixPatch; 6 | import com.megacrit.cardcrawl.core.Settings; 7 | import com.megacrit.cardcrawl.screens.runHistory.TinyCard; 8 | 9 | public class HitboxPatch { 10 | @SpirePatch2(clz = TinyCard.class, method = SpirePatch.CONSTRUCTOR) 11 | public static class FixHitboxHeight { 12 | @SpirePostfixPatch 13 | public static void scaleProperly(TinyCard __instance) { 14 | __instance.hb.height *= Settings.scale; 15 | } 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /mod/src/main/java/basemod/patches/com/megacrit/cardcrawl/screens/select/GridCardSelectScreen/GridCardSelectScreenFields.java: -------------------------------------------------------------------------------- 1 | package basemod.patches.com.megacrit.cardcrawl.screens.select.GridCardSelectScreen; 2 | 3 | import com.evacipated.cardcrawl.modthespire.lib.SpireField; 4 | import com.evacipated.cardcrawl.modthespire.lib.SpirePatch; 5 | import com.megacrit.cardcrawl.cards.AbstractCard; 6 | import com.megacrit.cardcrawl.screens.select.GridCardSelectScreen; 7 | 8 | import java.util.ArrayList; 9 | 10 | @SpirePatch(clz = GridCardSelectScreen.class, method = SpirePatch.CLASS) 11 | public class GridCardSelectScreenFields { 12 | 13 | public interface GridCallback { 14 | void callback(ArrayList selectedCards); 15 | } 16 | 17 | public static SpireField forCustomReward = new SpireField<>(() -> false); 18 | public static SpireField customCallback = new SpireField<>(() -> null); 19 | 20 | static void resetFields(GridCardSelectScreen instance) { 21 | GridCardSelectScreenFields.forCustomReward.set(instance, false); 22 | GridCardSelectScreenFields.customCallback.set(instance, null); 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /mod/src/main/java/basemod/patches/com/megacrit/cardcrawl/shop/ShopScreen/PostCreateShopPotionHook.java: -------------------------------------------------------------------------------- 1 | package basemod.patches.com.megacrit.cardcrawl.shop.ShopScreen; 2 | 3 | import basemod.BaseMod; 4 | import basemod.ReflectionHacks; 5 | import com.evacipated.cardcrawl.modthespire.lib.SpirePatch; 6 | import com.megacrit.cardcrawl.shop.ShopScreen; 7 | import com.megacrit.cardcrawl.shop.StorePotion; 8 | 9 | import java.util.ArrayList; 10 | 11 | @SpirePatch(cls="com.megacrit.cardcrawl.shop.ShopScreen", method="initPotions") 12 | public class PostCreateShopPotionHook { 13 | // @SpireInsertPatch(loc=315, localvars={"i", "potion"}) 14 | // public static void Insert(Object __obj_instance, int i, Object potionObj) { 15 | // potionObj = BaseMod.publishPostCreateShopPotion((StorePotion) potionObj, i, (ShopScreen) __obj_instance); 16 | // } 17 | 18 | @SuppressWarnings("unchecked") 19 | public static void Postfix(Object __obj_instance) { 20 | ShopScreen me = (ShopScreen) __obj_instance; 21 | BaseMod.publishPostCreateShopPotions( 22 | (ArrayList) ReflectionHacks.getPrivate(me, ShopScreen.class, "potions"), 23 | me 24 | ); 25 | } 26 | 27 | } 28 | -------------------------------------------------------------------------------- /mod/src/main/java/basemod/patches/com/megacrit/cardcrawl/shop/ShopScreen/PostCreateShopRelicHook.java: -------------------------------------------------------------------------------- 1 | package basemod.patches.com.megacrit.cardcrawl.shop.ShopScreen; 2 | 3 | import basemod.BaseMod; 4 | import basemod.ReflectionHacks; 5 | import com.evacipated.cardcrawl.modthespire.lib.SpirePatch; 6 | import com.megacrit.cardcrawl.shop.ShopScreen; 7 | import com.megacrit.cardcrawl.shop.StoreRelic; 8 | 9 | import java.util.ArrayList; 10 | 11 | @SpirePatch(cls="com.megacrit.cardcrawl.shop.ShopScreen", method="initRelics") 12 | public class PostCreateShopRelicHook { 13 | // @SpireInsertPatch(loc=300, localvars={"i", "relic"}) 14 | // public static void Insert(Object __obj_instance, int i, Object relicObj) { 15 | // relicObj = BaseMod.publishPostCreateShopRelic((StoreRelic) relicObj, i, (ShopScreen) __obj_instance); 16 | // } 17 | 18 | @SuppressWarnings("unchecked") 19 | public static void Postfix(Object __obj_instance) { 20 | ShopScreen me = (ShopScreen) __obj_instance; 21 | BaseMod.publishPostCreateShopRelics( 22 | (ArrayList) ReflectionHacks.getPrivate(me, ShopScreen.class, "relics"), 23 | me 24 | ); 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /mod/src/main/java/basemod/patches/com/megacrit/cardcrawl/ui/buttons/CancelButton/ModSettingsCheck.java: -------------------------------------------------------------------------------- 1 | package basemod.patches.com.megacrit.cardcrawl.ui.buttons.CancelButton; 2 | 3 | import com.evacipated.cardcrawl.modthespire.lib.SpirePatch; 4 | import javassist.CannotCompileException; 5 | import javassist.expr.ExprEditor; 6 | import javassist.expr.MethodCall; 7 | 8 | @SpirePatch(cls="com.megacrit.cardcrawl.ui.buttons.CancelButton", method="update") 9 | public class ModSettingsCheck { 10 | public static ExprEditor Instrument() { 11 | return new ExprEditor() { 12 | public void edit(MethodCall m) throws CannotCompileException { 13 | if (m.getClassName().equals("com.megacrit.cardcrawl.ui.buttons.CancelButton") && m.getMethodName().equals("hide")) { 14 | m.replace("{ if (basemod.BaseMod.modSettingsUp) { basemod.BaseMod.modSettingsUp = false; return; } $proceed(); }"); 15 | } 16 | } 17 | }; 18 | } 19 | } -------------------------------------------------------------------------------- /mod/src/main/java/basemod/patches/com/megacrit/cardcrawl/ui/buttons/ProceedButton/ResetSeenEvents.java: -------------------------------------------------------------------------------- 1 | package basemod.patches.com.megacrit.cardcrawl.ui.buttons.ProceedButton; 2 | 3 | import basemod.patches.com.megacrit.cardcrawl.characters.AbstractPlayer.SeenEvents; 4 | import com.evacipated.cardcrawl.modthespire.lib.SpirePatch; 5 | import com.evacipated.cardcrawl.modthespire.lib.SpirePrefixPatch; 6 | import com.megacrit.cardcrawl.dungeons.AbstractDungeon; 7 | import com.megacrit.cardcrawl.rooms.AbstractRoom; 8 | import com.megacrit.cardcrawl.ui.buttons.ProceedButton; 9 | 10 | @SpirePatch( 11 | clz = ProceedButton.class, 12 | method = "goToNextDungeon" 13 | ) 14 | public class ResetSeenEvents { 15 | @SpirePrefixPatch 16 | public static void reset(ProceedButton __instance, AbstractRoom room) { 17 | if (AbstractDungeon.actNum % 3 == 0) //Reset seen events at the end of every third act for endless 18 | { 19 | SeenEvents.seenEvents.get(AbstractDungeon.player).clear(); 20 | } 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /mod/src/main/java/basemod/patches/com/megacrit/cardcrawl/ui/campfire/AbstractCampfireOption/PostCampfireHook.java: -------------------------------------------------------------------------------- 1 | package basemod.patches.com.megacrit.cardcrawl.ui.campfire.AbstractCampfireOption; 2 | 3 | import com.evacipated.cardcrawl.modthespire.lib.SpirePatch; 4 | import javassist.CannotCompileException; 5 | import javassist.expr.ExprEditor; 6 | import javassist.expr.FieldAccess; 7 | 8 | @SpirePatch(cls="com.megacrit.cardcrawl.ui.campfire.AbstractCampfireOption", method="update") 9 | public class PostCampfireHook { 10 | public static ExprEditor Instrument() { 11 | return new ExprEditor() { 12 | public void edit(FieldAccess f) throws CannotCompileException { 13 | if (f.getClassName().equals("com.megacrit.cardcrawl.rooms.CampfireUI") && f.getFieldName().equals("somethingSelected") && f.isWriter()) { 14 | f.replace("{ $0.somethingSelected = basemod.BaseMod.publishPostCampfire(); }"); 15 | } 16 | } 17 | }; 18 | } 19 | } -------------------------------------------------------------------------------- /mod/src/main/java/basemod/patches/com/megacrit/cardcrawl/ui/panels/EnergyPanel/InfiniteEnergy.java: -------------------------------------------------------------------------------- 1 | package basemod.patches.com.megacrit.cardcrawl.ui.panels.EnergyPanel; 2 | 3 | import basemod.DevConsole; 4 | import com.evacipated.cardcrawl.modthespire.lib.SpirePatch2; 5 | import com.megacrit.cardcrawl.ui.panels.EnergyPanel; 6 | 7 | @SpirePatch2( 8 | clz = EnergyPanel.class, 9 | method = "useEnergy" 10 | ) 11 | public class InfiniteEnergy 12 | { 13 | private static int saveTotalCount; 14 | 15 | public static void Prefix() 16 | { 17 | saveTotalCount = EnergyPanel.totalCount; 18 | } 19 | 20 | public static void Postfix() 21 | { 22 | if (DevConsole.infiniteEnergy) { 23 | EnergyPanel.totalCount = saveTotalCount; 24 | } 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /mod/src/main/java/basemod/patches/com/megacrit/cardcrawl/ui/panels/PotionPopUp/PostPotionUseHook.java: -------------------------------------------------------------------------------- 1 | package basemod.patches.com.megacrit.cardcrawl.ui.panels.PotionPopUp; 2 | 3 | import basemod.BaseMod; 4 | import com.evacipated.cardcrawl.modthespire.lib.*; 5 | import com.megacrit.cardcrawl.audio.SoundMaster; 6 | import com.megacrit.cardcrawl.potions.AbstractPotion; 7 | import com.megacrit.cardcrawl.ui.panels.PotionPopUp; 8 | import javassist.CtBehavior; 9 | 10 | @SpirePatch( 11 | clz=PotionPopUp.class, 12 | method="updateInput" 13 | ) 14 | public class PostPotionUseHook 15 | { 16 | @SpireInsertPatch( 17 | locator=Locator.class, 18 | localvars={"potion"} 19 | ) 20 | public static void Insert(PotionPopUp __instance, AbstractPotion potion) 21 | { 22 | BaseMod.publishPostPotionUse(potion); 23 | } 24 | 25 | private static class Locator extends SpireInsertLocator 26 | { 27 | @Override 28 | public int[] Locate(CtBehavior ctMethodToPatch) throws Exception 29 | { 30 | Matcher finalMatcher = new Matcher.MethodCallMatcher(SoundMaster.class, "play"); 31 | return LineFinder.findInOrder(ctMethodToPatch, finalMatcher); 32 | } 33 | } 34 | } 35 | -------------------------------------------------------------------------------- /mod/src/main/java/basemod/patches/com/megacrit/cardcrawl/ui/panels/PotionPopUp/PostPotionUseHookTargetMode.java: -------------------------------------------------------------------------------- 1 | package basemod.patches.com.megacrit.cardcrawl.ui.panels.PotionPopUp; 2 | 3 | import basemod.BaseMod; 4 | import com.evacipated.cardcrawl.modthespire.lib.*; 5 | import com.megacrit.cardcrawl.potions.AbstractPotion; 6 | import com.megacrit.cardcrawl.ui.panels.PotionPopUp; 7 | import javassist.CtBehavior; 8 | 9 | import java.util.Collections; 10 | 11 | @SpirePatch( 12 | clz=PotionPopUp.class, 13 | method="updateTargetMode" 14 | ) 15 | public class PostPotionUseHookTargetMode 16 | { 17 | @SpireInsertPatch( 18 | locator=Locator.class, 19 | localvars={"potion"} 20 | ) 21 | public static void Insert(PotionPopUp __instance, AbstractPotion potion) 22 | { 23 | BaseMod.publishPostPotionUse(potion); 24 | } 25 | 26 | private static class Locator extends SpireInsertLocator 27 | { 28 | @Override 29 | public int[] Locate(CtBehavior ctMethodToPatch) throws Exception 30 | { 31 | Matcher finalMatcher = new Matcher.FieldAccessMatcher(PotionPopUp.class, "targetMode"); 32 | return LineFinder.findInOrder(ctMethodToPatch, Collections.singletonList(finalMatcher), finalMatcher); 33 | } 34 | } 35 | } 36 | -------------------------------------------------------------------------------- /mod/src/main/java/basemod/patches/com/megacrit/cardcrawl/ui/panels/PotionPopUp/PrePotionUseHook.java: -------------------------------------------------------------------------------- 1 | package basemod.patches.com.megacrit.cardcrawl.ui.panels.PotionPopUp; 2 | 3 | import basemod.BaseMod; 4 | import com.evacipated.cardcrawl.modthespire.lib.*; 5 | import com.evacipated.cardcrawl.modthespire.patcher.PatchingException; 6 | import com.megacrit.cardcrawl.potions.AbstractPotion; 7 | import com.megacrit.cardcrawl.ui.panels.PotionPopUp; 8 | import javassist.CannotCompileException; 9 | import javassist.CtBehavior; 10 | 11 | @SpirePatch( 12 | clz=PotionPopUp.class, 13 | method="updateInput" 14 | ) 15 | public class PrePotionUseHook 16 | { 17 | @SpireInsertPatch( 18 | locator=Locator.class, 19 | localvars={"potion"} 20 | ) 21 | public static void Insert(PotionPopUp __instance, AbstractPotion potion) 22 | { 23 | BaseMod.publishPrePotionUse(potion); 24 | } 25 | 26 | private static class Locator extends SpireInsertLocator 27 | { 28 | public int[] Locate(CtBehavior ctMethodToPatch) throws CannotCompileException, PatchingException 29 | { 30 | Matcher finalMatcher = new Matcher.MethodCallMatcher(AbstractPotion.class, "use"); 31 | return LineFinder.findInOrder(ctMethodToPatch, finalMatcher); 32 | } 33 | } 34 | } 35 | -------------------------------------------------------------------------------- /mod/src/main/java/basemod/patches/com/megacrit/cardcrawl/ui/panels/PotionPopUp/PrePotionUseHookTargetMode.java: -------------------------------------------------------------------------------- 1 | package basemod.patches.com.megacrit.cardcrawl.ui.panels.PotionPopUp; 2 | 3 | import basemod.BaseMod; 4 | import com.evacipated.cardcrawl.modthespire.lib.*; 5 | import com.evacipated.cardcrawl.modthespire.patcher.PatchingException; 6 | import com.megacrit.cardcrawl.potions.AbstractPotion; 7 | import com.megacrit.cardcrawl.ui.panels.PotionPopUp; 8 | import javassist.CannotCompileException; 9 | import javassist.CtBehavior; 10 | 11 | @SpirePatch( 12 | clz=PotionPopUp.class, 13 | method="updateTargetMode" 14 | ) 15 | public class PrePotionUseHookTargetMode 16 | { 17 | @SpireInsertPatch( 18 | locator=Locator.class, 19 | localvars={"potion"} 20 | ) 21 | public static void Insert(PotionPopUp __instance, AbstractPotion potion) 22 | { 23 | BaseMod.publishPrePotionUse(potion); 24 | } 25 | 26 | private static class Locator extends SpireInsertLocator 27 | { 28 | public int[] Locate(CtBehavior ctMethodToPatch) throws CannotCompileException, PatchingException 29 | { 30 | Matcher finalMatcher = new Matcher.MethodCallMatcher(AbstractPotion.class, "use"); 31 | return LineFinder.findInOrder(ctMethodToPatch, finalMatcher); 32 | } 33 | } 34 | } 35 | -------------------------------------------------------------------------------- /mod/src/main/java/basemod/patches/com/megacrit/cardcrawl/unlock/UnlockTracker/GetUnlockBundleSwitch.java: -------------------------------------------------------------------------------- 1 | package basemod.patches.com.megacrit.cardcrawl.unlock.UnlockTracker; 2 | 3 | import basemod.BaseMod; 4 | import basemod.abstracts.CustomUnlock; 5 | import basemod.abstracts.CustomUnlockBundle; 6 | import com.evacipated.cardcrawl.modthespire.lib.SpirePatch; 7 | import com.megacrit.cardcrawl.characters.AbstractPlayer; 8 | import com.megacrit.cardcrawl.core.CardCrawlGame; 9 | import com.megacrit.cardcrawl.unlock.AbstractUnlock; 10 | import com.megacrit.cardcrawl.unlock.UnlockTracker; 11 | 12 | import java.util.ArrayList; 13 | 14 | @SpirePatch( 15 | clz=UnlockTracker.class, 16 | method="getUnlockBundle" 17 | ) 18 | public class GetUnlockBundleSwitch 19 | { 20 | public static ArrayList Postfix(ArrayList __result, AbstractPlayer.PlayerClass c, int unlockLevel) 21 | { 22 | if (CardCrawlGame.characterManager != null && !BaseMod.isBaseGameCharacter(c)) { 23 | CustomUnlockBundle bundle = BaseMod.getUnlockBundleFor(c, unlockLevel); 24 | if (bundle != null) { 25 | ArrayList unlocks = bundle.getUnlocks(); 26 | __result.addAll(unlocks); 27 | } 28 | 29 | // Avoid crash after victory and unlock 30 | if (__result.isEmpty()) { 31 | return null; 32 | } 33 | } 34 | return __result; 35 | } 36 | } 37 | -------------------------------------------------------------------------------- /mod/src/main/java/basemod/patches/com/megacrit/cardcrawl/unlock/UnlockTracker/PostRefresh.java: -------------------------------------------------------------------------------- 1 | package basemod.patches.com.megacrit.cardcrawl.unlock.UnlockTracker; 2 | 3 | import basemod.BaseMod; 4 | import com.evacipated.cardcrawl.modthespire.lib.SpirePatch; 5 | 6 | @SpirePatch(cls="com.megacrit.cardcrawl.unlock.UnlockTracker", method="refresh") 7 | public class PostRefresh { 8 | public static void Postfix() { 9 | BaseMod.publishPostRefresh(); 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /mod/src/main/java/basemod/patches/com/megacrit/cardcrawl/unlock/UnlockTracker/UnlockCardModID.java: -------------------------------------------------------------------------------- 1 | package basemod.patches.com.megacrit.cardcrawl.unlock.UnlockTracker; 2 | 3 | import basemod.BaseMod; 4 | import com.evacipated.cardcrawl.modthespire.lib.ByRef; 5 | import com.evacipated.cardcrawl.modthespire.lib.SpirePatch; 6 | 7 | @SpirePatch( 8 | cls="com.megacrit.cardcrawl.unlock.UnlockTracker", 9 | method="unlockCard" 10 | ) 11 | public class UnlockCardModID 12 | { 13 | public static void Prefix(@ByRef String[] key) 14 | { 15 | key[0] = BaseMod.convertToModID(key[0]); 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /mod/src/main/java/basemod/patches/com/megacrit/cardcrawl/vfx/FixLimeColor.java: -------------------------------------------------------------------------------- 1 | package basemod.patches.com.megacrit.cardcrawl.vfx; 2 | 3 | import com.badlogic.gdx.graphics.Color; 4 | import com.evacipated.cardcrawl.modthespire.lib.SpireInstrumentPatch; 5 | import com.evacipated.cardcrawl.modthespire.lib.SpirePatch; 6 | import com.evacipated.cardcrawl.modthespire.lib.SpirePatch2; 7 | import com.megacrit.cardcrawl.vfx.combat.MiracleEffect; 8 | import javassist.CannotCompileException; 9 | import javassist.expr.ExprEditor; 10 | import javassist.expr.FieldAccess; 11 | 12 | @SpirePatch2( 13 | clz = MiracleEffect.class, 14 | method = SpirePatch.CONSTRUCTOR, 15 | paramtypez = { 16 | Color.class, 17 | Color.class, 18 | String.class 19 | } 20 | ) 21 | public class FixLimeColor 22 | { 23 | @SpireInstrumentPatch 24 | public static ExprEditor instrument() 25 | { 26 | return new ExprEditor() { 27 | @Override 28 | public void edit(FieldAccess f) throws CannotCompileException 29 | { 30 | if (f.isWriter() && f.getClassName().equals(MiracleEffect.class.getName()) && f.getFieldName().equals("altColor")) { 31 | f.replace("$proceed($1.cpy());"); 32 | } 33 | } 34 | }; 35 | } 36 | } 37 | -------------------------------------------------------------------------------- /mod/src/main/java/basemod/patches/de/robojumper/ststwitch/TwitchVoter/TwitchVoterNoCrash.java: -------------------------------------------------------------------------------- 1 | package basemod.patches.de.robojumper.ststwitch.TwitchVoter; 2 | 3 | import basemod.ReflectionHacks; 4 | import com.evacipated.cardcrawl.modthespire.lib.SpirePatch; 5 | import com.evacipated.cardcrawl.modthespire.lib.SpirePostfixPatch; 6 | import de.robojumper.ststwitch.TwitchConfig; 7 | import de.robojumper.ststwitch.TwitchVoteOption; 8 | import de.robojumper.ststwitch.TwitchVoter; 9 | 10 | @SpirePatch( 11 | clz = TwitchVoter.class, 12 | method = SpirePatch.CONSTRUCTOR 13 | ) 14 | public class TwitchVoterNoCrash { 15 | @SpirePostfixPatch 16 | public static void initializeOptions(TwitchVoter __instance, TwitchConfig config) { 17 | ReflectionHacks.setPrivate(__instance, TwitchVoter.class, "options", new TwitchVoteOption[0]); 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /mod/src/main/java/basemod/patches/whatmod/CardView.java: -------------------------------------------------------------------------------- 1 | package basemod.patches.whatmod; 2 | 3 | import basemod.ReflectionHacks; 4 | import basemod.abstracts.AbstractCardModifier; 5 | import basemod.helpers.CardModifierManager; 6 | import com.badlogic.gdx.graphics.g2d.SpriteBatch; 7 | import com.evacipated.cardcrawl.modthespire.lib.SpirePatch; 8 | import com.megacrit.cardcrawl.cards.AbstractCard; 9 | import com.megacrit.cardcrawl.screens.SingleCardViewPopup; 10 | 11 | import java.util.ArrayList; 12 | import java.util.List; 13 | 14 | @SpirePatch( 15 | clz=SingleCardViewPopup.class, 16 | method="renderTips" 17 | ) 18 | public class CardView 19 | { 20 | public static void Postfix(SingleCardViewPopup __instance, SpriteBatch sb) 21 | { 22 | if (WhatMod.enabled) { 23 | AbstractCard card = ReflectionHacks.getPrivate(__instance, SingleCardViewPopup.class, "card"); 24 | 25 | List> clses = new ArrayList<>(); 26 | clses.add(card.getClass()); 27 | CardModifierManager.modifiers(card).stream() 28 | .map(AbstractCardModifier::getClass) 29 | .forEach(clses::add); 30 | Class[] arr = clses.toArray(new Class[0]); 31 | WhatMod.renderModTooltipBottomLeft(sb, arr); 32 | } 33 | } 34 | } 35 | -------------------------------------------------------------------------------- /mod/src/main/java/basemod/patches/whatmod/Events.java: -------------------------------------------------------------------------------- 1 | package basemod.patches.whatmod; 2 | 3 | import com.badlogic.gdx.graphics.g2d.SpriteBatch; 4 | import com.evacipated.cardcrawl.modthespire.lib.SpirePatch; 5 | import com.megacrit.cardcrawl.core.Settings; 6 | import com.megacrit.cardcrawl.dungeons.AbstractDungeon; 7 | import com.megacrit.cardcrawl.events.AbstractEvent; 8 | import com.megacrit.cardcrawl.events.beyond.SpireHeart; 9 | import com.megacrit.cardcrawl.neow.NeowEvent; 10 | import com.megacrit.cardcrawl.rooms.AbstractRoom; 11 | 12 | @SpirePatch( 13 | clz=AbstractEvent.class, 14 | method="renderText" 15 | ) 16 | public class Events 17 | { 18 | public static void Postfix(AbstractEvent __instance, SpriteBatch sb) 19 | { 20 | if (WhatMod.enabled 21 | && !(__instance instanceof NeowEvent) 22 | && !(__instance instanceof SpireHeart) 23 | && AbstractDungeon.getCurrRoom().phase != AbstractRoom.RoomPhase.COMBAT) { 24 | WhatMod.renderModTooltip(sb, __instance.getClass(), 1500.0f * Settings.scale, 900.0f * Settings.scale); 25 | } 26 | } 27 | } 28 | -------------------------------------------------------------------------------- /mod/src/main/java/basemod/patches/whatmod/FixCardPreviewPlacement.java: -------------------------------------------------------------------------------- 1 | package basemod.patches.whatmod; 2 | 3 | import com.evacipated.cardcrawl.modthespire.lib.SpirePatch; 4 | import com.megacrit.cardcrawl.cards.AbstractCard; 5 | import com.megacrit.cardcrawl.core.Settings; 6 | import javassist.CannotCompileException; 7 | import javassist.expr.ExprEditor; 8 | import javassist.expr.FieldAccess; 9 | 10 | @SpirePatch( 11 | clz=AbstractCard.class, 12 | method="renderCardPreviewInSingleView" 13 | ) 14 | public class FixCardPreviewPlacement 15 | { 16 | public static ExprEditor Instrument() 17 | { 18 | return new ExprEditor() { 19 | @Override 20 | public void edit(FieldAccess f) throws CannotCompileException 21 | { 22 | if (f.isWriter() && f.getFieldName().equals("current_x")) { 23 | f.replace(String.format("$proceed(%1$s.WIDTH / 2f - 475f * %1$s.scale);", Settings.class.getName())); 24 | } 25 | } 26 | }; 27 | } 28 | } 29 | -------------------------------------------------------------------------------- /mod/src/main/java/basemod/patches/whatmod/LinkedRelics.java: -------------------------------------------------------------------------------- 1 | package basemod.patches.whatmod; 2 | 3 | import com.evacipated.cardcrawl.modthespire.lib.SpirePatch; 4 | import com.megacrit.cardcrawl.helpers.PowerTip; 5 | import com.megacrit.cardcrawl.rewards.RewardItem; 6 | import javassist.CannotCompileException; 7 | import javassist.expr.ExprEditor; 8 | import javassist.expr.NewExpr; 9 | 10 | @SpirePatch( 11 | clz=RewardItem.class, 12 | method="render" 13 | ) 14 | public class LinkedRelics 15 | { 16 | public static ExprEditor Instrument() 17 | { 18 | return new ExprEditor() { 19 | int count = 0; 20 | 21 | @Override 22 | public void edit(NewExpr e) throws CannotCompileException 23 | { 24 | if (count == 0 && e.getClassName().equals(PowerTip.class.getName())) { 25 | ++count; 26 | e.replace("if (relic.tips.size() > 0) {" + 27 | "$_ = relic.tips.get(0);" + 28 | "} else {" + 29 | "$_ = $proceed($$);" + 30 | "}"); 31 | } 32 | } 33 | }; 34 | } 35 | } 36 | -------------------------------------------------------------------------------- /mod/src/main/java/basemod/patches/whatmod/RelicTips.java: -------------------------------------------------------------------------------- 1 | package basemod.patches.whatmod; 2 | 3 | import com.evacipated.cardcrawl.modthespire.lib.SpirePatch; 4 | import com.megacrit.cardcrawl.helpers.FontHelper; 5 | import com.megacrit.cardcrawl.relics.AbstractRelic; 6 | 7 | @SpirePatch( 8 | cls="com.megacrit.cardcrawl.relics.AbstractRelic", 9 | method="initializeTips" 10 | ) 11 | public class RelicTips 12 | { 13 | public static void Postfix(AbstractRelic __instance) 14 | { 15 | if (WhatMod.enabled) { 16 | if (__instance.tips.size() > 0 && __instance.tips.get(0).header.toLowerCase().equals(__instance.name.toLowerCase())) { 17 | String modName = WhatMod.findModName(__instance.getClass()); 18 | if (modName != null) { 19 | __instance.tips.get(0).body = FontHelper.colorString(modName, "p") + " NL " + __instance.tips.get(0).body; 20 | } 21 | } 22 | } 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /mod/src/main/java/basemod/patches/whatmod/RelicView.java: -------------------------------------------------------------------------------- 1 | package basemod.patches.whatmod; 2 | 3 | import basemod.ReflectionHacks; 4 | import com.badlogic.gdx.graphics.g2d.SpriteBatch; 5 | import com.evacipated.cardcrawl.modthespire.lib.SpirePatch; 6 | import com.megacrit.cardcrawl.relics.AbstractRelic; 7 | import com.megacrit.cardcrawl.screens.SingleRelicViewPopup; 8 | 9 | @SpirePatch( 10 | clz=SingleRelicViewPopup.class, 11 | method="renderTips" 12 | ) 13 | public class RelicView 14 | { 15 | public static void Postfix(SingleRelicViewPopup __instance, SpriteBatch sb) 16 | { 17 | if (WhatMod.enabled) { 18 | AbstractRelic relic = ReflectionHacks.getPrivate(__instance, SingleRelicViewPopup.class, "relic"); 19 | 20 | WhatMod.renderModTooltipBottomLeft(sb, relic.getClass()); 21 | } 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /mod/src/main/java/com/brashmonkey/spriter/LibGdx/LibGdxAtlasLoader.java: -------------------------------------------------------------------------------- 1 | package com.brashmonkey.spriter.LibGdx; 2 | 3 | import com.badlogic.gdx.files.FileHandle; 4 | import com.badlogic.gdx.graphics.g2d.Sprite; 5 | import com.badlogic.gdx.graphics.g2d.TextureAtlas; 6 | import com.badlogic.gdx.graphics.g2d.TextureAtlas.AtlasRegion; 7 | import com.badlogic.gdx.utils.Array; 8 | import com.brashmonkey.spriter.Data; 9 | import com.brashmonkey.spriter.FileReference; 10 | import com.brashmonkey.spriter.Loader; 11 | 12 | public class LibGdxAtlasLoader extends Loader{ 13 | 14 | private TextureAtlas atlas; 15 | 16 | public LibGdxAtlasLoader(Data data, FileHandle atlas, String indexPrefix) { 17 | super(data); 18 | this.atlas = new TextureAtlas(atlas); 19 | Array array = this.atlas.getRegions(); 20 | for(int i = 0; i < array.size; i++){ 21 | AtlasRegion region = array.get(i); 22 | if(region.index != -1) region.name = region.name+indexPrefix+region.index; 23 | } 24 | } 25 | 26 | public LibGdxAtlasLoader(Data data, FileHandle atlas){ 27 | this(data, atlas, "_"); 28 | } 29 | 30 | @Override 31 | protected Sprite loadResource(FileReference ref) { 32 | return this.atlas.createSprite((data.getFile(ref).name).replace(".png","")); 33 | } 34 | 35 | @Override 36 | public void dispose(){ 37 | this.atlas.dispose(); 38 | super.dispose(); 39 | } 40 | } 41 | -------------------------------------------------------------------------------- /mod/src/main/resources/ModTheSpire.json: -------------------------------------------------------------------------------- 1 | { 2 | "modid": "basemod", 3 | "name": "${artifactId}", 4 | "author_list": ["kiooeht", "test447"], 5 | "description": "Unofficial modding API for Slay the Spire. Also a Dev Console.", 6 | "credits": "t-larson: Original creator of BaseMod.\nContributors: test447, Haashi, kiooeht, Blank The Evil, robojumper, FlipskiZ, DemoXin, Skrelpoid, kobting, twanvl, Moocowsgomoo, NellyDevo, MichaelMayhem, admiralbolt, Celicath, Reina, fiiiiilth, Rin Camelia, JohnnyBazooka89, Alchyr, Seeonee, bugsniper, alexdriedger, Raz, erasels, LordAddy, NotInTheFace, Vex, codewarrior0, EricB, Mistress Alison, herbix, modargo, akdream, Pandemonium, Somdy, Nyoxide, Mwalls, Mindbomber2, SandTag, Enbeon, Rucodeby, DandyLion, Indi, Arkalin, lastcel", 7 | "version": "${project.version}", 8 | "sts_version": "${SlayTheSpire.version}", 9 | "mts_version": "${ModTheSpire.version}", 10 | "update_json": "https://api.github.com/repos/daviscook477/BaseMod/releases/latest" 11 | } 12 | -------------------------------------------------------------------------------- /mod/src/main/resources/img/BaseModBadge.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/daviscook477/BaseMod/423648791016a1407eb56ce7691c2dff26af8de4/mod/src/main/resources/img/BaseModBadge.png -------------------------------------------------------------------------------- /mod/src/main/resources/img/BaseModBadge.xcf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/daviscook477/BaseMod/423648791016a1407eb56ce7691c2dff26af8de4/mod/src/main/resources/img/BaseModBadge.xcf -------------------------------------------------------------------------------- /mod/src/main/resources/img/BlankButton.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/daviscook477/BaseMod/423648791016a1407eb56ce7691c2dff26af8de4/mod/src/main/resources/img/BlankButton.png -------------------------------------------------------------------------------- /mod/src/main/resources/img/ButtonLeft.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/daviscook477/BaseMod/423648791016a1407eb56ce7691c2dff26af8de4/mod/src/main/resources/img/ButtonLeft.png -------------------------------------------------------------------------------- /mod/src/main/resources/img/ButtonMiddle.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/daviscook477/BaseMod/423648791016a1407eb56ce7691c2dff26af8de4/mod/src/main/resources/img/ButtonMiddle.png -------------------------------------------------------------------------------- /mod/src/main/resources/img/ButtonRight.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/daviscook477/BaseMod/423648791016a1407eb56ce7691c2dff26af8de4/mod/src/main/resources/img/ButtonRight.png -------------------------------------------------------------------------------- /mod/src/main/resources/img/ColorDisplay.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/daviscook477/BaseMod/423648791016a1407eb56ce7691c2dff26af8de4/mod/src/main/resources/img/ColorDisplay.png -------------------------------------------------------------------------------- /mod/src/main/resources/img/ConsoleBackground.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/daviscook477/BaseMod/423648791016a1407eb56ce7691c2dff26af8de4/mod/src/main/resources/img/ConsoleBackground.png -------------------------------------------------------------------------------- /mod/src/main/resources/img/ModPanelBg.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/daviscook477/BaseMod/423648791016a1407eb56ce7691c2dff26af8de4/mod/src/main/resources/img/ModPanelBg.png -------------------------------------------------------------------------------- /mod/src/main/resources/img/test/test/512/bg_attack_purple.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/daviscook477/BaseMod/423648791016a1407eb56ce7691c2dff26af8de4/mod/src/main/resources/img/test/test/512/bg_attack_purple.png -------------------------------------------------------------------------------- /mod/src/main/resources/img/test/test/512/bg_power_purple.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/daviscook477/BaseMod/423648791016a1407eb56ce7691c2dff26af8de4/mod/src/main/resources/img/test/test/512/bg_power_purple.png -------------------------------------------------------------------------------- /mod/src/main/resources/img/test/test/512/bg_skill_purple.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/daviscook477/BaseMod/423648791016a1407eb56ce7691c2dff26af8de4/mod/src/main/resources/img/test/test/512/bg_skill_purple.png -------------------------------------------------------------------------------- /mod/src/main/resources/img/test/test/512/card_purple_orb.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/daviscook477/BaseMod/423648791016a1407eb56ce7691c2dff26af8de4/mod/src/main/resources/img/test/test/512/card_purple_orb.png -------------------------------------------------------------------------------- /mod/src/main/resources/img/test/test/cards/defend_purple.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/daviscook477/BaseMod/423648791016a1407eb56ce7691c2dff26af8de4/mod/src/main/resources/img/test/test/cards/defend_purple.png -------------------------------------------------------------------------------- /mod/src/main/resources/img/test/test/cards/strike_purple.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/daviscook477/BaseMod/423648791016a1407eb56ce7691c2dff26af8de4/mod/src/main/resources/img/test/test/cards/strike_purple.png -------------------------------------------------------------------------------- /mod/src/main/resources/img/test/test/charSelect/purplecladButton.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/daviscook477/BaseMod/423648791016a1407eb56ce7691c2dff26af8de4/mod/src/main/resources/img/test/test/charSelect/purplecladButton.png -------------------------------------------------------------------------------- /mod/src/main/resources/img/test/test/charSelect/purplecladPortrait.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/daviscook477/BaseMod/423648791016a1407eb56ce7691c2dff26af8de4/mod/src/main/resources/img/test/test/charSelect/purplecladPortrait.jpg -------------------------------------------------------------------------------- /mod/src/main/resources/img/test/test/relics/arcanosphere.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/daviscook477/BaseMod/423648791016a1407eb56ce7691c2dff26af8de4/mod/src/main/resources/img/test/test/relics/arcanosphere.png -------------------------------------------------------------------------------- /mod/src/main/resources/img/tinyLeftArrow.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/daviscook477/BaseMod/423648791016a1407eb56ce7691c2dff26af8de4/mod/src/main/resources/img/tinyLeftArrow.png -------------------------------------------------------------------------------- /mod/src/main/resources/img/tinyRightArrow.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/daviscook477/BaseMod/423648791016a1407eb56ce7691c2dff26af8de4/mod/src/main/resources/img/tinyRightArrow.png -------------------------------------------------------------------------------- /mod/src/main/resources/localization/basemod/eng/cardMods.json: -------------------------------------------------------------------------------- 1 | { 2 | "basemod:ExhaustCardModifier": { 3 | "TEXT": [ 4 | "%s NL Exhaust." 5 | ] 6 | }, 7 | "basemod:EtherealCardModifier": { 8 | "TEXT": [ 9 | "Ethereal. NL %s" 10 | ] 11 | }, 12 | "basemod:InnateCardModifier": { 13 | "TEXT": [ 14 | "Innate. NL %s" 15 | ] 16 | }, 17 | "basemod:RetainCardModifier": { 18 | "TEXT": [ 19 | "Retain. NL %s" 20 | ] 21 | } 22 | } -------------------------------------------------------------------------------- /mod/src/main/resources/localization/basemod/eng/customMods.json: -------------------------------------------------------------------------------- 1 | { 2 | "Modded Character Cards": { 3 | "NAME": "%s Cards", 4 | "DESCRIPTION": "%s cards now appear in rewards and shops." 5 | } 6 | } 7 | -------------------------------------------------------------------------------- /mod/src/main/resources/localization/basemod/eng/ui.json: -------------------------------------------------------------------------------- 1 | { 2 | "basemod:ContinueRunInfo": { 3 | "TEXT": [ 4 | "%1$s %2$s", 5 | "%1$s, [run_info_blue]Floor %2$d[]", 6 | "Ascension [run_info_red]%1$d[]", 7 | "[run_info_red]%1$d / %2$d HP[] [run_info_gold]%3$d Gold[]" 8 | ], 9 | "EXTRA_TEXT": [ 10 | "", 11 | "Daily, %1$s", 12 | "Endless", 13 | "Custom" 14 | ] 15 | }, 16 | "basemod:WhatMod": { 17 | "TEXT": [ 18 | "What mod is this from?", 19 | "Not modded content", 20 | "Unknown", 21 | "" 22 | ] 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /mod/src/main/resources/localization/basemod/rus/cardMods.json: -------------------------------------------------------------------------------- 1 | { 2 | "basemod:ExhaustCardModifier": { 3 | "TEXT": [ 4 | "%s NL Сжигается." 5 | ] 6 | }, 7 | "basemod:EtherealCardModifier": { 8 | "TEXT": [ 9 | "Эфирная. NL %s" 10 | ] 11 | }, 12 | "basemod:InnateCardModifier": { 13 | "TEXT": [ 14 | "Начальная. NL %s" 15 | ] 16 | }, 17 | "basemod:RetainCardModifier": { 18 | "TEXT": [ 19 | "Оставляется. NL %s" 20 | ] 21 | } 22 | } -------------------------------------------------------------------------------- /mod/src/main/resources/localization/basemod/rus/customMods.json: -------------------------------------------------------------------------------- 1 | { 2 | "Modded Character Cards": { 3 | "NAME": "Карты «%s»", 4 | "DESCRIPTION": "Карты персонажа «%s» теперь можно встретить в магазинах и наградах." 5 | } 6 | } -------------------------------------------------------------------------------- /mod/src/main/resources/localization/basemod/zhs/cardMods.json: -------------------------------------------------------------------------------- 1 | { 2 | "basemod:ExhaustCardModifier": { 3 | "TEXT": [ 4 | "%s NL 消耗 。" 5 | ] 6 | }, 7 | "basemod:EtherealCardModifier": { 8 | "TEXT": [ 9 | "虚无 。 NL %s" 10 | ] 11 | }, 12 | "basemod:InnateCardModifier": { 13 | "TEXT": [ 14 | "固有 。 NL %s" 15 | ] 16 | }, 17 | "basemod:RetainCardModifier": { 18 | "TEXT": [ 19 | "保留 。 NL %s" 20 | ] 21 | } 22 | } -------------------------------------------------------------------------------- /mod/src/main/resources/localization/basemod/zhs/customMods.json: -------------------------------------------------------------------------------- 1 | { 2 | "Modded Character Cards": { 3 | "NAME": "%s牌", 4 | "DESCRIPTION": "卡牌奖励和商店中会出现%s牌。" 5 | } 6 | } 7 | -------------------------------------------------------------------------------- /mod/src/main/resources/localization/basemod/zhs/ui.json: -------------------------------------------------------------------------------- 1 | { 2 | "basemod:ContinueRunInfo": { 3 | "TEXT": [ 4 | "%1$s %2$s", 5 | "%1$s, [run_info_blue]第 %2$d 层[]", 6 | "进阶 [run_info_red]%1$d[]", 7 | "[run_info_red]%1$d / %2$d 生命[] [run_info_gold]%3$d 金币[]" 8 | ], 9 | "EXTRA_TEXT": [ 10 | "", 11 | "每日挑战, %1$s", 12 | "无尽", 13 | "自定模式" 14 | ] 15 | }, 16 | "basemod:WhatMod": { 17 | "TEXT": [ 18 | "来自于哪个Mod?", 19 | "原版游戏", 20 | "未知", 21 | "<未知>" 22 | ] 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /mod/src/main/resources/localization/cards.json: -------------------------------------------------------------------------------- 1 | { 2 | "Strike_P": { 3 | "NAME": "Strike", 4 | "DESCRIPTION": "Deal !D! damage." 5 | }, 6 | "Defend_P": { 7 | "NAME": "Defend", 8 | "DESCRIPTION": "Gain !B! Block." 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /mod/src/main/resources/localization/relics.json: -------------------------------------------------------------------------------- 1 | { 2 | "Arcanosphere": { 3 | "NAME": "Arcanosphere", 4 | "FLAVOR": "test447", 5 | "DESCRIPTIONS": [ 6 | "At the end of your turn you may put a card in your hand on top of your draw pile." 7 | ] 8 | } 9 | } 10 | -------------------------------------------------------------------------------- /pom.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | 6 | 4.0.0 7 | basemod 8 | BaseMod-root 9 | 5.55.3 10 | 11 | mod 12 | testmod 13 | 14 | pom 15 | 16 | BaseMod 17 | 18 | 19 | 1.8 20 | 1.8 21 | 12-18-2022 22 | 3.30.0 23 | 24 | 25 | -------------------------------------------------------------------------------- /testmod/src/main/java/basemod/test/Arcanosphere.java: -------------------------------------------------------------------------------- 1 | package basemod.test; 2 | 3 | import basemod.abstracts.CustomRelic; 4 | import com.megacrit.cardcrawl.dungeons.AbstractDungeon; 5 | import com.megacrit.cardcrawl.relics.AbstractRelic; 6 | 7 | public class Arcanosphere extends CustomRelic { 8 | public static final String ID = "Arcanosphere"; 9 | private static final int CARDS_TO_RETAIN = 1; 10 | 11 | public Arcanosphere() { 12 | super(ID, TestMod.getArcanoSphereTexture(), 13 | RelicTier.STARTER, LandingSound.MAGICAL); 14 | } 15 | 16 | @Override 17 | public void onPlayerEndTurn() { 18 | if (AbstractDungeon.player.hand.isEmpty()) { 19 | return; 20 | } 21 | AbstractDungeon.actionManager.addToBottom( 22 | new ArcanosphereAction(AbstractDungeon.player, 23 | CARDS_TO_RETAIN)); 24 | } 25 | 26 | @Override 27 | public String getUpdatedDescription() { 28 | return DESCRIPTIONS[0]; 29 | } 30 | 31 | @Override 32 | public AbstractRelic makeCopy() { 33 | return new Arcanosphere(); 34 | } 35 | } 36 | -------------------------------------------------------------------------------- /testmod/src/main/java/basemod/test/CardLibraryPatch.java: -------------------------------------------------------------------------------- 1 | package basemod.test; 2 | 3 | import com.evacipated.cardcrawl.modthespire.lib.SpireEnum; 4 | import com.megacrit.cardcrawl.helpers.CardLibrary; 5 | 6 | public class CardLibraryPatch { 7 | @SpireEnum 8 | public static CardLibrary.LibraryType PURPLE; 9 | } 10 | -------------------------------------------------------------------------------- /testmod/src/main/java/basemod/test/CharacterEnumPatch.java: -------------------------------------------------------------------------------- 1 | package basemod.test; 2 | 3 | import com.evacipated.cardcrawl.modthespire.lib.SpireEnum; 4 | import com.megacrit.cardcrawl.characters.AbstractPlayer; 5 | 6 | public class CharacterEnumPatch { 7 | 8 | @SpireEnum 9 | public static AbstractPlayer.PlayerClass THE_PURPLECLAD; 10 | 11 | 12 | } 13 | -------------------------------------------------------------------------------- /testmod/src/main/java/basemod/test/ColorEnumPatch.java: -------------------------------------------------------------------------------- 1 | package basemod.test; 2 | 3 | import com.evacipated.cardcrawl.modthespire.lib.SpireEnum; 4 | import com.megacrit.cardcrawl.cards.AbstractCard; 5 | 6 | public class ColorEnumPatch { 7 | 8 | @SpireEnum 9 | public static AbstractCard.CardColor PURPLE; 10 | 11 | } 12 | -------------------------------------------------------------------------------- /testmod/src/main/java/basemod/test/GetEventPatch.java: -------------------------------------------------------------------------------- 1 | package basemod.test; 2 | 3 | import com.evacipated.cardcrawl.modthespire.lib.SpirePatch; 4 | import com.megacrit.cardcrawl.events.AbstractEvent; 5 | 6 | public class GetEventPatch { 7 | @SpirePatch( 8 | cls="com.megacrit.cardcrawl.helpers.EventHelper", 9 | method="getEvent", 10 | paramtypes={"java.lang.String"} 11 | ) 12 | public static class GetEvent { 13 | public static AbstractEvent Postfix(AbstractEvent origReturn, final String key) { 14 | if (origReturn == null && key.equals("TestDuplicator")) 15 | { 16 | return new TestDuplicator(); 17 | } 18 | return origReturn; 19 | } 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /testmod/src/main/resources/ModTheSpire.json: -------------------------------------------------------------------------------- 1 | { 2 | "modid": "testmod", 3 | "name": "${artifactId}", 4 | "author_list": ["kiooeht", "test447"], 5 | "description": "Slay the Spire mod which tests BaseMod.", 6 | "version": "${project.version}", 7 | "sts_version": "${SlayTheSpire.version}", 8 | "mts_version": "${ModTheSpire.version}", 9 | "dependencies": ["basemod"] 10 | } 11 | --------------------------------------------------------------------------------