Skip to content

XML2 Fix v1.6.0

Choose a tag to compare

@github-actions github-actions released this 19 Oct 03:34
· 33 commits to main since this release
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.