Skip to content

Releases: ChronoRixun/xml2-fix

XML2 Fix v1.8.0-beta.1

Pre-release

Choose a tag to compare

@github-actions github-actions released this 23 Oct 01:35

Beta - test build

XML2 Fix 1.8.0 is the engine half of Legends Classic 0.3.0 (content 24 / LC33), with Ultimate Legends 0.4.0.

Update the launcher to 0.4.0 first, then Rebuild, then Play. Everyone needs matching builds and fixes;
0.2.x and 0.3.0 cannot join each other. Test mode must be off for online play. Saves carry over; the format is unchanged.

  • Four-player start is fixed: participants keep distinct peers when the game starts.

  • Hero swaps survive level changes. Solo-segment hand-back runs only during the segment and where it ends,
    using the heroes held when the segment began (rule 26 revision 6).

  • Slow players stay connected. LAG warnings may still show, but the slow-player drop is disabled.

  • Frozen guests: a joiner frozen for 30 seconds is removed through the agreed cut frame; survivors keep playing.
    A host drop or freeze still ends the joiners' session with "lost connection to the host".

  • Host or join online by code, or browse public games, without port forwarding or ini editing. Codes appear in
    the game's online menus and the launcher. Rooms open when you enter Play Online.

  • Room tokens are exactly the host's GameVersion (LC33), so matching public rows can join. The full gameplay
    agreement still checks content and rules on admission.

  • Drop-in is ON by default in Legends Classic 0.3.0. Start alone; late players wait until the next level change.
    Players without a hero during solo story segments stay connected watching and regain a hero when the party widens.

  • When a guest drops abruptly in a game of three or more, survivors agree a cut frame and play on
    (rule 25 GnsTransport revision 4, framing 3). The guest can join again by code. The host keeps hosting after the
    last guest leaves. Host loss still ends the session; there is no host migration or automatic reconnection.

  • Contract v1.5: room_closed means the game cannot take players right now; room_full means all four seats are taken.

  • Online hardening, encrypted connections and relay fallback. Public games connect directly, so players can see
    each other's internet address. The broker caps each address at two public rooms and two seats in others' rooms.

  • Includes 1.7.1's bedroom picture window and per-hit hero stun behavior, and 1.7.0's conversation timing fix.

Packaging: the release workflow builds pinned GameNetworkingSockets and links it, protobuf and the project CA
statically into dinput.dll. It checks both the built DLL and the zip's DLL with scripts/check_release_dll.py;
the DLL imports Windows system libraries only. The zip includes THIRD-PARTY-NOTICES.txt.

Testing limits: owner 030e acceptance on three real PCs including a hotspot PC is still pending.
Four-player WAN coverage is not certified. Failed shared-campaign restore can require rehosting.
LAG warnings may remain; rule 26 revision 6 disables the slow-player drop. There is no host migration.

Player instructions: Legends Classic online guide.

XML2 Fix v1.7.1

Choose a tag to compare

@github-actions github-actions released this 21 Oct 00:27
81c307b

XML2 Fix 1.7.1

The engine half of Legends Classic 0.2.5: bedroom item pictures sit in the first
game's picture window, and heroes are re-stunned by every stun hit.

  • Bedroom item pictures: [Game] PersonalItemPicture=window draws a
    personal item's picture as a 256x128 window over the menu's panels, as the
    first game does, instead of stretching it over the whole screen. Absent or
    stock keeps the fullscreen picture.
  • Stun per hit: [Game] StunRule=xml1 (gameplay rule 18, now revision 3)
    requests the stun reaction for every stun hit on a party hero, as the first
    game does. Before, a hit during a stun, or just after getting up, was ignored.

Updating Legends Classic: in Ultimate Legends, Rebuild, then Play.
Both PCs need builder 0.2.5 and XML2 Fix 1.7.1; a peer with rule 18
revision 2 (XML2 Fix 1.7.0) is refused by name. The builder enables both
settings. Launcher 0.3.2 already supports this pair; no launcher release is needed.
The save format is unchanged.

XML2 Fix v1.7.0

Choose a tag to compare

@github-actions github-actions released this 20 Oct 05:25
45cf5ea

XML2 Fix 1.7.0

The engine half of Legends Classic 0.2.4: enemy resistance text returns and
online conversations stop putting the two games out of step.

  • Enemy resistance text: [Game] ResistanceDisplay=xml1 shows the first
    game's colored Physical Resistant, Energy Resistant and Mental Resistant
    text beneath the target health bar. This changes the display only; damage
    and resistance rules stay the same. Absent or xml2 keeps the previous display.
  • Co-op conversations: [Game] OnlineConversations=lockstep makes lines
    that advance by themselves advance at the same game time on both PCs.
    Previously each PC waited for its own voice clip to end, which could put
    the games out of step and drop the session. Online, a selected reply no
    longer plays its full voice line; single-player is unchanged.

Updating Legends Classic: in Ultimate Legends, Rebuild, then Play.
Both PCs need builder 0.2.4 and XML2 Fix 1.7.0. The builder enables both
settings. Launcher 0.3.2 already supports this pair; no launcher release is needed.
The save format is unchanged. The builder's HAARP boss-map correction can reset
an older saved record for that encounter.

Ordinary X-Men Legends II installs: both new settings are off by default.
Copy dinput.dll next to XMen2.exe; no new setting is required.

Known limits: Legends Classic's solo story segments still leave the second
online player without a hero, and co-op New Game starts with Wolverine alone
(#106, planned for 0.3.0). Use Load Saved Campaign and restart from a save after
a solo segment. The conversation fix was compared in two copies on one PC;
two-PC/internet testing remains outstanding.

These settings add no save field. ResistanceDisplay adds no agreement rule;
OnlineConversations uses rule 27 revision 1, so both peers must match. An earlier
0.2.4a candidate is refused at join. See the builder's release notes
for the port's content changes and remaining known issues.

XML2 Fix v1.6.0

Choose a tag to compare

@github-actions github-actions released this 19 Oct 03:34
0173430

The engine half of Legends Classic 0.2.3 (the X-Men Legends I port): the first game's hazards, enemy combat timing, Danger Room and Sentinel flashback effects, and a co-op that loads a saved campaign in seconds. Drop in the new dinput.dll. For X-Men Legends II as it ships, two fixes reach everyone (the network-message check and the plugin-dialog fix); every other addition is off until a mod's xml2-fix.ini asks for it.

For everyone

  • Malformed network messages are checked and dropped ([Online] ReceiveValidation, on by default). The game now checks the size and shape of every network message it receives, per message type, before its handler runs, and drops one that doesn't fit instead of acting on it, with a rate-limited line in xml2-fix.log. Nothing changes on the wire: it works with players who don't have it, and 0 keeps the game's own unguarded handlers. Ordinary messages that carry extra bytes, and the game's own empty movie-completion message, are not dropped.
  • No "Library appverifUI.dll could not be loaded" dialogs. When no plugin folder is set the engine scanned the root of the current drive for plugins and loaded whatever DLLs it found there; on a game run from C:\ that was Windows' own leftover DLLs and two error dialogs at start-up. That one empty search now finds nothing; the game's real plugin folders are untouched.
  • [Debug] LoadLibraryTrace=1 lists the DLLs the game and its engine libraries load and their plugin-folder searches, for a bug report (off by default).

New, when you ask for it (the port's builder sets all of these)

  • Co-op Load Saved Campaign works and takes seconds. The host's saved-campaign transfer could stall or end the session when the joiner's shared network message pools filled up (1.5.0 and 1.4.0 too). The receiving side now keeps room in all four pools, defers a datagram it can't store instead of acknowledging it, and ends a session that stays blocked for 30 seconds with one clear log line. [Online] FastTransfer=1 (with [Limits] EntityCapacity=1) sends the 2 MiB campaign image as data and zero-run records, up to 32 messages in flight, with a larger rate budget: two real saves took about 3 and 1 seconds of transfer (15 and 5 seconds from clicking to playing) on a LAN, against about 160 seconds before. Both PCs must use it (rule 24). Details.
  • Connect by IP and the LAN search for a mod's builds. [Online] GameVersion now also reaches the answer a host gives to LAN searches and Connect by IP, so two builds with the same version list and admit each other that way (only the OpenSpy list worked before).
  • Hazards that hurt again. [Game] BoxHarmOrigin=xml1 (rule 21) gives a boxed fire, spike or electrical hazard the first game's knockback direction, and [Game] HarmSingleChain=single (rule 23) keeps one repeat chain per touch fire: a fire hits about once per 0.4 seconds and stops when you step out, instead of stacking repeat hits when you re-enter it. Box origin, single chain.
  • Crates that land on the floor. [Game] ObjectWorldImpact=xml1 (rule 17): a landing with no physical target does no damage, as in the first game. Details.
  • Enemy AI revision 4 and party stun (issue #101 in legends-classic, progress). [Game] NpcPowerRule=xml1 restores each enemy button's combo delay and clamps stale deadlines after a clock rewind or AI-slot reuse; [Game] StunRule=xml1 (rule 18, revision 2) gives party heroes the original stun playback speed and input recovery and discards a refused or interrupted stun. Enemy AI, stun.
  • Danger Room. [Game] DangerRoomParty=xml1 (rule 19) is the first game's four-hero fallback for a course that starts without a full party, and [Game] DangerRoomHealthBars=xml1 (rule 22) shows the health bar of a protected training robot; the protection and the course limits stay (a protected robot only falls to the move its lesson names). Details.
  • Sentinel flashback. [Game] Xml1LockOnEffects restores the eye-scan, surface-hit and acquired-target effects, and [Game] Xml1LockOnAim=1 (rule 20) aims by the animated head, as in the first game. Details.
  • Saved zones keep what they had. An LC zone record can keep a verified identical prefix of its residents across a map change that only adds to the end, and the new ones start fresh; a missing, stale or ambiguous record is discarded as before. The save format is unchanged. Details.
  • Optional [TestMode] for testers: Forge access, F8 enemy clear, F9 party protection and F10 return to the nearest safe start. Both switches are off by default and refuse online hosting and joining. Details.

Online: the gameplay agreement, protocol 4

Rules 17 to 24 register only when a mod requests them. Both games compare the rules each one installed when a player joins and refuse a mismatch, naming the setting on both PCs. The record is still the fixed 108-byte digest; the protocol revision is now 4, so a 1.5.0 player and a 1.6.0 player refuse each other at join as another build: both players need 1.6.0. XML2 as it ships, without these keys, plays online exactly as before. Details.

Known issues

  • Online play was tested with two copies of the game on one PC; play between two PCs, and across the internet, has not been validated with these keys yet (planned for the 0.3.0 co-op pass).
  • Enemy powers and stun are only closer to the first game (legends-classic #101, still open).

Every patch checks the bytes it relies on against the retail XMen2.exe first; on any other build that feature stays off and xml2-fix.log says why (online play closes when a requested rule could not be installed). Every setting, with its default: README -> Settings.

Install: copy dinput.dll into the folder that contains XMen2.exe (replace the old one). The Ultimate Legends launcher does it for you. See the README.

Unofficial fan fix, not affiliated with or endorsed by Activision, Marvel, Disney, Raven Software or Beenox. No game files included: you need your own copy of the game.

XML2 Fix v1.5.0

Choose a tag to compare

@github-actions github-actions released this 13 Oct 20:00
08b02b6

The engine half of Legends Classic 0.2.2 (the X-Men Legends I port): more of the first game's own rules - its skill ranks and level points, breakable parts, leaders, solo mode, its death threshold and pack amounts, the Xtraction services, the scan turrets - and an online agreement that no longer outgrows the game's messages. Drop in the new dinput.dll. For X-Men Legends II as it ships, three fixes reach everyone (exclusive fullscreen, Defaults keeping the pad layout, the mouse in cutscenes); every other addition is off until a mod's xml2-fix.ini asks for it.

For everyone

  • Exclusive fullscreen. On some PCs (seen at 2560x1440 and 180 Hz) the game's own fullscreen device request failed, and the game then reset its resolution settings. The fix now asks only for a mode the adapter lists (a resolution it doesn't list falls back to the desktop's mode and refresh rate), the 8x anti-aliasing setting really asks for 8 samples (it used to fall back to less after a restart), every mode lowers a request to the highest level the adapter supports at the device's real format, and in the fix's own modes a failed device no longer wipes the display settings.
  • Pads and Defaults. Defaults 1/2/3 in the controls menu used to erase player 1's pad bindings; the preset layouts now carry the pad layout too (#9). The game's own rule that one key never drives two players is kept.
  • The mouse in cutscenes ([Input] CutsceneMouse, on by default). The game stopped the mouse only in cutscenes that lock the controls; now no cutscene lets it outline characters or click to move. 0 keeps the game's rule.

New, when you ask for it (the port's builder sets all of these)

  • [Game] NpcPowerRule=xml1: Enemy AI (issue #101): enemies pay energy for powers, decide every 2 seconds, need at least half their energy, and use the first game's melee combos. Visibility uses the first game's geometry and query scheduling. Heroes still spend more time stunned than in the original; that part of #101 remains open. Details.

  • [Game] RankCosts, LevelSkillPoints=xml1, LevelStatPoints=xml1: X-Men Legends I's skill economy - a talent rank costs its <level>'s cost (2 for the ranks that open a new form of a power), and every fifth level gives 2 skill and 8 stat points instead of 1 and 4. A campaign saved before these keys were installed gets the fifth-level points its heroes already missed, once, on its first load; the next save records it in the header, so it never happens twice. When the build ships Data\lcsave\autogrowth-legacy.txt (its heroes' automatic stat growth classes changed), each hero's saved class bonus is re-based once the same way, comic rewards kept. docs/rank-costs.md.

  • [Game] Xml1Multipart: X-Men Legends I's breakable parts. Every hit that isn't deflected goes to the current part; at zero it breaks on the first game's 1-in-3 roll, with its effects and skin change, and the attacks that need it are gone (Juggernaut's helmet, the Sentinels' arms). A script that hides a part breaks it too. docs/multipart.md.

  • [Game] X1Leader: the stats entries a mod lists in Data\x1leader.txt are X-Men Legends I leaders - they drop by the first game's rule, and its pain rule applies to their non-cold projectiles (four drops, one of them health, energy or an Xtreme pip).

  • [Game] SoloMode: X-Men Legends I's solo mode. setSoloMode(actor, on) keeps the rest of the party behind at a gap or a bridge, and the party regroups by the first game's rule afterwards. docs/solo-mode.md.

  • [Game] DeathRule=xml1: an entity dies on the hit that leaves it below 1 health, as in the first game, instead of fighting on at a fraction of a point with its death script and drops waiting. docs/death-threshold.md.

  • [Game] PackAmount=xml1: health and energy packs restore a quarter of the maximum, as in the first game (XML2: a third). docs/pack-amount.md.

  • [Game] PlacementCrush=xml1 and DoubleHeal=0: objects being settled on the floor at a zone's load no longer crush each other (and play hit sounds from an empty room), and packs never heal double (XML2's darker "double" sound; the stats screen's help drops those lines). docs/placement-crush.md.

  • The Xtraction services with [Game] DangerRoomGate and RevivalCost=xml1: a mod's Xtraction points can offer Load, the Danger Room, the Healer and Forge where the first game did; a main-menu item stays greyed until Phoenix has joined the campaign; a fallen hero costs the first game's 200 x (the roster's highest level) squared. Online, Load and the campaign-gated choices are greyed with other players. docs/xtraction-shop.md.

  • [Game] Xml1Turrets with a [Xml1Turrets] section: X-Men Legends I's scan turrets scan, track and fire again - missile salvos, bullet tripods and flame turrets with the first game's timing, aim spread, damage and effects - and can still be destroyed, staying destroyed in saves. docs/xml1-controllers.md.

  • [Game] DeathSwitchClear: when the controlled hero dies, the hero handed the controller stands still until it is moved, instead of finishing the walk its AI had started (off a ledge, sometimes). docs/death-switch.md.

  • [Limits] ScriptFunctions: the game's 320 script function names, filled up by a big mod and the fix's own functions, raised to 1024 (321 to 4096) without moving a stock one. docs/script-functions.md.

Online: the gameplay agreement, revision 3

Every key above is a rule of the shared gameplay agreement (IDs 5-16): both games compare the rules each one actually installed when a player joins, and refuse a mismatch with the reason on both PCs. The record is now a fixed 108-byte digest whatever the number of rules (protocol revision 3): with the full 1.5 rule list in the old format, the join messages passed the game's 300-byte message limit and crashed the host. A refusal now names the setting that differs (Incompatible gameplay settings: PackAmount). A 1.4.0 player and a 1.5.0 player refuse each other at join as another build, with the reason on both PCs: both players need 1.5.0. XML2 as it ships, without these keys, plays online exactly as before. docs/gameplay-agreement.md.

Going back to 1.4.0

A 1.4.0 DLL protects a save that 1.5.0 wrote: before replacing it, it keeps it as .lcsave.newer, and when a different .newer copy is already there (after going back and forth) it refuses to save over that file, the profile included. To go back, put back the copy of your save folder made before updating, then the 1.4.0 dinput.dll.

Known issues

  • In co-op, Load Saved Campaign can stop at "Sending game information..." (1.4.0 too). Start a new campaign in co-op for now; a co-op pass is planned.
  • Online play was tested with two copies of the game on one PC; play between two PCs, and across the internet, has not been validated with these keys yet.

Every patch checks the bytes it relies on against the retail XMen2.exe first; on any other build that feature stays off and xml2-fix.log says why (online play closes when a requested rule could not be installed). Every setting, with its default: README -> Settings.

Install: copy dinput.dll into the folder that contains XMen2.exe (replace the old one). The Ultimate Legends launcher does it for you. See the README.

Unofficial fan fix, not affiliated with or endorsed by Activision, Marvel, Disney, Raven Software or Beenox. No game files included: you need your own copy of the game.

XML2 Fix v1.4.0

Choose a tag to compare

@github-actions github-actions released this 12 Oct 07:53
38391cb

The engine half of Legends Classic 0.2.0 (the X-Men Legends I port): a save format of its own, the first game's combat numbers, rooms that keep every object, Master Mold's original fight, and online co-op that refuses games that don't match. Drop in the new dinput.dll. For X-Men Legends II as it ships, one fix reaches everyone (the mouse in a resized window); every other addition is off, or absent, until a mod's xml2-fix.ini asks for it.

For everyone

  • The mouse in a resized window. In the borderless and windowed modes the game maps a mouse point to its menus against its own resolution while the picture is stretched over the window. When Windows resized the window (moving it to a monitor with another display scaling: 1280x720 from a 125 % monitor to a 100 % one became 1023x575), the hover sat ever further below the cursor and the last rows of a menu, the main menu's Quit among them, could not be reached. The game now gets the point it is actually shown at, and a windowed game keeps its size when it changes monitors (a maximized or minimized window is left to Windows).

New, when you ask for it (the port's builder sets all of these)

  • [Save] Format=lc: the LC save format. XML2's save file stores every item, talent, objective and zone object by its position in the tables the game loaded, so a campaign that keeps growing turns older saves into other saves. With the key the game's own serializer is left alone and the fix moves its stream to and from .lcsave files in SaveLC, naming everything by a permanent identity from a catalogue the build ships (checked at every start). At the first start every old save and the profile are converted once; the old Save folder is never touched, and SaveLC\legacy-import.txt records each file. Every save keeps the previous one as .lcsave.bak; a newer version's save is kept as .lcsave.newer instead of being overwritten; a save or load that would lose state is refused with a notice and the file on disk stays as it was. Mods that replace save-bound data are refused with their file name. Details: docs/save-format.md, docs/save-guards.md.
  • [Balance]: X-Men Legends I's combat numbers - health per body point, the strength, mind and might bonuses, power attacks that never miss and take no stat bonus, the first game's melee hit chance, rounding and whole-number damage rolls (DamageRolls), and a mod's melee-weapon bonuses (MeleeWeapons). The stats screen's help texts state the numbers in use ([Game] StatHelp, on by default). docs/balance.md.
  • [Limits] EntityCapacity=1 (needs Format=lc): the engine's entity domain grows from 32 actor / 224 generic / 256 World handles to 32 / 768 / 1024. The stock arena refused every prop, projectile or trigger past the 224th live one without a word: crowded rooms lost objects and the port's HAARP freeze gun never fired. Installed as one checked transaction before the game's code runs. If it cannot install (no Format=lc, a different or modified XMen2.exe, another loader first), the capacity alone falls back to the stock limits and the game says so once at startup, with what to do; saves made with the raised capacity can't be loaded and online play is closed for that session. docs/entity-capacity.md.
  • [Limits] MoveTriggers (20 to 127; the game's own: 19): triggers per move, so long attacks keep every sound and muzzle flash (the port's Mystique bursts need 27). docs/move-triggers.md.
  • [Game] Xml1MasterMold=1 with Xml1MoldStage: X-Men Legends I's Master Mold - the shield that falls when his warp cores are destroyed, his platform and floor attacks on their original timers, the catwalk and the sentinels - run on the game's own services. The fight's stage lives in a flag the save already holds, so a save made mid-fight loads back into the same stage; without a valid binding nothing is installed. docs/xml1-controllers.md.
  • [Game] ExplosiveFirstHit=1: an explosion is a new attack for the victim its projectile already hit, as in X-Men Legends I, so grenades and thrown objects deal their contact hit and their blast. A two-byte branch; nothing in objects or saves changes. docs/explosive-first-hit.md.
  • [Game] ClassicMainBackdrop=1 and ClassicMainPanelBounds=1: the classic main menu's Cerebro room with its original bright textures, and buttons that answer the mouse over their whole visible panels (the focus no longer flips in a row's lower third). Also fixed: a crash on Quit with the classic backdrop.
  • [Game] ConfirmationRelease=1: a held accept button answers one popup until it is released, so it can't also answer the popup that replaces it. docs/confirmation-release.md.
  • [Game] XtractionShop=1: a mod's builder can add its equipment-shop option to the Xtraction point menu. docs/xtraction-shop.md.
  • [Game] PersonalItemText (on by default): the personal-item menu's picture sits behind its description, so the text is readable. 0 keeps the original depth.
  • Trivia answers persist in every act of a campaign that uses the port's trivia binding, late acts included.

Online: the gameplay agreement

When any of the gameplay keys above is on, the game takes part in a shared agreement: at join, both games exchange a record of the gameplay rules each one actually installed (not what its ini asked for) and its entity layout, and a mismatch, or a rule that failed to install on either side, refuses the join before anything loads. The joining player gets the game's own dialog; the host keeps its session and sees the reason in the lobby, or as a short line in play (different gameplay settings, the fix not loaded on one PC, another build). Saving during co-op no longer scans the conversation files on the game's thread, which froze the client long enough to be disconnected. XML2 as it ships, without these keys, plays online exactly as before. docs/gameplay-agreement.md.

Known issues

  • Exclusive fullscreen on high-refresh desktops (seen at 2560x1440 and 180 Hz): the game's own fullscreen device request can fail, and the game then resets its resolution settings. This is not new in 1.4. Use [Display] Mode=borderless until a fix.
  • Online saves after destroying objects: a port test build once refused such a save after a connection drop ("native save translation would drop state"; the file on disk was kept). Two fixes in this release address the likely causes - a destroyed numbered object whose engine slot had expired, and the save-time stall that dropped the connection - and destruction saves have passed online since, but the original case was never reproduced. If it happens, the save file is kept: please report it with xml2-fix.log ([Debug] SaveDumpRefused=1 keeps the refused image for diagnosis).
  • Full online play between two PCs, and across the internet, has not been tested with these keys yet; a dedicated co-op pass is planned.

Every patch checks the bytes it relies on against the retail XMen2.exe first; on any other build that feature stays off (or, for the save format, the game does not start, with one message saying why) and xml2-fix.log says why. Every setting, with its default: README -> Settings.

Install: copy dinput.dll into the folder that contains XMen2.exe (replace the old one). The Ultimate Legends launcher does it for you. See the README.

Unofficial fan fix, not affiliated with or endorsed by Activision, Marvel, Disney, Raven Software or Beenox. No game files included: you need your own copy of the game.

XML2 Fix v1.3.2

Choose a tag to compare

@github-actions github-actions released this 08 Oct 00:00
4a93c9a

Six additions for mods that carry X-Men Legends I's content (the community port), one of them an engine limit. Drop in the new dinput.dll. Every one is off, or absent, until a mod's xml2-fix.ini asks for it, so nothing changes for XML2 as it ships.

New, when you ask for it

  • [Game] CharacterLadderPaths=1 (default 0): the port's ladder animations carry a descent path, and the game never ran it for characters, so a soldier that spawns at the top of a ladder stayed up there. With the key, characters follow those paths with the game's own movement timer and the soldier comes down to the floor. Only the two paths the port's builder names are affected; ordinary characters and every other path behave as before. Needs the builder's matching conversion. Tested on the port's two ladder spawners (sewers, Arbiter): with the original descent the soldiers stayed up, with the port's paths and the key they landed on the floor, including two overlapping spawns. Not tested: a save made mid-descent, co-op, other frame rates.
  • [Game] ObjectiveDescriptions=1 (default 0): a mission objective may carry an updatedescription. While the objective is complete the journal shows that text instead of the original; if the objective is un-completed, the original returns. Titles, notifications, XP and order are unchanged, and nothing is stored in a save: the text follows the objective's saved completion. With the key off, or an objective without the attribute, the journal is as before. Tested in the primary journal: with the key the completion text shows, without it the original does, and un-completing the objective brings the original back. Not tested: a save loaded in a fresh process, act changes, the secondary objectives' display, co-op.
  • addStatPoints(name, n), a script function registered with the forced-party ones ([Game] ForcedTeams present): one to twenty unspent attribute points to the hero named, through the game's own counter, which the stats screen spends from and the save keeps. The port's STAT pickup uses it; before, the pickup raised Body directly and left no point to spend. Tested with a pickup collected in game: the collector got one point, attributes, XP and level stayed, a save reloaded in a fresh process kept it, and spending it on Focus in the stats screen raised Focus by one. Not tested: co-op.
  • [Game] BreakRule=xml1 (default xml2): an object breaks only to an attack that would have broken it in X-Men Legends I. XML2 caps a melee hit's level at 1, so a plain punch broke every breakable object; with the key, an object that carries the first game's xml1structure needs a hit of that level (a power, or a punch from a hero with the right Might or talent), so a punch no longer opens what the first game kept for powers. Objects without the attribute, and everything about characters, are as before; attacks do to enemies what they did; nothing is saved. Not tested online. Details: docs/break-rule.md.
  • [Game] Xtract=0 (default 1): XML2's Xtraction Point menu always offers Xtract, the world map of its five town centres; X-Men Legends I's menu had no world map. With the key the menu offers the title, Change Team and Save only. The world map, the town centres' zone data and the menu's other choices are unchanged.
  • [Limits] EffectCurves (901 to 16384; the game's own: 900): the pool of effect animation curves. When it fills, the game hands out an empty curve without a word, and the effects loaded last are drawn without particles: a fire is a faint glow, a hero's power loses its sparks. A four-hero party in the second area of the port's first level needs 943. EffectCurves=3600 (what the port uses) draws them. Tested with four heroes: with the key the fires are drawn, without it they are a glow; zone changes, a save and a load, and a normal quit were fine. Not tested: co-op, play sessions of hours.

Every patch checks the bytes it relies on against the retail XMen2.exe first; on any other build that feature stays off and xml2-fix.log says why. Every setting, with its default: README -> Settings.

Install: copy dinput.dll into the folder that contains XMen2.exe (replace the old one). See the README.

Unofficial fan fix, not affiliated with or endorsed by Activision, Marvel, Disney, Raven Software or Beenox. No game files included: you need your own copy of the game.

XML2 Fix v1.3.1

Choose a tag to compare

@github-actions github-actions released this 04 Oct 21:28
a49d76c

Two fixes for mods that put more characters on screen than X-Men Legends II does (found in the community port of X-Men Legends I), and one for controllers. Drop in the new dinput.dll. Both mod fixes are off until a mod's xml2-fix.ini asks for them, so nothing changes for XML2 as it ships.

New, when you ask for it

  • [Limits] FightStyles (20 to 32): a zone, its enemies and the party share a registry of 19 style files (fighting styles, power styles, secondary movesets). When it filled, a later hero lost their powers although the files and talents were there. FightStyles=32 gives the registry room for 32.
  • [Game] GeometrySharingBlendIndices=1: the game merges skinned models whose geometry matches without comparing their packed blend indices, so two models with the same shape and different bones could share one outline, drawn as black spikes on one of them. With the key, models share geometry only when the blend indices match too.

Fixed

  • A controller that Windows refuses to acquire is still read. The game only asks for a pad's state after DirectInput's Acquire or Poll succeeds. When Windows refuses both, the pad did nothing, although XML2 Fix serves its state from XInput and doesn't need them. Seen with RunInBackground=1 together with the [Test] pipe; other causes are possible. The pad now reads as idle while the game isn't the foreground window.

Every patch checks the bytes it relies on against the retail XMen2.exe first; on any other build that feature stays off and xml2-fix.log says why. Every setting, with its default: README -> Settings.

Install: copy dinput.dll into the folder that contains XMen2.exe (replace the old one). See the README.

Unofficial fan fix, not affiliated with or endorsed by Activision, Marvel, Disney, Raven Software or Beenox. No game files included: you need your own copy of the game.

XML2 Fix v1.3.0

Choose a tag to compare

@github-actions github-actions released this 02 Oct 01:51

Engine work for mods whose conversations and pickups were written for X-Men Legends I's engine (the community port), and one more engine limit. Drop in the new dinput.dll. Two of the on-by-default changes reach XML2's own conversations too (its six voiced replies now play out; a hub menu come back to keeps a reply highlighted); the rest changes nothing for XML2 as it ships.

On by default

  • Conversation lines that run by themselves. A mod marks a line with a negative timeDelay and the line goes on once its voice has played (the game never reads the attribute; X-Men Legends I's tours and cutscene chains needed Enter after every line on it). A menu of two or more replies is never picked for the player. Off: [Game] AutoAdvance=0.
  • A chosen reply's voice plays out before its answer; the game used to stop it one frame in (XML2 has six voiced replies, the port 239). Accept skips it. Off: [Game] ReplyVoices=0.
  • A reply menu come back to keeps a reply highlighted. The game's menu builder stored the visible count as the cursor when the previous pick was hidden, so nothing was highlighted and Enter did nothing until up or down. Off: [Game] ReplyCursor=0.

New, when you ask for it

  • addSkillPoints(name, n), a ninth script function registered with the forced-party ones ([Game] ForcedTeams present): one to twenty unspent skill points to the hero named - an item's onactivate names the hero who took it as _ACTIVATOR_ - through the game's own counter, which the skills screen spends from and the save keeps. X-Men Legends I's free-skill-point pickup; the game has no call of its own.
  • [Limits] ItemEnhancements (376 to 1024): the item manager's pool of enhancement records, past which Data/items stops loading. XML2's own table uses 374 of 375, so one more enhancement made every later item vanish. Saves store record numbers, so the pool grows at the end of a bigger item manager and nothing moves; the port uses 512. The game's random affix pickers still keep room for 375 prefixes and 375 suffixes (the fix warns in the log past that).

Every patch checks the bytes it relies on against the retail XMen2.exe first; on any other build that feature stays off and xml2-fix.log says why. Every setting, with its default: README -> Settings.

Install: copy dinput.dll into the folder that contains XMen2.exe (replace the old one). See the README.

Unofficial fan fix, not affiliated with or endorsed by Activision, Marvel, Disney, Raven Software or Beenox. No game files included: you need your own copy of the game.

XML2 Fix v1.2.0

Choose a tag to compare

@github-actions github-actions released this 29 Sep 17:21

The biggest update yet: display options, Discord presence, button prompts for pads, a mods folder, and the engine features mods and the X-Men Legends I community port need. Drop in the new dinput.dll; no settings file needed.

Heads-up: what changes when you update

  • Some new features are on by default (list below). Each has a one-line switch in xml2-fix.ini next to the DLL.
  • One rule for every xml2-fix.ini value. A value ends at the first ;, so inline comments work on every key (Mode=borderless ; my setup); the spaces around it don't count. An empty value (Key= or Key= ; later) is the same as no key at all: the default. Switches take 1/0, true/false, yes/no or on/off.
  • [Online] Domain=off is now the only way to switch the OpenSpy redirect off. An empty Domain= used to switch it off; it now means the default, openspy.net.

On by default

  • Pad button prompts. A player on a pad sees the pad's buttons in prompts, the tutorial and the power wheel: A B X Y in their Xbox colours, the rest as [LB], [Start]. Prompts follow the device each player last used. Off: [Input] Prompts=off (or keyboard).
  • Discord Rich Presence. With the Discord app running, your profile shows the zone, your heroes and their levels, and the mode (menus, cutscene, Danger Room, online co-op). No player names, no PC, network or account details; it goes to the Discord app on your PC only. Off: [Discord] Enabled=0 (ShowZone=0 / ShowParty=0 to share less).
  • The right network address on a PC with WSL, Hyper-V, Docker or a VPN. For online play the game used to take a virtual adapter's address as its own (the LocalIP on the Play Online screen), one other players can't reach; it now takes the one this PC reaches the internet from. Old behaviour: [Online] LocalIP=first.
  • Four new rows in Options → Controls → Advanced: display mode, frame rate, VSync and run in background. They change nothing until you change them. Hide them: [Display] InGameOptions=0.
  • Mods folder. Put each mod in its own folder under mods\ next to the game, laid out like the game folder; the game's files stay untouched. mods\load-order.txt sets the order and switches mods on (+Name) and off (-Name). With no files in mods\, nothing changes.

New, when you ask for it

  • Borderless and windowed modes ([Display] Mode) at your desktop's resolution: no mode switch, instant alt-tab. Your desktop's resolution shows in Options → Video; ResolutionList=all offers up to 64 sizes (and fixes the stock game's overflow of its 20-entry list into the default key bindings).
  • Frame rate above 60 or unlimited (FrameRate=144, refresh or 0) without the game's busy-wait, and VSync. Menus stay at 60 fps so pads and keys don't skip items.
  • Bigger zones for big mods. [Limits] ActorSlots (up to 127) and ResourceNames (up to 4096) raise the engine's tables of loaded characters (40) and resource names (450), which crash a crowded zone or a long session when they fill up.
  • Online: [Online] Server=<IPv4> sends every GameSpy lookup to one address (a self-hosted OpenSpy); GameVersion keeps a mod that is another game apart from XML2's games. Online play works through OpenSpy: hosted games register and show in Join Game's list (the PC version has no region step), and co-op sessions were tested host-to-join; a join across two different home networks hasn't been tested yet.
  • For mods with their own campaign ([Game], used by the X-Men Legends I port): NewGameTeam, ResetUnlocks, SaveFolder, WindowTitle, NewGamePlus, ForcedTeams / AddHero / JoinHero (script functions for fixed parties, with Change Team locked at Xtraction Points), PostgameScript, EndHeroUnlock, MainMenuItems, ReviewStats, XPCurve=xml1.
  • For test tooling: [Test] InputPipe / PipeName / VirtualPads (keys, virtual pads, script statements and screenshots over a named pipe, without the focus); [Debug] LogFiles.

Fixed

  • The game no longer hangs for seconds at start-up (sometimes long enough for Windows to call it "not responding") while Windows looks for controllers: XInput now starts on a thread of its own.
  • Pads work in borderless and windowed modes too: when the game's own DirectInput read of the pad fails (it isn't acquired without exclusive fullscreen), the pad's state comes from XInput anyway.

Every patch checks the bytes it relies on against the retail XMen2.exe first; on any other build that feature stays off and xml2-fix.log says why. Every setting, with its default: README → Settings.

Install: copy dinput.dll into the folder that contains XMen2.exe (replace the old one). See the README.

Unofficial fan fix, not affiliated with or endorsed by Activision, Marvel, Disney, Raven Software or Beenox. No game files included: you need your own copy of the game.