Home Reference Source

js/savegame/schemas/ML01.js

import { createLogger } from "../../core/logging.js";
import { MetaAnalyzerBuilding } from "../../game/buildings/analyzer.js";
import { MetaBalancerBuilding } from "../../game/buildings/balancer.js";
import { MetaBeltBuilding } from "../../game/buildings/belt.js";
import { MetaComparatorBuilding } from "../../game/buildings/comparator.js";
import { MetaConstantSignalBuilding } from "../../game/buildings/constant_signal.js";
import { MetaCutterBuilding } from "../../game/buildings/cutter.js";
import { MetaDisplayBuilding } from "../../game/buildings/display.js";
import { MetaFilterBuilding } from "../../game/buildings/filter.js";
import { MetaHubBuilding } from "../../game/buildings/hub.js";
import { MetaItemProducerBuilding } from "../../game/buildings/item_producer.js";
import { MetaLeverBuilding } from "../../game/buildings/lever.js";
import { MetaLogicGateBuilding } from "../../game/buildings/logic_gate.js";
import { MetaMinerBuilding } from "../../game/buildings/miner.js";
import { MetaMixerBuilding } from "../../game/buildings/mixer.js";
import { MetaPainterBuilding } from "../../game/buildings/painter.js";
import { MetaReaderBuilding } from "../../game/buildings/reader.js";
import { MetaRotaterBuilding } from "../../game/buildings/rotater.js";
import { MetaStackerBuilding } from "../../game/buildings/stacker.js";
import { MetaStorageBuilding } from "../../game/buildings/storage.js";
import { MetaTransistorBuilding } from "../../game/buildings/transistor.js";
import { MetaTrashBuilding } from "../../game/buildings/trash.js";
import { MetaUndergroundBeltBuilding } from "../../game/buildings/underground_belt.js";
import { MetaVirtualProcessorBuilding } from "../../game/buildings/virtual_processor.js";
import { MetaWireBuilding } from "../../game/buildings/wire.js";
import { MetaWireTunnelBuilding } from "../../game/buildings/wire_tunnel.js";
import { getCodeFromBuildingData } from "../../game/building_codes.js";
import { defaultBuildingVariant } from "../../game/meta_building.js";
import { SavegameInterface_V1007 } from "./1007.js";

const schema = require("./ML01.json");
const logger = createLogger("savegame_interface/modloader");

export const codes = {
    // Belt
    1: getCodeFromBuildingData(new MetaBeltBuilding(), defaultBuildingVariant),
    2: getCodeFromBuildingData(new MetaBeltBuilding(), defaultBuildingVariant, 1),
    3: getCodeFromBuildingData(new MetaBeltBuilding(), defaultBuildingVariant, 2),

    // Balancer
    4: getCodeFromBuildingData(new MetaBalancerBuilding(), defaultBuildingVariant),
    5: getCodeFromBuildingData(new MetaBalancerBuilding(), MetaBalancerBuilding.variants.merger),
    6: getCodeFromBuildingData(new MetaBalancerBuilding(), MetaBalancerBuilding.variants.mergerInverse),
    47: getCodeFromBuildingData(new MetaBalancerBuilding(), MetaBalancerBuilding.variants.splitter),
    48: getCodeFromBuildingData(new MetaBalancerBuilding(), MetaBalancerBuilding.variants.splitterInverse),

    // Miner
    7: getCodeFromBuildingData(new MetaMinerBuilding(), defaultBuildingVariant),
    8: getCodeFromBuildingData(new MetaMinerBuilding(), MetaMinerBuilding.variants.chainable),

    // Cutter
    9: getCodeFromBuildingData(new MetaCutterBuilding(), defaultBuildingVariant),
    10: getCodeFromBuildingData(new MetaCutterBuilding(), MetaCutterBuilding.variants.quad),

    // Rotater
    11: getCodeFromBuildingData(new MetaRotaterBuilding(), defaultBuildingVariant),
    12: getCodeFromBuildingData(new MetaRotaterBuilding(), MetaRotaterBuilding.variants.ccw),
    13: getCodeFromBuildingData(new MetaRotaterBuilding(), MetaRotaterBuilding.variants.rotate180),

    // Stacker
    14: getCodeFromBuildingData(new MetaStackerBuilding(), defaultBuildingVariant),

    // Mixer
    15: getCodeFromBuildingData(new MetaMixerBuilding(), defaultBuildingVariant),

    // Painter
    16: getCodeFromBuildingData(new MetaPainterBuilding(), defaultBuildingVariant),
    17: getCodeFromBuildingData(new MetaPainterBuilding(), MetaPainterBuilding.variants.mirrored),
    18: getCodeFromBuildingData(new MetaPainterBuilding(), MetaPainterBuilding.variants.double),
    19: getCodeFromBuildingData(new MetaPainterBuilding(), MetaPainterBuilding.variants.quad),

    // Trash
    20: getCodeFromBuildingData(new MetaTrashBuilding(), defaultBuildingVariant),

    // Storage
    21: getCodeFromBuildingData(new MetaStorageBuilding(), defaultBuildingVariant),

    // Underground belt
    22: getCodeFromBuildingData(new MetaUndergroundBeltBuilding(), defaultBuildingVariant),
    23: getCodeFromBuildingData(new MetaUndergroundBeltBuilding(), defaultBuildingVariant, 1),
    24: getCodeFromBuildingData(
        new MetaUndergroundBeltBuilding(),
        MetaUndergroundBeltBuilding.variants.tier2
    ),
    25: getCodeFromBuildingData(
        new MetaUndergroundBeltBuilding(),
        MetaUndergroundBeltBuilding.variants.tier2,
        1
    ),

    // Hub
    26: getCodeFromBuildingData(new MetaHubBuilding(), defaultBuildingVariant),

    // Wire
    27: getCodeFromBuildingData(new MetaWireBuilding(), defaultBuildingVariant),
    28: getCodeFromBuildingData(new MetaWireBuilding(), defaultBuildingVariant, 1),
    29: getCodeFromBuildingData(new MetaWireBuilding(), defaultBuildingVariant, 2),
    30: getCodeFromBuildingData(new MetaWireBuilding(), defaultBuildingVariant, 3),

    52: getCodeFromBuildingData(new MetaWireBuilding(), MetaWireBuilding.variants.second),
    53: getCodeFromBuildingData(new MetaWireBuilding(), MetaWireBuilding.variants.second, 1),
    54: getCodeFromBuildingData(new MetaWireBuilding(), MetaWireBuilding.variants.second, 2),
    55: getCodeFromBuildingData(new MetaWireBuilding(), MetaWireBuilding.variants.second, 3),

    // Constant signal
    31: getCodeFromBuildingData(new MetaConstantSignalBuilding(), defaultBuildingVariant),

    // Logic gate
    32: getCodeFromBuildingData(new MetaLogicGateBuilding(), defaultBuildingVariant),
    34: getCodeFromBuildingData(new MetaLogicGateBuilding(), MetaLogicGateBuilding.variants.not),
    35: getCodeFromBuildingData(new MetaLogicGateBuilding(), MetaLogicGateBuilding.variants.xor),
    36: getCodeFromBuildingData(new MetaLogicGateBuilding(), MetaLogicGateBuilding.variants.or),

    // Transistor
    38: getCodeFromBuildingData(new MetaTransistorBuilding(), defaultBuildingVariant),
    60: getCodeFromBuildingData(new MetaTransistorBuilding(), MetaTransistorBuilding.variants.mirrored),

    // Lever
    33: getCodeFromBuildingData(new MetaLeverBuilding(), defaultBuildingVariant),

    // Filter
    37: getCodeFromBuildingData(new MetaFilterBuilding(), defaultBuildingVariant),

    // Wire tunnel
    39: getCodeFromBuildingData(new MetaWireTunnelBuilding(), defaultBuildingVariant),

    // Display
    40: getCodeFromBuildingData(new MetaDisplayBuilding(), defaultBuildingVariant),

    // Virtual Processor
    42: getCodeFromBuildingData(new MetaVirtualProcessorBuilding(), defaultBuildingVariant),
    44: getCodeFromBuildingData(
        new MetaVirtualProcessorBuilding(),
        MetaVirtualProcessorBuilding.variants.rotater
    ),
    45: getCodeFromBuildingData(
        new MetaVirtualProcessorBuilding(),
        MetaVirtualProcessorBuilding.variants.unstacker
    ),
    50: getCodeFromBuildingData(
        new MetaVirtualProcessorBuilding(),
        MetaVirtualProcessorBuilding.variants.stacker
    ),
    51: getCodeFromBuildingData(
        new MetaVirtualProcessorBuilding(),
        MetaVirtualProcessorBuilding.variants.painter
    ),

    // Analyzer
    46: getCodeFromBuildingData(new MetaComparatorBuilding(), defaultBuildingVariant),
    43: getCodeFromBuildingData(new MetaAnalyzerBuilding(), defaultBuildingVariant),

    // Reader
    49: getCodeFromBuildingData(new MetaReaderBuilding(), defaultBuildingVariant),

    // Item producer
    61: getCodeFromBuildingData(new MetaItemProducerBuilding(), defaultBuildingVariant),
};

export class SavegameInterface_ML01 extends SavegameInterface_V1007 {
    // @ts-ignore
    getVersion() {
        return "ML01";
    }

    getSchemaUncached() {
        return schema;
    }

    /**
     * @param {import("../savegame_typedefs.js").SavegameData} data
     */
    static migrate1007toML01(data) {
        logger.log("Migrating 1007 to ML01");
        const dump = data.dump;
        if (!dump) {
            return true;
        }

        for (let i = 0; i < dump.entities.length; i++) {
            dump.entities[i].components.StaticMapEntity.code =
                codes[dump.entities[i].components.StaticMapEntity.code];
        }
    }
}