Skip to content

Parse table/Server/defaultCharacterInfo.xml - #78

Merged
AngeloTadeucci merged 1 commit into
masterfrom
feat/default-character-info-parser
Aug 5, 2026
Merged

Parse table/Server/defaultCharacterInfo.xml#78
AngeloTadeucci merged 1 commit into
masterfrom
feat/default-character-info-parser

Conversation

@AngeloTadeucci

@AngeloTadeucci AngeloTadeucci commented Aug 5, 2026

Copy link
Copy Markdown
Collaborator

table/Server/defaultCharacterInfo.xml had no type here, so a consumer that needs the per-gender default appearance (Maple2's gender-change voucher) had to hand-roll an XmlDocument walk over the entry. This adds the type and the parser method.

  • Xml/Table/Server/DefaultCharacterInfo.cs: DefaultCharacterInfoRootgender blocks, each with skin and items/item, each item optionally carrying controls/control (hair transform). value is [M2dEnum] Gender; position/rotation are [M2dVector3].
  • ServerTableParser.ParseDefaultCharacterInfo() returns (Gender, DefaultCharacterInfo), matching the other Parse* methods.
  • colorSN defaults to -1, not 0. The attribute is absent on slots that keep the palette's own swatch, and 0 is a real swatch index.
  • PackageVersion 2.4.20 → 2.4.21.

Verification

Ran a throwaway harness against the real Server.m2d and diffed the parsed tree against the raw XML entry. Every field round-trips:

gender=Male skin=(palette 1, sn 3)
  item id=10200003 slot=HR palette=2 sn=8 controls=2
    control index=0 scale=0.022728128 pos=<0, 0, 0> rot=<0, 0, 0>
    control index=1 scale=1 pos=<0, 0, 0> rot=<0, 0, 0>
  item id=10300002 slot=FA palette=3 sn=9 controls=0
  item id=10500001 slot=ER palette=0 sn=-1 controls=0
  item id=10400000 slot=FD palette=0 sn=-1 controls=0
gender=Female skin=(palette 1, sn 2)
  item id=10200012 slot=HR palette=2 sn=8 controls=2
    control index=0 scale=0.9497216 pos=<38.34204, -15.128418, -25.4962> rot=<22.039236, -77.53772, 3.0630174>
    control index=1 scale=0.9497216 pos=<38.308838, -15.503052, 25.071304> rot=<157.24625, -77.53734, -3.0525467>
  item id=10300004 slot=FA palette=3 sn=9 controls=0
  item id=10500001 slot=ER palette=0 sn=-1 controls=0
  item id=10400000 slot=FD palette=0 sn=-1 controls=0

dotnet build clean (0 errors), dotnet format whitespace --verify-no-changes clean.

Not run: dotnet test Maple2.File.Tests. It cannot start on my machine - TestUtils' static constructor trips a Debug.Fail inside AssetIndex for this data folder, which fails every test in the project, including untouched ones like TestMaidRecipe. The new TestDefaultCharacterInfo is therefore unexecuted; it asserts the same structure the harness above confirmed.


View with [code]smith Autofix with [code]smith
Need help on this PR? Tag @codesmith-bot with what you need. Autofix is disabled.

Summary by CodeRabbit

  • New Features

    • Added support for parsing default character information, including gender, skin palettes, equipped items, controls, and positioning data.
    • Updated the parser package to version 2.4.21.
  • Tests

    • Added coverage validating default character data, appearance slots, item identifiers, palette overrides, and character transforms.

Adds DefaultCharacterInfoRoot plus ServerTableParser.ParseDefaultCharacterInfo,
so consumers can read the per-gender default appearance (skin palette and the
HR/FA/FD/ER items with their hair controls) instead of hand-rolling an
XmlDocument walk over the entry.

colorSN defaults to -1 rather than 0: the attribute is absent on slots that keep
the palette's own swatch, and 0 is a real swatch index.

Verified against Server.m2d: both gender blocks, all four slots each, the two
hair controls with their Vector3 position/rotation, and the -1 sentinel on ER/FD
all round-trip to the raw XML. Maple2.File.Tests cannot run on this machine -
TestUtils' static constructor trips a Debug.Fail inside AssetIndex for this data
folder, which fails every test in the project including untouched ones.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
@coderabbitai

coderabbitai Bot commented Aug 5, 2026

Copy link
Copy Markdown

Review Change Stack

Caution

Review failed

The pull request is closed.

ℹ️ Recent review info
⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro Plus

Run ID: c462d680-b145-44a1-a812-6b9bb63131c9

📥 Commits

Reviewing files that changed from the base of the PR and between d12f8a2 and 2cefa54.

📒 Files selected for processing (4)
  • Maple2.File.Parser/Maple2.File.Parser.csproj
  • Maple2.File.Parser/ServerTableParser.cs
  • Maple2.File.Parser/Xml/Table/Server/DefaultCharacterInfo.cs
  • Maple2.File.Tests/ServerTableParserTest.cs

📝 Walkthrough

Walkthrough

Adds XML models and ServerTableParser support for defaultCharacterInfo.xml. The test suite validates parsed genders, skin palettes, equipment slots, item IDs, palette sentinels, and control transforms. The parser package version increases from 2.4.20 to 2.4.21.

Changes

Default character info parsing

Layer / File(s) Summary
XML model and parser support
Maple2.File.Parser/Xml/Table/Server/DefaultCharacterInfo.cs, Maple2.File.Parser/ServerTableParser.cs
Adds XML-mapped default character models and a ParseDefaultCharacterInfo() method that returns entries keyed by Gender.
Parser validation and package update
Maple2.File.Tests/ServerTableParserTest.cs, Maple2.File.Parser/Maple2.File.Parser.csproj
Adds assertions for parsed character data and updates the package version to 2.4.21.

Estimated code review effort: 2 (Simple) | ~10 minutes

Sequence Diagram(s)

sequenceDiagram
  participant ServerTableParser
  participant defaultCharacterInfo.xml
  participant XmlSerializer
  ServerTableParser->>defaultCharacterInfo.xml: Load table data
  ServerTableParser->>XmlSerializer: Deserialize DefaultCharacterInfoRoot
  XmlSerializer-->>ServerTableParser: Return gender entries
Loading

Possibly related PRs

Suggested reviewers: zintixx

✨ Finishing Touches
📝 Generate docstrings
  • Create stacked PR
  • Commit on current branch
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch feat/default-character-info-parser

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@AngeloTadeucci
AngeloTadeucci merged commit 523d1ed into master Aug 5, 2026
3 of 4 checks passed
@AngeloTadeucci
AngeloTadeucci deleted the feat/default-character-info-parser branch August 5, 2026 15:32
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant