Skip to content

Commit

Permalink
add formats for bmmap and bmmdef
Browse files Browse the repository at this point in the history
  • Loading branch information
duncathan committed Feb 19, 2022
1 parent b0e3a63 commit ea1cd5a
Show file tree
Hide file tree
Showing 5 changed files with 81 additions and 15 deletions.
25 changes: 10 additions & 15 deletions mercury_engine_data_structures/dread_types.json
Original file line number Diff line number Diff line change
Expand Up @@ -21250,29 +21250,24 @@
"target": "game::logic::collision::CCollider"
},
"base::global::TRntString128": {
"kind": "struct",
"parent": null,
"fields": {}
"kind": "primitive",
"primitive_kind": "string"
},
"base::global::TRntString256": {
"kind": "struct",
"parent": null,
"fields": {}
"kind": "primitive",
"primitive_kind": "string"
},
"base::global::TRntString32": {
"kind": "struct",
"parent": null,
"fields": {}
"kind": "primitive",
"primitive_kind": "string"
},
"base::global::TRntString512": {
"kind": "struct",
"parent": null,
"fields": {}
"kind": "primitive",
"primitive_kind": "string"
},
"base::global::TRntString64": {
"kind": "struct",
"parent": null,
"fields": {}
"kind": "primitive",
"primitive_kind": "string"
},
"base::global::timeline::CEvent": {
"kind": "struct",
Expand Down
4 changes: 4 additions & 0 deletions mercury_engine_data_structures/formats/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,8 @@

from mercury_engine_data_structures.formats.base_resource import BaseResource, AssetType
from mercury_engine_data_structures.formats.bmbls import Bmbls
from mercury_engine_data_structures.formats.bmmap import Bmmap
from mercury_engine_data_structures.formats.bmmdef import Bmmdef
from mercury_engine_data_structures.formats.bmsad import Bmsad
from mercury_engine_data_structures.formats.bmscc import Bmscc
from mercury_engine_data_structures.formats.bmssd import Bmssd
Expand All @@ -17,6 +19,8 @@
ALL_FORMATS = {
"PKG": Pkg,
"BMBLS": Bmbls,
"BMMAP": Bmmap,
"BMMDEF": Bmmdef,
"BMSSD": Bmssd,
"BMSAD": Bmsad,
"BRFLD": Brfld,
Expand Down
20 changes: 20 additions & 0 deletions mercury_engine_data_structures/formats/bmmap.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
from construct import Construct, Container

from mercury_engine_data_structures.formats import BaseResource, standard_format
from mercury_engine_data_structures.game_check import Game

BMMAP = standard_format.create('CMinimapData', 0x02000001)


class Bmmap(BaseResource):
@classmethod
def construct_class(cls, target_game: Game) -> Construct:
return BMMAP

@property
def items(self) -> Container:
return self.raw.Root.mapItems

@property
def ability_labels(self) -> Container:
return self.raw.Root.mapAbilityLabels
32 changes: 32 additions & 0 deletions mercury_engine_data_structures/formats/bmmdef.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
from typing import Tuple
from construct import Construct, Container

from mercury_engine_data_structures.formats import BaseResource, standard_format
from mercury_engine_data_structures.game_check import Game

BMMDEF = standard_format.create('CMinimapDef', 0x02000001)


class Bmmdef(BaseResource):
@classmethod
def construct_class(cls, target_game: Game) -> Construct:
return BMMDEF

@property
def icons(self) -> Container:
return self.raw.Root.mapIconDefs

def add_icon(self, icon_id: str, uSpriteRow: int, uSpriteCol: int,
sInspectorLabel: str, sDisabledIconId: str = '',
vAnchorOffset: Tuple[int, int] = (0, 0), bAutoScale: bool = True, **kwargs):
icon = Container()
icon.uSpriteRow = uSpriteRow
icon.uSpriteCol = uSpriteCol
icon.sDisabledIconId = sDisabledIconId
icon.sInspectorLabel = sInspectorLabel
icon.vAnchorOffset = list(vAnchorOffset)
icon.bAutoScale = bAutoScale
for k, v in kwargs.items():
icon[k] = v

self.icons[icon_id] = icon
15 changes: 15 additions & 0 deletions test/formats/test_minimap.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
from mercury_engine_data_structures.formats.bmmap import BMMAP
from mercury_engine_data_structures.formats.bmmdef import BMMDEF
from mercury_engine_data_structures.game_check import Game
from test.test_lib import parse_and_build_compare


def test_compare_bmmap_dread(dread_path):
parse_and_build_compare(
BMMAP, Game.DREAD, dread_path.joinpath("maps/levels/c10_samus/s010_cave/s010_cave.bmmap"), True
)

def test_compare_bmmdef_dread(dread_path):
parse_and_build_compare(
BMMDEF, Game.DREAD, dread_path.joinpath("system/minimap/minimap.bmmdef"), True
)

0 comments on commit ea1cd5a

Please sign in to comment.