homm3-parsers
Version:
Collection of binary parsers able to parse various file formats related to Heroes of Might and Magic III
69 lines • 4.52 kB
JavaScript
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
const binary_markup_1 = require("binary-markup");
const quest_bml_1 = require("./quest.bml");
const seersHut_bml_1 = require("./seersHut.bml");
const town_bml_1 = require("./town.bml");
const common_bml_1 = require("../common.bml");
const MetaType_1 = require("../contracts/enums/MetaType");
const spell_1 = require("../enums/spell");
const scholar_bml_1 = require("./scholar.bml");
const player_1 = require("../enums/player");
const randomDwelling_bml_1 = require("./randomDwelling.bml");
const common_bml_2 = require("./common.bml");
const hero_bml_1 = require("./hero.bml");
const pandoraBox_bml_1 = require("./pandoraBox.bml");
const creature_bml_1 = require("./creature.bml");
const event_bml_1 = require("./event.bml");
const skill_1 = require("../enums/skill");
const messageBearer = binary_markup_1.struct(common_bml_1.hommString `message`, binary_markup_1.skip(4));
const garrison = binary_markup_1.struct(binary_markup_1.enums(binary_markup_1.uint32, player_1.playerEnum) `owner`, common_bml_1.army `creatures`, binary_markup_1.when(common_bml_1.isNotRoE, binary_markup_1.uint8) `removableUnits`, binary_markup_1.skip(8));
const grail = binary_markup_1.struct(binary_markup_1.uint32 `allowableRadius`);
const flagged = binary_markup_1.struct(binary_markup_1.uint32 `owner`);
const artifactObject = binary_markup_1.struct(
//
binary_markup_1.flag `hasGuardians`, binary_markup_1.when(binary_markup_1.ctx `hasGuardians`, common_bml_2.guardians) `guardians`);
const shrine = binary_markup_1.struct(binary_markup_1.uint32 `spell`);
const spellScroll = binary_markup_1.struct(binary_markup_1.flag `hasGuardians`, binary_markup_1.when(binary_markup_1.ctx `hasGuardians`, common_bml_2.guardians) `guardians`, binary_markup_1.enums(binary_markup_1.uint32, spell_1.spellEnum) `spell`);
const resource = binary_markup_1.struct(binary_markup_1.flag `hasGuardians`, binary_markup_1.when(binary_markup_1.ctx `hasGuardians`, common_bml_2.guardians) `hasGuardians`, binary_markup_1.uint32 `quantity`, binary_markup_1.skip(4));
const witchHut = binary_markup_1.struct(skill_1.skillsMask `potentialSkills`);
const bodyMap = {
[]: hero_bml_1.heroPlaceholder,
[]: quest_bml_1.quest,
[]: pandoraBox_bml_1.pandoraBox,
[]: messageBearer,
[]: messageBearer,
[]: garrison,
[]: event_bml_1.event,
[]: grail,
[]: flagged,
[]: flagged,
[]: flagged,
[]: flagged,
[]: flagged,
// Generic objects have no body
[]: binary_markup_1.pass,
[]: binary_markup_1.pass,
[]: binary_markup_1.pass,
[]: binary_markup_1.pass,
[]: binary_markup_1.pass,
[]: binary_markup_1.pass,
[]: binary_markup_1.pass,
[]: town_bml_1.town,
[]: randomDwelling_bml_1.randomDwelling,
[]: randomDwelling_bml_1.randomDwellingAlignment,
[]: randomDwelling_bml_1.randomDwellingLevel,
[]: hero_bml_1.heroData,
[]: hero_bml_1.heroData,
[]: hero_bml_1.heroData,
[]: creature_bml_1.creatureData,
[]: artifactObject,
[]: shrine,
[]: spellScroll,
[]: resource,
[]: binary_markup_1.when(common_bml_1.isNotRoE, witchHut),
[]: seersHut_bml_1.seersHut,
[]: scholar_bml_1.scholar,
};
exports.objectBody = binary_markup_1.struct(binary_markup_1.computed(binary_markup_1.ctx `attributes.metaType`) `type`, binary_markup_1.branch(binary_markup_1.ctx `type`, bodyMap) `data`);
//# sourceMappingURL=body.bml.js.map