homm3-parsers
Version:
Collection of binary parsers able to parse various file formats related to Heroes of Might and Magic III
18 lines • 2.24 kB
JavaScript
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
const binary_markup_1 = require("binary-markup");
const common_bml_1 = require("./common.bml");
const constants_1 = require("./constants");
const Hero_1 = require("./contracts/enums/Hero");
const mainTown = binary_markup_1.struct(binary_markup_1.when(common_bml_1.isNotRoE, binary_markup_1.byte) `createHero`, binary_markup_1.when(common_bml_1.isNotRoE, binary_markup_1.byte) `type`, binary_markup_1.byte `x`, binary_markup_1.byte `y`, binary_markup_1.byte `z`);
const startingHeroRoE = binary_markup_1.struct(binary_markup_1.flag `isRandom`, common_bml_1.hero `hero`, binary_markup_1.when(binary_markup_1.ctx `hero`.neq(Hero_1.Hero.NONE), binary_markup_1.byte) `face`, binary_markup_1.when(binary_markup_1.ctx `hero`.neq(Hero_1.Hero.NONE), common_bml_1.hommString) `name`);
const startingHeroAbSoD = binary_markup_1.struct(
//
binary_markup_1.flag `isRandom`, common_bml_1.hero `hero`, binary_markup_1.byte `face`, common_bml_1.hommString `name`);
const startingHero = binary_markup_1.when(common_bml_1.isRoE, startingHeroRoE, startingHeroAbSoD);
const additionalHeroInfo = binary_markup_1.struct(common_bml_1.hero `hero`, common_bml_1.hommString `name`);
const additionalInfo = binary_markup_1.struct(binary_markup_1.skip(1), binary_markup_1.uint32 `heroesCount`, binary_markup_1.array(additionalHeroInfo, binary_markup_1.ctx `heroesCount`) `heroes`);
exports.player = binary_markup_1.struct(binary_markup_1.flag `canBeHuman`, binary_markup_1.flag `canBeComputer`, binary_markup_1.enums(binary_markup_1.uint8, constants_1.behaviorEnum) `behavior`, binary_markup_1.when(common_bml_1.isSoD, binary_markup_1.uint8) `allowedAlignments`, binary_markup_1.uint8 `townTypes`, // bitfield
binary_markup_1.when(common_bml_1.isNotRoE, binary_markup_1.uint8) `townConflux`, // 8-Con, AB/SOD feature
binary_markup_1.flag `hasRandomTown`, binary_markup_1.flag `hasMainTown`, binary_markup_1.when(binary_markup_1.ctx `hasMainTown`, mainTown) `mainTown`, startingHero `startingHero`, binary_markup_1.when((context) => common_bml_1.isNotRoE(context) && context.get('startingHero').hero !== Hero_1.Hero.NONE, additionalInfo) `additionaInfo`);
//# sourceMappingURL=player.bml.js.map