UNPKG

@kitten-science/kitten-scientists

Version:

Add-on for the wonderful incremental browser game: https://kittensgame.com/web/

510 lines 17.8 kB
import type { AnyFunction } from "@oliversalzburg/js-utils/core.js"; import type { CycleIndices } from "../settings/TimeControlSettings.js"; import type { CraftableInfo, ResourceInfo } from "./craft.js"; import type { AllBuildings, BuildButton, Building, BuildingEffects, BuildingExt, BuildingMeta, Challenge, Cycle, GameTab, KGSaveData, Kitten, Policy, Price, Race, RaceInfo, ReligionUpgrade, ReligionUpgradeInfo, Resource, ResourceCraftable, Season, TabId, TranscendenceUpgrade, TranscendenceUpgradeInfo, UpgradeInfo, WorkshopTab, ZiggurathUpgrade, ZiggurathUpgradeInfo } from "./index.js"; import type { ReligionTab } from "./religion.js"; import type { PolicyInfo, Technology, TechInfo as TechnologyInfo } from "./science.js"; import type { Mission, PlanetMeta, SpaceBuilding, SpaceTab } from "./space.js"; import type { ChronoForgeUpgrade, ChronoForgeUpgradeInfo, TimeTab, VoidSpaceUpgrade, VoidSpaceUpgradeInfo } from "./time.js"; import type { TradeTab } from "./trade.js"; import type { JobInfo, VillageTab } from "./village.js"; type Server = { showMotd: boolean; motdTitle: string | null; motdContent: string | null; game: Game | null; motdContentPrevious: string | null; motdFreshMessage: string | null; userProfile: unknown; chiral: null; lastBackup: null; saveData: null; setUserProfile: (userProfile: unknown) => void; getServerUrl: () => string; refresh: () => void; _xhr: (url: string, method: string, data: unknown, handler: AnyFunction) => Promise<unknown>; syncUserProfile: () => void; syncSaveData: () => Promise<unknown>; pushSave: () => void; pushSaveMetadata: (guid: string, metadata: unknown) => Promise<unknown>; loadSave: (guid: string) => void; save: (saveData: unknown) => void; sendCommand: (command: unknown) => void; setChiral: (data: unknown) => void; }; export type CycleEffects = { "cryostation-coalMax": number; "cryostation-ironMax": number; "cryostation-mineralsMax": number; "cryostation-oilMax": number; "cryostation-titaniumMax": number; "cryostation-unobtainiumMax": number; "cryostation-uraniumMax": number; "cryostation-woodMax": number; "entangler-gflopsConsumption": number; "hrHarvester-energyProduction": number; "hydrofracturer-oilPerTickAutoprodSpace": number; "hydroponics-catnipRatio": number; "moonOutpost-unobtainiumPerTickSpace": number; "planetCracker-uraniumPerTickSpace": number; "researchVessel-starchartPerTickBaseSpace": number; "sattelite-observatoryRatio": number; "sattelite-starchartPerTickBaseSpace": number; "spaceBeacon-starchartPerTickBaseSpace": number; "spaceElevator-prodTransferBonus": number; "spaceStation-scienceRatio": number; "sunlifter-energyProduction": number; }; export type FestivalEffects = { catnip: number; coal: number; culture: number; faith: number; gold: number; iron: number; manpower: number; minerals: number; oil: number; science: number; starchart: number; titanium: number; unicorns: number; unobtainium: number; uranium: number; wood: number; }; export type CycleMeta = { name: Cycle; effects: Partial<CycleEffects>; festivalEffects: Partial<FestivalEffects>; glyph: string; uglyph: string; title: string; }; export type Game = { bld: { buildingGroups: Array<{ title: string; buildings: Array<Building>; }>; cathPollution: number; /** @deprecated Use `getBuildingExt()` instead. */ get: (build: Building) => BuildingMeta; getBuildingExt: (building: Building) => BuildingExt; getPollutionLevel(): number; meta: [{ meta: Array<BuildingMeta>; }]; }; calendar: { cryptoPrice: number; cycle: CycleIndices; cycleEffectsFestival: (options: Partial<FestivalEffects>) => Partial<FestivalEffects>; cycles: Array<CycleMeta>; cyclesPerEra: number; cycleYear: number; day: number; daysPerSeason: number; eventChance: number; /** * How many festival days are remaining? */ festivalDays: number; futureSeasonTemporalParadox: number; getCurSeason: () => { modifiers: { catnip: number; }; name: Season; }; /** * Get the production modifier contribution of the weather for certain resource. */ getWeatherMod: (res: { name: Resource; }) => number; observeBtn: BuildButton | null; observeHandler: () => void; season: number; seasons: Array<{ name: Season; }>; seasonsPerYear: number; ticksPerDay: number; year: number; yearsPerCycle: number; }; challenges: { currentChallenge?: Challenge; challenges: Array<{ pending: boolean; }>; getChallenge: (challenge: Challenge) => { active: boolean; calculateEffects: (model: unknown, game: Game) => void; researched: number; }; isActive: (challenge: Challenge) => boolean; }; compressLZData: (data: string) => string; console: { filters: Record<string, { enabled: boolean; title: string; unlocked: boolean; }>; maxMessages: number; }; craft: (name: string, amount: number) => void; decompressLZData: (lzData: string) => string; devMode: boolean; diplomacy: { buyBcoin: () => void; /** * @deprecated Use `buyBcoin` instead. */ buyEcoin: () => void; calculateStandingFromPolicies: (race: Race, host: Game) => number; feedElders: () => void; get: (race: Race) => RaceInfo; getMarkerCap: () => number; calculateTradeBonusFromPolicies: (race: Race, host: Game) => number; getTradeRatio: () => number; races: Array<RaceInfo>; sellBcoin: () => void; /** * @deprecated Use `sellBcoin` instead. */ sellEcoin: () => void; tradeMultiple: (race: RaceInfo, amount: number) => void; unlockRandomRace: () => { title: string; }; }; diplomacyTab: TradeTab; getCMBRBonus: () => number; getDisplayValueExt: (value: number, prefix?: boolean, usePerTickHack?: boolean, precision?: number, postifx?: string) => string; getEffect: (effect: `${AllBuildings}CostReduction` | `${Resource}CostReduction` | `${AllBuildings}PriceRatio` | "catnipDemandWorkerRatioGlobal" | "catnipJobRatio" | "catnipPerTickBase" | "coldHarshness" | "corruptionBoostRatio" | "dataCenterAIRatio" | "heatMax" | "heatPerTick" | "hunterRatio" | "mapPriceReduction" | "oilReductionRatio" | "priceRatio" | "riftChance" | "shatterCostIncreaseChallenge" | "shatterVoidCost" | "solarRevolutionLimit" | "standingRatio" | "temporalFluxProduction" | "temporalParadoxDay" | "tradeCatpowerDiscount" | "tradeGoldDiscount" | "unicornsGlobalRatio" | "unicornsPerTickBase" | "unicornsRatioReligion" | "uplinkDCRatio") => number; /** * Calculate limited diminishing returns. */ getLimitedDR: (effect: number, limit: number) => number; /** * The resource craft ratio indicates how many items you receive * as the result of a single craft. This is subject to a variety * of bonus effects. * * @param name The resource to check. */ getResCraftRatio: (name: ResourceCraftable) => number; getResourcePerDay: (resName: Resource) => number; getResourceOnYearProduction: (resName: Resource) => number; /** * Determine how much of the given resource is produced per tick. * * @param resName The resource to check. * @param withConversion Should resource convertions be taken into account? */ getResourcePerTick: (resName: Resource, withConversion: boolean) => number; /** * Determine how much of the resource, per tick, is subject to be converted * into another resource. For example, smelters convert wood and minerals. * * @param resName The resource to check. */ getResourcePerTickConvertion: (resName: Resource) => number; /** * How many ticks pass per second. * Subject to time acceleration. */ getTicksPerSecondUI: () => number; /** * Calculate unlimited diminishing returns. */ getUnlimitedDR: (value: number, stripe: number) => number; /** * Are we in iron will mode? */ ironWill: boolean; managers: Array<{ load: (saveData: Record<string, unknown>) => void; save: (saveData: Record<string, unknown>) => void; }>; msg: (...args: Array<number | string>) => { span: HTMLElement; }; opts: { disableCMBR: boolean; /** * Should `confirm()` calls be skipped in the game? */ noConfirm: boolean; usePerSecondValues: boolean; }; prestige: { /** * The production modifier from burned paragon only. */ getBurnedParagonRatio: () => number; /** * The production modifier produced by paragon and burned paragon. */ getParagonProductionRatio: () => number; getPerk: (name: "carnivals" | "numeromancy" | "unicornmancy") => { researched: boolean; }; meta: Array<{ meta: Array<{ researched: boolean; }>; }>; }; religion: { faith: number; faithRatio: number; /** * The modifier applied to faith generation. */ getApocryphaBonus: () => number; /** * @deprecated No longer exists. Use `getApocryphaBonus()` */ getFaithBonus: () => number; /** * Get religion upgrades. */ getRU: (name: ReligionUpgrade) => ReligionUpgradeInfo | undefined; /** * The modifier produced from collected faith. * Subject to challenges. */ getSolarRevolutionRatio: () => number; /** * Get transcendence upgrades. */ getTU: (name: TranscendenceUpgrade) => TranscendenceUpgradeInfo | undefined; /** * Get ziggurath upgrades. */ getZU: (name: ZiggurathUpgrade) => ZiggurathUpgradeInfo | undefined; meta: Array<{ meta: Array<ReligionUpgradeInfo | ZiggurathUpgradeInfo | TranscendenceUpgradeInfo>; provider: { getEffect: (bld: unknown, effect: unknown) => unknown; }; }>; pactsManager: { necrocornDeficit: number; }; praise: () => void; religionUpgrades: Array<ReligionUpgradeInfo>; tcratio: number; transcendenceTier: number; transcendenceUpgrades: Array<TranscendenceUpgradeInfo>; zigguratUpgrades: Array<ZiggurathUpgradeInfo>; /** * Determine the price (worship) to reach the given transcendence tier. */ _getTranscendTotalPrice: (tier: number) => number; /** * Reset faith and increase praise bonus according to transcendence tier. */ _resetFaithInternal: (bonusRatio: number) => void; }; religionTab: ReligionTab; resetAutomatic: () => void; resPool: { get: (name: Resource) => ResourceInfo; energyCons: number; energyProd: number; resources: Array<ResourceInfo>; hasRes: (resources: Array<Price>) => boolean; }; /** * Saves the game and returns the save game. */ save(): KGSaveData; /** * Import a savegame blob. */ saveImportDropboxText(lzdata: string, callback: (error?: Error) => unknown): void; science: { get: (name: Technology) => TechnologyInfo; getPolicy: (name: Policy) => PolicyInfo; policies: Array<PolicyInfo>; techs: Array<TechnologyInfo>; }; server: Server; space: { getBuilding: (building: SpaceBuilding) => { calculateEffects: (self: unknown, game: Game) => void; /** * An internationalized description for this space building. */ description: string; effects: Partial<BuildingEffects>; /** * An internationalized label for this space building. */ label: string; name: SpaceBuilding; priceRatio: number; prices: Array<Price>; requiredTech: Array<"sattelites">; unlocked: boolean; unlocks: { policies: Array<"militarizeSpace" | "outerSpaceTreaty">; }; unlockScheme: { name: "space"; threshold: number; }; upgrades: { buildings: Array<"observatory">; }; val: number; }; meta: Array<{ meta: Array<{ effects?: Partial<BuildingEffects>; label: string; name: string; on: number; prices: Array<Price>; unlocked: boolean; val: number; }>; }>; planets: Array<PlanetMeta>; programs: Array<{ name: Mission; label: string; }>; }; stats: { statGroups: Array<{ title: string; group: Array<{ name: "averageKittens" | "buildingsConstructed" | "eventsObserved" | "kittensDead" | "timePlayed" | "totalChallengesCompleted" | "totalClicks" | "totalCrafts" | "totalKittens" | "totalParagon" | "totalResets" | "totalTrades" | "totalYears" | "transcendenceTier" | "unicornsSacrificed"; title: string; val: number; unlocked: boolean; defaultUnlocked: boolean; }>; }>; }; tabs: [ GameTab, VillageTab, GameTab, GameTab, TradeTab, ReligionTab, SpaceTab, TimeTab, GameTab, GameTab, GameTab ]; telemetry: { buildRevision: number; guid: string; version: string; }; ticksPerSecond: number; time: { chronoforgeUpgrades: Array<ChronoForgeUpgradeInfo>; /** * Get ChronoForge upgrade. */ getCFU: (name: ChronoForgeUpgrade) => ChronoForgeUpgradeInfo; /** * Get Void Space upgrade. */ getVSU: (name: VoidSpaceUpgrade) => VoidSpaceUpgradeInfo; heat: number; isAccelerated: boolean; meta: Array<{ meta: Array<ChronoForgeUpgradeInfo | VoidSpaceUpgradeInfo>; provider: { getEffect: (item: unknown, effect: unknown) => unknown; }; }>; voidspaceUpgrades: Array<{ name: Exclude<VoidSpaceUpgrade, "usedCryochambers">; label: string; }>; }; timeAccelerationRatio: () => number; timer: { ticksTotal: number; }; timeTab: TimeTab; unlock: (value: unknown) => void; upgrade: (value: unknown) => void; ui: { activeTabId: TabId; confirm: (title: string, message: string, callbackOk: () => void, callbackCancel: () => void) => void; render: () => void; }; village: { assignJob: (job: unknown, count: number) => void; getEffectLeader: <TDefaultObject>(role: "manager" | "scientist", defaultObject: TDefaultObject) => TDefaultObject; getFreeKittens: () => number; getJob: (name: string) => unknown; getJobLimit: (name: string) => number; /** * Get a list of resource consumptions per tick * * @see getResProduction */ getResConsumption: () => { catnip: number; }; /** * Get a list of resource modifiers per tick * This method returns positive villager production that can be multiplied by building bonuses */ getResProduction: () => { catnip: number; }; happiness: number; huntAll: () => void; jobs: Array<JobInfo>; leader: Kitten | null; makeLeader: (kitten: Kitten) => void; removeLeader: () => void; /** * @deprecated */ map: { expeditionNode: { x: number; y: number; }; explore: (x: number, y: number) => void; toLevel: (x: number, y: number) => number; getExplorationPrice: (x: number, y: number) => number; villageData: Record<string, unknown>; }; promoteKittens(): void; sim: { goldToPromote: (rank: number, value0: number, value1: number) => Array<unknown>; kittens: Array<Kitten>; promote: (leader: unknown, rank: number) => number; }; }; villageTab: VillageTab; workshop: { crafts: Array<CraftableInfo>; get: (technology: "chronoforge" | "cryocomputing" | "goldOre" | "machineLearning" | "uplink") => { researched: boolean; }; getCraft: (name: ResourceCraftable) => CraftableInfo | undefined; getCraftPrice: (craft: CraftableInfo) => Array<Price>; upgrades: Array<UpgradeInfo>; }; workshopTab: WorkshopTab; }; export {}; //# sourceMappingURL=game.d.ts.map