import { method, RUN_LENGTH, GOLD_PER_WIN, CARD_PRICE, REST_HEAL, RELIC_PRICE, ACT_COUNT, ACT_MAPS, LOBBY_MAP, LOBBY_SPAWN } from '../lib/codeblock.mjs'; import { CARDS, ENEMIES, CLASSES, JOBS, CLASS_POOLS, SOUL_UNLOCKS, CARDFRAMES, RARITIES, MAP_ROWS, MAP_COLS, CHEST_CLOSED_RUID, CHEST_OPEN_RUID, NODEICONS, CHARS, CAM, RELICS, POTIONS, luaSoulShopTable, frameRuid, luaFramesTable, luaNodeIconsTable, luaCharsTable, luaClassPoolsTable, luaRelicsTable, luaPotionsTable, luaIntentsArray, luaEnemiesTable, luaStr, luaJobsTable, luaCardsTable, luaDeckTable } from '../lib/data.mjs'; import { UI_FILE, COMMON_FILE, UI_ROOT, GENERATED_UI_SECTIONS, UI_APPEND_ORDER, DISABLED_STOCK_CONTROLS, TRANSPARENT, DARK, GOLD, ATTACK, DEFEND, SKILL, DAMAGE_DIGIT_RUIDS, DAMAGE_POP_MAX_DIGITS, DAMAGE_POP_DIGIT_W, DAMAGE_POP_DIGIT_H, DAMAGE_POP_DIGIT_SPACING, MAX_MONSTERS, HEAD_OFFSET_Y, HP_BAR_W, WHITE, CARD_NAME_TEXT, CARD_DESC_TEXT, cardFaceLayout, CARD_W, CARD_H, CARD_SPACING, CARD_XS, ALIGN_CENTER, ALIGN_BOTTOM_CENTER, guid, transform, sprite, button, text, scrollLayoutGroup, popupLayerFor, uiOrderFor, displayOrderFor, applySortingOverride, entity, uiPath, sectionRoot, isGeneratedUiEntity, appendUiSection } from '../lib/ui-helpers.mjs'; export const runMethods = [ method('StartRun', `if self.SelectedClass == "magician" then \tself.PlayerMaxHp = ${CLASSES.magician.maxHp} \tself.RunDeck = { ${CARDS.starterDecks.magician.map(luaStr).join(', ')} } elseif self.SelectedClass == "rogue" then \tself.PlayerMaxHp = ${CLASSES.rogue.maxHp} \tself.RunDeck = { ${CARDS.starterDecks.rogue.map(luaStr).join(', ')} } else \tself.PlayerMaxHp = ${CLASSES.warrior.maxHp} \tself.RunDeck = { ${CARDS.starterDecks.warrior.map(luaStr).join(', ')} } end self.PlayerMaxHp = self.PlayerMaxHp - self:AscStartHpPenalty() self.PlayerHp = self.PlayerMaxHp self.Gold = 0 self.Floor = 1 self.RunLength = ${ACT_COUNT} self.RunActive = true self.RunRelics = {} self.RunPotions = {} self.PotionSlots = ${POTIONS.baseSlots} ${luaPotionsTable(POTIONS.potions)} ${luaRelicsTable(RELICS.relics)} self.RelicPool = { ${RELICS.relicPool.map(luaStr).join(', ')} } ${luaEnemiesTable(ENEMIES.enemies)} self.CurrentNodeId = "" self.CurrentEnemyId = "" self.PlayerJob = "" ${luaJobsTable(JOBS)} ${luaClassPoolsTable()} ${luaFramesTable()} ${luaNodeIconsTable()} ${luaCharsTable()} self:GenerateMap() self:BindButtons() self:AddRelic("${RELICS.startingRelic}") self:ApplySoulUnlocks() self:RenderPotions() self:TeleportToActMap() self:ShowMap()`), method('KickCombatCamera', `local cam = nil local lp = _UserService.LocalPlayer if lp ~= nil then cam = lp.CameraComponent end if cam == nil then cam = _CameraService:GetCurrentCameraComponent() end if cam ~= nil then cam.ConfineCameraArea = false end _TimerService:SetTimerOnce(function() \tlocal cc = nil \tlocal lp2 = _UserService.LocalPlayer \tif lp2 ~= nil then cc = lp2.CameraComponent end \tif cc == nil then cc = _CameraService:GetCurrentCameraComponent() end \tif cc ~= nil then \t\tcc.ZoomRatio = ${CAM.zoomRatio} \t\tcc.CameraOffset = Vector2(${CAM.cameraOffsetX}, ${CAM.cameraOffsetY}) \t\tcc.ScreenOffset = Vector2(${CAM.screenOffsetX}, ${CAM.screenOffsetY}) \t\tcc.ConfineCameraArea = true \tend end, 0.2)`), method('StartCombat', `self:ShowState("combat") self:KickCombatCamera() self:SetEntityEnabled("/ui/RunUIGroup/CombatHud/Result", false) self:SetEntityEnabled("/ui/RunUIGroup/CombatHud/PotionMenu", false) self:SetEntityEnabled("/ui/RunUIGroup/CombatHud/TooltipBox", false) self:SetEntityEnabled("/ui/RunUIGroup/CombatHud/DiscardPrompt", false) self:SetText("/ui/RunUIGroup/CombatHud/PlayerPanel/Name", self:JobLabel()) self.MaxEnergy = 3 self.Turn = 0 self.PlayerBlock = 0 self.BlockGainMultiplier = 1 self.CardsDrawnThisCombat = 0 self.HandCostZeroThisTurn = false self.DrawDisabledThisTurn = false self.NextSkillCostZero = false self.NextSkillRepeatCount = 0 self.SkillCostReductionThisTurn = 0 self.CombatCardCostReduction = {} self.SkillSlyOnPlayCards = {} self.TurnSkillSlyCards = {} self.ShivFirstDamageBonusUsed = false self.ActiveAttackDamageVsWeakMultiplier = 1 self.DrawDamageThisTurn = 0 self.DrawPoisonThisTurn = 0 self.ShivAoeThisCombat = false self.PoisonApplicationsThisCombat = 0 self.EnemyStrengthLossThisTurn = 0 self.PlayerStr = 0 self.PlayerDex = 0 self.PlayerThorns = 0 self.PlayerWeak = 0 self.PlayerVuln = 0 self.PlayerIntangible = 0 self.BonusRewardScreens = 0 self.ActiveKillReward = 0 self.PlayerPowers = {} self.FightAttackCount = 0 self.TurnAttackCardsPlayed = 0 self.TurnDiscardedCards = 0 self.TurnCardsPlayedThisTurn = 0 self.DamageDealtThisTurn = 0 self.DmgPopSeq = 0 self.FirstHpLossDone = false self.ClayBlockNext = 0 self.DiscardSelectRemaining = 0 self.DiscardSelectTotal = 0 self.DiscardPostShiv = 0 self.DiscardShivPerPick = 0 self.RetainSelectActive = false self.ReserveSelectActive = false self.NextTurnBlock = 0 self.NextTurnDraw = 0 self.NextTurnKeepBlock = false self.NextTurnAttackMultiplier = 1 self.TurnAttackMultiplier = 1 self.NextTurnSelectPrompt = "" self.NextTurnSelectCopies = 0 self.NextTurnAddCards = {} self.CombatOver = false self.DiscardPile = {} self.ExhaustPile = {} self.Hand = {} ${luaCardsTable(CARDS.cards)} self.DrawPile = {} for i = 1, #self.RunDeck do \tself.DrawPile[i] = self.RunDeck[i] end self:Shuffle(self.DrawPile) self:PrepareCombatDrawPile() self:BuildMonsters() self:RenderCombat() self:StartPlayerTurn() self:ApplyRelics("combatStart") self:RenderCombat() local slotTid = 0 slotTid = _TimerService:SetTimerRepeat(function() \tif self.CombatOver == true or self.Monsters == nil or #self.Monsters == 0 then \t\t_TimerService:ClearTimer(slotTid) \t\treturn \tend \tfor i = 1, #self.Monsters do \t\tif self.Monsters[i] ~= nil and self.Monsters[i].alive == true then \t\t\tself:PositionMonsterSlot(i) \t\tend \tend end, 0.15)`), ];