-
Notifications
You must be signed in to change notification settings - Fork 11
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
BMSLD Updates #258
base: main
Are you sure you want to change the base?
BMSLD Updates #258
Conversation
dyceron
commented
Dec 26, 2024
•
edited
Loading
edited
- Renames fields and updates formatting
- Moves functions from OSRR to MEDS
- Add enum for actor layers
- Add classes for editing position, rotation, and arguments
Codecov ReportAttention: Patch coverage is
Additional details and impacted files@@ Coverage Diff @@
## main #258 +/- ##
==========================================
+ Coverage 77.58% 77.82% +0.23%
==========================================
Files 78 79 +1
Lines 4011 4099 +88
==========================================
+ Hits 3112 3190 +78
- Misses 899 909 +10 ☔ View full report in Codecov by Sentry. |
Unsure if keeping
|
In this case the first variant is just an ugly way of providing two arguments as one argument to the method. It only makes sense to me because it wouldn't require "unpacking" such things from an input json in the patcher. But as the schema validation guarantees that the keys exists in the dict from the input json, it is definitely better to unpack it in the patcher and use the second variant here because MEDS doesn't know anything about the schema. |
So I should use the less verbose version here then? Or are you saying keep this in OSRR, which probably shouldn't happen? |
Yes |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I'm gonna finish preparing the Vec2/3/4 pr today which should help with this pr too
raise TypeError(f"Invalid argument type: expected {expected_type}, got {type(value)} ({value})") | ||
argument.value = value | ||
|
||
|
||
class Bmsld(BaseResource): | ||
@classmethod | ||
def construct_class(cls, target_game: Game) -> Construct: | ||
return BMSLD | ||
|
||
def all_actors(self) -> Iterator[tuple[int, str, construct.Container]]: |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
this should now return Iterator[tuple[ActorLayer, str, BmsldActor]]
(you'll have to modify the function slightly to make it truth these)
for more information, see https://pre-commit.ci
for more information, see https://pre-commit.ci
for more information, see https://pre-commit.ci
for more information, see https://pre-commit.ci
for more information, see https://pre-commit.ci
for more information, see https://pre-commit.ci
for more information, see https://pre-commit.ci
for more information, see https://pre-commit.ci
for more information, see https://pre-commit.ci
for more information, see https://pre-commit.ci
name=StrId, | ||
names=make_vector(StrId), | ||
"name" / StrId, | ||
"objects" / make_vector(StrId), |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I think it might be more accurate to call this actors
or entities
, and the whole struct should be actor_groups
if it matches up with bmssa data. Though I'm not sure of the form of objects
, is it like "actor_sname" without referencing the layer? Or a link like how dread does it?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
It used to be called actors
but was changed to be more descriptive. I don't think I'd want to change it to actor_groups
because that is associated with actors existing in groups (ie adding a new actor to a group (a collision camera group)
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
either way, this structure is directly analogous to the dctActorGroup structure.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I probably could rename it to actor groups and be fine anyway
) | ||
), | ||
rest=construct.GreedyBytes, | ||
# only used in s000_mainmenu, s010_cockpit, s020_credits | ||
"extra_data" / construct.Optional(make_vector(ExtraActors)), |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Off topic but could you check if there's any tie between those actors and the bmssa data in that draft pr? I feel like it could be related since cockpit and credits also have some unique actor values.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Somewhat but I don't think fully related
Cockpit
Bmsld
actor_layers = ListContainer:
Container:
Container:
Container:
Container:
Container:
Container:
Container:
Container:
Container:
Container:
Container:
LE_Samus = Container:
type = u'menu_samus' (total 10)
position = Vec3(0.0, 0.0, 0.0)
rotation = Vec3(0.0, 0.0, 0.0)
component_functions = ListContainer:
Container:
component_type = u'MODELUPDATER' (total 12)
command = u'SetScenarioParams' (total 17)
arguments = ListContainer:
Container:
type = u'i' (total 1)
value = 4294967295
LE_Baby = Container:
type = u'menu_baby' (total 9)
position = Vec3(0.0, 0.0, 0.0)
rotation = Vec3(0.0, 0.0, 0.0)
component_functions = ListContainer:
Container:
component_type = u'MODELUPDATER' (total 12)
command = u'SetScenarioParams' (total 17)
arguments = ListContainer:
Container:
type = u'i' (total 1)
value = 4294967295
LE_Ship = Container:
type = u'menu_shipinterior' (total 17)
position = Vec3(0.0, 0.0, 0.0)
rotation = Vec3(0.0, 0.0, 0.0)
component_functions = ListContainer:
Container:
component_type = u'MODELUPDATER' (total 12)
command = u'SetScenarioParams' (total 17)
arguments = ListContainer:
Container:
type = u'i' (total 1)
value = 4294967295
LE_Planet = Container:
type = u'menu_planet' (total 11)
position = Vec3(0.0, 0.0, 0.0)
rotation = Vec3(0.0, 0.0, 0.0)
component_functions = ListContainer:
Container:
component_type = u'MODELUPDATER' (total 12)
command = u'SetScenarioParams' (total 17)
arguments = ListContainer:
Container:
type = u'i' (total 1)
value = 4294967295
Container:
Container:
Container:
Container:
Container:
Container:
Container:
sub_areas = Container:
extra_data = Container:
eg_SubArea_collision_camera_000 = ListContainer:
LE_Baby
LE_Samus
LE_Planet
LE_Ship
Bmssa
Container:
version = u'1.22.0' (total 6)
cameras = Container:
collision_camera_000 = Container:
setups = Container:
Default = Container:
environment_preset = u'interior' (total 8)
sound = u'default' (total 7)
unk2 = u'lg_collision_camera_000' (total 23)
entity_group = u'eg_SubArea_collision_camera_000' (total 31)
block_group = u'' (total 0)
cc_names = ListContainer:
collision_camera_000
actors_in_scenario = ListContainer:
menu_samus
menu_baby
samusshipinterior
cutscenes = ListContainer:
collision_layer = u'collision' (total 9)
unk9 = False
for more information, see https://pre-commit.ci
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
let's improve some typing problems. start off like this:
ActorName: TypeAlias = str
ActorGroupName: TypeAlias = str
then adjust the signatures of your API functions to use these types instead of just str
as appropriate. a lot of the functions currently have incorrect signatures, so double check all of them
for more information, see https://pre-commit.ci