Well, Bloodwych is complete, so now onto the data disks.
(Internally I seem to be naming the games B1 and B2, which reminds me of the Bananas In Pyjamas, but that's another story...).
So, in good news, it didn't take much effort to get my map ingestor working with the data disk. With some prior knowledge of the game (and that there are only 4 "towers"), plus some searching through the Hex source, I've found offsets for everything I needed.
(These numbers are all in decimal)
"OffsetMap": [
63920,
69042,
74164,
79286
],
"OffsetMonstersTotals": [
88180,
88182,
88184,
88186
],
"OffsetMonsters": [
88188,
88956,
89724,
90492
],
"OffsetObjects": [
68016,
73138,
78260,
83382
],
"OffsetScrollsBlock": 96358,
"OffsetSwitches": [
25832,
25896,
25960,
26024
],
"OffsetTriggers": [
31286,
31414,
31542,
31670
]
Most of the original bloodwych ingestion worked like a charm with this, but there are a few new monster types, switch types and trigger types which I haven't identified yet - must be new in BEXT. Details below.
It was bizarre to see there are only 2 wall scrolls, I'd forgotten they weren't really used in BEXT.
Monsters:
As we know, data of the form AB CD EF GH IJ KL, where A is the type.
I now have:
case 0x00:
Type = EnumType.Normal;
break;
case 0x01:
Type = EnumType.Spellcaster;
break;
case 0x02:
Type = EnumType.Drone;
break;
case 0x03:
Type = EnumType.DroneSpellcaster;
break;
case 0x04:
Type = EnumType.ArcBolt;
break;
case 0x08:
Type = EnumType.Unknown08;
break;
case 0x09:
Type = EnumType.Unknown09;
break;
I think Unknown08 and Unknown09 might relate to monsters who have to drop a specific object (e.g. a key), but not sure at this stage.
Triggers
For Triggers, some new types not see in the original...
case 0x00:
Type = EnumType.Unknown00;
break;
case 0x3E:
Type = EnumType.Unknown3E;
break;
case 0x40:
Type = EnumType.Unknown40;
break;
I'd bet one of these is to do with the "Summon Generation" trigger pads, but not sure yet.
Switches
For switches, i found quite a few new types:
case 0x00:
Type = EnumType.Unknown00;
break;
case 0x10:
Type = EnumType.Unknown10;
break;
case 0x12:
Type = EnumType.Unknown12;
break;
case 0x14:
Type = EnumType.Unknown14;
break;
case 0x16:
Type = EnumType.Unknown16;
break;
Not a clue what these do yet...