148 lines
5.7 KiB
JavaScript
148 lines
5.7 KiB
JavaScript
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)`),
|
|
];
|