monju125 Posted January 17, 2014 Share Posted January 17, 2014 That looks great. Really looking forward to playing Long War and patiently waiting in the meantime. If there's ever any way us newer modders can help, like with stuff you've decided to put on the backburner/deemed as low priority, just let us know. I know I for one would be willing to pitch in, especially with the AI since I've been knee deep in those functions lately anyway. Link to comment Share on other sites More sharing options...
Amineri Posted February 18, 2014 Author Share Posted February 18, 2014 Am posting up my latest revision of the Expanded Perk Tree mod, including various testing that's gone on in our internal Long War testing. I've also consolidated all of the actionscript/sprite changes into a single upk_mod file that's a bit easier to install. Actionscript/Sprite change: MODFILEVERSION=4 UPKFILE=UICollection_Strategy_SF.upk GUID=7B 52 25 96 F3 8E 7C 48 8F 11 3B 40 43 3F BD 3F FUNCTION=SoldierPromotion@gfxSoldierPromotion // set of flash sprite / actionscript changes to enable 3x7 grid of perks //Change MAX_ROWS_PER_COLUMN = 2 to MAX_ROWS_PER_COLUMN = 3 [BEFORE_HEX] 96 02 00 04 03 3E 4F 96 09 00 04 02 08 35 07 02 00 00 00 4F 96 09 00 04 02 08 5C 07 E0 FF FF FF [/BEFORE_HEX] [AFTER_HEX] 96 02 00 04 03 3E 4F 96 09 00 04 02 08 35 07 03 00 00 00 4F 96 09 00 04 02 08 5C 07 E0 FF FF FF [/AFTER_HEX] //Change InitializeTree to allow setting of upper-left window icon [BEFORE_HEX] 96 04 00 04 01 08 1E 4E 12 12 9D 02 00 22 00 96 0B 00 04 06 07 01 00 00 00 04 01 08 08 4E 96 02 00 08 09 4E 96 02 00 08 3D 4E 96 02 00 08 20 52 17 4F [/BEFORE_HEX] [AFTER_HEX] 96 0B 00 04 06 07 01 00 00 00 04 01 08 08 4E 96 02 00 08 09 4E 96 02 00 08 3D 4E 96 02 00 08 20 52 17 96 04 00 04 01 08 1E 4E 12 12 9D 02 00 22 00 4F [/AFTER_HEX] //Replace psiTree sprite with normalTree sprite [BEFORE_HEX] 96 04 00 04 01 08 1E 4E 96 02 00 05 01 49 12 9D 02 00 45 00 96 0B 00 08 1F 07 01 00 00 00 04 01 08 08 4E 96 02 00 08 20 52 17 96 0B 00 08 21 07 01 00 00 00 04 01 08 0F [/BEFORE_HEX] [AFTER_HEX] 96 04 00 04 01 08 1E 4E 96 02 00 05 01 49 12 9D 02 00 45 00 96 0B 00 08 26 07 01 00 00 00 04 01 08 08 4E 96 02 00 08 20 52 17 96 0B 00 08 27 07 01 00 00 00 04 01 08 0F [/AFTER_HEX] //Change SetColumnData to allow turning off columns [BEFORE_HEX] 96 04 00 04 02 08 48 8E 23 00 00 03 00 07 29 00 04 63 6F 6C 75 6D 6E 49 6E 64 65 78 00 06 6C 61 62 65 6C 00 05 73 74 61 74 65 00 C8 03 96 02 00 04 05 87 01 00 00 96 04 00 04 01 08 49 4E 66 9D 02 00 35 00 96 06 00 04 00 04 01 08 4A 4E 66 9D 02 00 8E 00 96 06 00 04 00 04 01 08 4B 4E 66 9D 02 00 E7 00 96 06 00 04 00 04 01 08 4C 4E 66 9D 02 00 0E 01 99 02 00 72 01 96 04 00 04 01 08 32 4E 96 02 00 04 04 4E 96 04 00 08 0A 05 01 4F 96 04 00 04 01 08 32 4E 96 02 00 04 04 4E 96 07 00 08 44 07 64 00 00 00 4F 96 0B 00 08 4D 07 01 00 00 00 04 01 08 2C 4E 96 02 00 04 04 4E 96 02 00 08 20 52 17 96 04 00 04 01 08 2C 4E 96 02 00 04 04 4E 96 07 00 08 44 07 64 00 00 00 4F 99 02 00 09 01 96 04 00 04 01 08 32 4E 96 02 00 04 04 4E 96 04 00 08 0A 05 01 4F 96 04 00 04 01 08 32 4E 96 02 00 04 04 4E 96 06 00 08 44 04 01 08 4E 4E 4F 96 0B 00 08 4D 07 01 00 00 00 04 01 08 2C 4E 96 02 00 04 04 4E 96 02 00 08 20 52 17 96 04 00 04 01 08 2C 4E 96 02 00 04 04 4E 96 06 00 08 44 04 01 08 4E 4E 4F 99 02 00 A0 00 96 04 00 04 01 08 32 4E 96 02 00 04 04 4E 96 04 00 08 0A 05 00 4F 96 0B 00 08 26 07 01 00 00 00 04 01 08 2C 4E 96 02 00 04 04 4E 96 02 00 08 20 52 17 99 02 00 69 00 96 04 00 04 01 08 32 4E 96 02 00 04 04 4E 96 04 00 08 0A 05 00 4F 96 04 00 04 01 08 32 4E 96 02 00 04 04 4E 96 06 00 08 44 04 01 08 47 4E 4F 96 0B 00 08 4F 07 01 00 00 00 04 01 08 2C 4E 96 02 00 04 04 4E 96 02 00 08 20 52 17 96 04 00 04 01 08 2C 4E 96 02 00 04 04 4E 96 06 00 08 44 04 01 08 47 4E 4F 99 02 00 00 00 96 09 00 06 00 00 00 00 00 00 00 00 87 01 00 03 17 96 06 00 04 03 04 01 08 34 4E 96 02 00 04 04 4E 96 02 00 08 50 4E 48 12 9D 02 00 88 01 96 04 00 04 01 08 34 4E 96 02 00 04 04 4E 96 02 00 04 03 4E 87 01 00 02 17 96 02 00 04 05 87 01 00 00 96 04 00 04 01 08 49 4E 66 9D 02 00 35 00 96 06 00 04 00 04 01 08 4B 4E 66 9D 02 00 5F 00 96 06 00 04 00 04 01 08 4A 4E 66 9D 02 00 9E 00 96 06 00 04 00 04 01 08 4C 4E 66 9D 02 00 C8 00 99 02 00 13 01 96 04 00 04 02 08 36 4E 96 07 00 08 44 07 64 00 00 00 4F 96 04 00 04 01 08 24 4E 96 09 00 07 01 00 00 00 04 02 08 36 4E 96 02 00 08 3A 4E 96 02 00 08 20 52 17 99 02 00 D9 00 96 04 00 04 02 08 43 4E 96 02 00 05 01 49 12 12 9D 02 00 13 00 96 04 00 04 02 08 36 4E 96 06 00 08 44 04 01 08 4E 4E 4F 96 04 00 04 01 08 22 4E 96 09 00 07 01 00 00 00 04 02 08 36 4E 96 02 00 08 3A 4E 96 02 00 08 20 52 17 99 02 00 8A 00 96 04 00 04 02 08 36 4E 96 06 00 08 44 04 01 08 4E 4E 4F 96 04 00 04 01 08 24 4E 96 09 00 07 01 00 00 00 04 02 08 36 4E 96 02 00 08 3A 4E 96 02 00 08 20 52 17 99 02 00 50 00 96 04 00 04 02 08 36 4E 96 06 00 08 44 04 01 08 47 4E 4F 96 0B 00 08 4F 07 01 00 00 00 04 02 08 36 4E 96 02 00 08 20 52 17 96 04 00 04 01 08 51 4E 96 09 00 07 01 00 00 00 04 02 08 36 4E 96 02 00 08 3A 4E 96 02 00 08 20 52 17 99 02 00 00 00 96 02 00 04 03 50 87 01 00 03 17 99 02 00 5B FE 96 04 00 04 01 08 1E 4E 12 12 9D 02 00 45 00 96 04 00 04 01 08 2C 4E 96 02 00 04 04 4E 96 02 00 08 52 4E 96 04 00 08 53 04 06 4F 96 04 00 08 30 04 04 47 4B 96 09 00 07 01 00 00 00 04 01 08 2C 4E 96 02 00 04 04 4E 96 02 00 08 31 4E 96 02 00 08 20 52 17 4F [/BEFORE_HEX] [AFTER_HEX] 96 04 00 04 02 08 48 8E 23 00 00 03 00 07 29 00 04 63 6F 6C 75 6D 6E 49 6E 64 65 78 00 06 6C 61 62 65 6C 00 05 73 74 61 74 65 00 C8 03 96 04 00 04 01 08 32 4E 96 02 00 04 04 4E 96 04 00 08 0A 05 00 4F 96 04 00 04 01 08 2C 4E 96 02 00 04 04 4E 96 04 00 08 0A 05 01 4F 96 02 00 04 05 87 01 00 00 96 04 00 04 01 08 49 4E 66 9D 02 00 35 00 96 06 00 04 00 04 01 08 4A 4E 66 9D 02 00 8E 00 96 06 00 04 00 04 01 08 4B 4E 66 9D 02 00 E7 00 96 06 00 04 00 04 01 08 4C 4E 66 9D 02 00 F8 00 99 02 00 0E 01 96 04 00 04 01 08 32 4E 96 02 00 04 04 4E 96 04 00 08 0A 05 01 4F 96 04 00 04 01 08 32 4E 96 02 00 04 04 4E 96 07 00 08 44 07 64 00 00 00 4F 96 0B 00 08 4D 07 01 00 00 00 04 01 08 2C 4E 96 02 00 04 04 4E 96 02 00 08 20 52 17 96 04 00 04 01 08 2C 4E 96 02 00 04 04 4E 96 07 00 08 44 07 64 00 00 00 4F 99 02 00 A5 00 96 04 00 04 01 08 32 4E 96 02 00 04 04 4E 96 04 00 08 0A 05 01 4F 96 04 00 04 01 08 32 4E 96 02 00 04 04 4E 96 06 00 08 44 04 01 08 4E 4E 4F 96 0B 00 08 4D 07 01 00 00 00 04 01 08 2C 4E 96 02 00 04 04 4E 96 02 00 08 20 52 17 96 04 00 04 01 08 2C 4E 96 02 00 04 04 4E 96 06 00 08 44 04 01 08 4E 4E 4F 99 02 00 3C 00 96 0B 00 08 26 07 01 00 00 00 04 01 08 2C 4E 96 02 00 04 04 4E 96 02 00 08 20 52 17 99 02 00 1B 00 96 04 00 04 01 08 2C 4E 96 02 00 04 04 4E 96 04 00 08 0A 05 00 4F 99 02 00 00 00 96 09 00 06 00 00 00 00 00 00 00 00 87 01 00 03 17 96 06 00 04 03 04 01 08 34 4E 96 02 00 04 04 4E 96 02 00 08 50 4E 48 12 9D 02 00 9A 01 96 04 00 04 01 08 34 4E 96 02 00 04 04 4E 96 02 00 04 03 4E 87 01 00 02 17 96 04 00 04 02 08 36 4E 96 07 00 08 44 07 64 00 00 00 4F 96 02 00 04 05 87 01 00 00 96 04 00 04 01 08 49 4E 66 9D 02 00 35 00 96 06 00 04 00 04 01 08 4B 4E 66 9D 02 00 73 00 96 06 00 04 00 04 01 08 4A 4E 66 9D 02 00 B2 00 96 06 00 04 00 04 01 08 4C 4E 66 9D 02 00 F0 00 99 02 00 12 01 96 04 00 04 02 08 43 4E 96 02 00 05 01 49 12 9D 02 00 13 00 96 04 00 04 02 08 36 4E 96 06 00 08 44 04 01 08 4E 4E 4F 96 04 00 04 01 08 24 4E 96 09 00 07 01 00 00 00 04 02 08 36 4E 96 02 00 08 3A 4E 96 02 00 08 20 52 17 99 02 00 C4 00 96 04 00 04 02 08 43 4E 96 02 00 05 01 49 12 12 9D 02 00 13 00 96 04 00 04 02 08 36 4E 96 06 00 08 44 04 01 08 4E 4E 4F 96 04 00 04 01 08 22 4E 96 09 00 07 01 00 00 00 04 02 08 36 4E 96 02 00 08 3A 4E 96 02 00 08 20 52 17 99 02 00 75 00 96 04 00 04 02 08 43 4E 96 02 00 05 01 49 12 9D 02 00 13 00 96 04 00 04 02 08 36 4E 96 06 00 08 44 04 01 08 4E 4E 4F 96 04 00 04 01 08 24 4E 96 09 00 07 01 00 00 00 04 02 08 36 4E 96 02 00 08 3A 4E 96 02 00 08 20 52 17 99 02 00 27 00 96 04 00 04 01 08 22 4E 96 09 00 07 01 00 00 00 04 02 08 36 4E 96 02 00 08 3A 4E 96 02 00 08 20 52 17 99 02 00 00 00 96 02 00 04 03 50 87 01 00 03 17 99 02 00 49 FE 96 04 00 04 01 08 1E 4E 12 9D 02 00 21 00 96 04 00 04 01 08 2C 4E 96 02 00 04 04 4E 96 02 00 08 31 4E 96 04 00 08 0A 05 00 4F 99 02 00 29 00 96 04 00 08 30 04 04 47 4B 96 09 00 07 01 00 00 00 04 01 08 2C 4E 96 02 00 04 04 4E 96 02 00 08 31 4E 96 02 00 08 20 52 17 96 04 00 04 01 08 2C 4E 96 02 00 04 04 4E 96 02 00 08 52 4E 96 04 00 08 53 04 06 4F 96 02 00 00 00 17 4F [/AFTER_HEX] // SetAbilityIcon -- actively set icon hilighing (HasPerk) state for every icon -- don't assume it's false [BEFORE_HEX] 96 04 00 04 02 08 3F 8E 2D 00 00 04 00 07 29 00 03 63 6F 6C 75 6D 6E 00 04 72 6F 77 00 06 69 63 6F 6E 4C 61 62 65 6C 00 05 69 73 48 69 6C 69 67 68 74 65 64 00 85 01 96 04 00 04 01 08 34 4E 96 02 00 04 03 4E 96 02 00 04 04 4E 87 01 00 02 17 96 03 00 04 02 03 49 12 9D 02 00 20 00 96 04 00 08 40 04 03 47 96 02 00 08 41 47 96 02 00 04 04 47 96 02 00 08 42 47 26 96 01 00 03 3E 96 0B 00 04 06 07 01 00 00 00 04 02 08 36 4E 96 02 00 08 20 52 17 96 02 00 04 05 12 9D 02 00 A1 00 96 06 00 04 02 08 43 05 01 4F 96 04 00 04 02 08 36 4E 96 07 00 08 44 07 64 00 00 00 4F 96 04 00 04 01 08 22 4E 96 09 00 07 01 00 00 00 04 02 08 36 4E 96 02 00 08 3A 4E 96 02 00 08 20 52 17 96 04 00 04 01 08 29 4E 96 02 00 08 45 4E 96 01 00 03 49 4C 9D 02 00 12 00 17 96 06 00 04 03 04 01 08 29 4E 96 02 00 08 45 4E 67 12 9D 02 00 2C 00 96 04 00 04 01 08 29 4E 96 04 00 08 45 04 03 4F 96 04 00 08 46 04 03 47 96 09 00 07 01 00 00 00 04 01 08 29 4E 96 02 00 08 20 52 17 99 02 00 73 00 96 04 00 04 01 08 29 4E 96 02 00 08 45 4E 96 01 00 03 49 4C 9D 02 00 15 00 17 96 04 00 04 01 08 29 4E 96 02 00 08 45 4E 96 02 00 04 03 67 12 9D 02 00 2C 00 96 04 00 04 01 08 29 4E 96 04 00 08 45 04 03 4F 96 04 00 08 46 04 03 47 96 09 00 07 01 00 00 00 04 01 08 29 4E 96 02 00 08 20 52 17 96 04 00 04 02 08 36 4E 96 06 00 08 44 04 01 08 47 4E 4F 96 06 00 04 02 08 0A 05 01 4F 4F [/BEFORE_HEX] [AFTER_HEX] 96 04 00 04 02 08 3F 8E 2D 00 00 04 00 07 29 00 03 63 6F 6C 75 6D 6E 00 04 72 6F 77 00 06 69 63 6F 6E 4C 61 62 65 6C 00 05 69 73 48 69 6C 69 67 68 74 65 64 00 85 01 96 04 00 04 01 08 34 4E 96 02 00 04 03 4E 96 02 00 04 04 4E 87 01 00 02 17 96 03 00 04 02 03 49 12 9D 02 00 20 00 96 04 00 08 40 04 03 47 96 02 00 08 41 47 96 02 00 04 04 47 96 02 00 08 42 47 26 96 01 00 03 3E 96 0B 00 04 06 07 01 00 00 00 04 02 08 36 4E 96 02 00 08 20 52 17 96 06 00 04 02 08 43 04 05 4F 96 02 00 04 05 12 9D 02 00 97 00 96 04 00 04 02 08 36 4E 96 07 00 08 44 07 64 00 00 00 4F 96 04 00 04 01 08 22 4E 96 09 00 07 01 00 00 00 04 02 08 36 4E 96 02 00 08 3A 4E 96 02 00 08 20 52 17 96 04 00 04 01 08 29 4E 96 02 00 08 45 4E 96 01 00 03 49 4C 9D 02 00 12 00 17 96 06 00 04 03 04 01 08 29 4E 96 02 00 08 45 4E 67 12 9D 02 00 2C 00 96 04 00 04 01 08 29 4E 96 04 00 08 45 04 03 4F 96 04 00 08 46 04 03 47 96 09 00 07 01 00 00 00 04 01 08 29 4E 96 02 00 08 20 52 17 99 02 00 73 00 96 04 00 04 01 08 29 4E 96 02 00 08 45 4E 96 01 00 03 49 4C 9D 02 00 15 00 17 96 04 00 04 01 08 29 4E 96 02 00 08 45 4E 96 02 00 04 03 67 12 9D 02 00 2C 00 96 04 00 04 01 08 29 4E 96 04 00 08 45 04 03 4F 96 04 00 08 46 04 03 47 96 09 00 07 01 00 00 00 04 01 08 29 4E 96 02 00 08 20 52 17 96 04 00 04 02 08 36 4E 96 06 00 08 44 04 01 08 47 4E 4F 96 06 00 04 02 08 0A 05 01 4F 4F [/AFTER_HEX] // Correct size of tagged block that contains ability icons sprite [BEFORE_HEX] FF 09 55 04 00 00 9D 00 [/BEFORE_HEX] [AFTER_HEX] FF 09 42 05 00 00 9D 00 [/AFTER_HEX] //Add ability icon locations (21 ability icons, 3 rows per each of 7 columns) // get space by shortening constant pool of Environment package [BEFORE_HEX] FF 0A 0B 00 00 00 6E 6F 72 6D 61 6C 54 72 65 65 00 BF 06 1E 00 00 00 36 2B 00 8D 00 1D 36 27 2C E0 09 00 70 72 6F 6D 6F 74 69 6F 6E 42 72 61 63 6B 65 74 36 00 BF 06 1E 00 00 00 36 2F 00 8D 00 1D 36 26 98 20 09 00 70 72 6F 6D 6F 74 69 6F 6E 42 72 61 63 6B 65 74 35 00 BF 06 1E 00 00 00 36 33 00 8D 00 1D 36 26 03 E0 09 00 70 72 6F 6D 6F 74 69 6F 6E 42 72 61 63 6B 65 74 34 00 BF 06 1E 00 00 00 36 37 00 8D 00 1D 36 25 6F 80 09 00 70 72 6F 6D 6F 74 69 6F 6E 42 72 61 63 6B 65 74 33 00 BF 06 1E 00 00 00 36 3B 00 8D 00 1D 36 24 DA C0 09 00 70 72 6F 6D 6F 74 69 6F 6E 42 72 61 63 6B 65 74 32 00 BF 06 1E 00 00 00 36 3F 00 8D 00 1D 36 24 46 00 09 00 70 72 6F 6D 6F 74 69 6F 6E 42 72 61 63 6B 65 74 31 00 BF 06 1E 00 00 00 36 43 00 8D 00 1F 9B 12 EC 48 09 00 70 72 6F 6D 6F 74 69 6F 6E 42 72 61 63 6B 65 74 30 00 BF 06 14 00 00 00 36 47 00 8E 00 1D 83 BD E1 40 09 00 69 63 6F 6E 31 5F 31 00 BF 06 14 00 00 00 36 49 00 8F 00 1D C8 8D DF E0 09 00 69 63 6F 6E 31 5F 30 00 BF 06 14 00 00 00 36 4B 00 8E 00 1B 07 79 CD 00 09 00 69 63 6F 6E 32 5F 31 00 BF 06 14 00 00 00 36 4D 00 8F 00 1B 91 19 CD 80 09 00 69 63 6F 6E 32 5F 30 00 BF 06 14 00 00 00 36 4F 00 8E 00 1B 07 7C 29 80 09 00 69 63 6F 6E 33 5F 31 00 BF 06 13 00 00 00 36 51 00 8F 00 19 22 30 96 09 00 69 63 6F 6E 33 5F 30 00 BF 06 14 00 00 00 36 53 00 8E 00 1B 07 7E 73 00 09 00 69 63 6F 6E 34 5F 31 00 BF 06 13 00 00 00 36 55 00 8F 00 19 22 39 CE 09 00 69 63 6F 6E 34 5F 30 00 BF 06 14 00 00 00 36 57 00 8E 00 1B 07 73 19 00 09 00 69 63 6F 6E 36 5F 31 00 BF 06 13 00 00 00 36 59 00 8F 00 19 22 2C 68 09 00 69 63 6F 6E 36 5F 30 00 BF 06 14 00 00 00 36 5B 00 90 00 1B 07 AF FE 80 09 00 69 63 6F 6E 35 5F 30 00 BF 06 14 00 00 00 36 5D 00 90 00 1D 83 D5 18 80 09 00 69 63 6F 6E 30 5F 30 00 BF 06 21 00 00 00 36 5F 00 99 00 C9 41 E3 50 6F 0E CA 5A C5 90 09 00 73 65 6C 65 63 74 6F 72 42 72 61 63 6B 65 74 00 40 00 40 00 40 00 40 00 40 00 40 00 40 00 40 00 40 00 40 00 02 07 01 00 02 07 07 00 02 07 0D 00 02 07 13 00 02 07 19 00 02 07 1F 00 02 07 25 00 02 07 2B 00 02 07 2F 00 02 07 33 00 02 07 37 00 02 07 4F 00 02 07 51 00 02 07 53 00 02 07 55 00 02 07 57 00 02 07 59 00 02 07 5B 00 FF 0A 08 00 00 00 70 73 69 54 72 65 65 00 BF 06 13 00 00 00 36 01 00 9C 00 19 96 B5 A2 13 00 62 6F 72 64 65 72 32 00 BF 06 14 00 00 00 36 03 00 9C 00 1B CB 5B 16 00 13 00 62 6F 72 64 65 72 31 00 BF 06 14 00 00 00 36 05 00 9C 00 1B CB 58 C3 80 13 00 62 6F 72 64 65 72 30 00 88 06 05 3B 00 1D 36 36 02 00 88 06 05 3F 00 1D 36 1D 6E 00 88 06 05 43 00 1D 36 1C DA 00 88 06 05 47 00 1D 39 DF 08 C0 88 06 05 49 00 1D 74 87 08 C0 88 06 05 4B 00 1D 39 DF 9C 20 88 06 05 4D 00 1D 74 87 9C 20 88 06 05 5D 00 1D 35 DE 40 A0 40 00 40 00 40 00 40 00 40 00 40 00 40 00 40 00 40 00 40 00 00 00 FF 09 95 00 00 00 9E 00 01 00 BF 06 16 00 00 00 26 01 00 62 00 1D D7 74 3D 00 70 72 6F 6D 6F 74 69 6F 6E 42 47 00 BF 06 19 00 00 00 26 0D 00 63 00 20 88 BF E0 6A 73 6F 6C 64 69 65 72 53 74 61 74 73 4D 43 00 BF 06 18 00 00 00 26 0E 00 64 00 1E D8 E3 15 A0 73 6F 6C 64 69 65 72 49 6E 66 6F 4D 43 00 BF 06 17 00 00 00 26 0F 00 51 00 1E D9 14 01 F8 6D 65 63 41 62 69 6C 69 74 79 4D 43 00 BF 06 11 00 00 00 26 1B 00 9D 00 17 0D AD D0 74 68 65 54 72 65 65 00 40 00 00 00 3F 0E 1B 00 00 00 01 00 9E 00 53 6F 6C 64 69 65 72 50 72 6F 6D 6F 74 69 6F 6E 53 63 72 65 65 6E 00 BF 06 14 00 00 00 26 01 00 9E 00 1E B6 04 F8 18 74 68 65 53 63 72 65 65 6E 00 FF 09 06 00 00 00 9F 00 00 00 00 00 3F 0E 1B 00 00 00 01 00 9F 00 5F 5F 50 61 63 6B 61 67 65 73 2E 49 44 69 73 70 6F 73 61 62 6C 65 00 FF 0E 44 00 00 00 9F 00 88 16 00 02 00 5F 67 6C 6F 62 61 6C 00 49 44 69 73 70 6F 73 61 62 6C 65 00 96 02 00 08 00 1C 96 02 00 08 01 4E 12 12 9D 02 00 14 00 96 02 00 08 00 1C 96 02 00 08 01 9B 05 00 00 00 00 00 00 4F 17 00 FF 09 06 00 00 00 A0 00 00 00 00 00 3F 0E 1B 00 00 00 01 00 A0 00 5F 5F 50 61 63 6B 61 67 65 73 2E 45 6E 76 69 72 6F 6E 6D 65 6E 74 00 FF 0E CA 16 00 00 A0 00 88 A9 06 6E 00 5F 67 6C 6F 62 61 6C 00 45 6E 76 69 72 6F 6E 6D 65 6E 74 00 67 66 78 45 78 74 65 6E 73 69 6F 6E 73 00 64 65 62 75 67 67 69 6E 67 00 67 66 78 50 6C 61 79 65 72 00 67 66 78 56 65 72 73 69 6F 6E 00 72 65 73 6F 6C 75 74 69 6F 6E 00 66 6C 61 73 68 00 67 65 6F 6D 00 52 65 63 74 61 6E 67 6C 65 00 73 61 66 65 41 72 65 61 00 61 72 72 4E 6F 74 69 66 79 55 70 6F 6E 52 65 73 6F 6C 75 74 69 6F 6E 43 68 61 6E 67 65 00 41 72 72 61 79 00 61 72 72 4E 6F 74 69 66 79 55 70 6F 6E 49 6E 70 75 74 43 68 61 6E 67 65 00 49 4E 54 00 53 65 74 4C 61 6E 67 75 61 67 65 00 70 72 6F 74 6F 74 79 70 65 00 49 44 69 73 70 6F 73 61 62 6C 65 00 69 6E 73 74 61 6E 63 65 00 5F 69 6E 73 74 61 6E 63 65 00 64 69 73 70 6F 73 65 64 00 57 41 52 4E 49 4E 47 3A 20 52 65 2D 63 72 65 61 74 69 6E 67 20 61 20 6E 65 77 20 73 69 6E 67 6C 65 74 6F 6E 20 69 6E 73 74 61 6E 63 65 20 6F 66 20 45 6E 76 69 72 6F 6E 6D 65 6E 74 28 29 20 61 66 74 65 72 20 64 69 73 70 6F 73 65 21 00 64 69 73 70 6F 73 65 00 70 6C 61 74 66 6F 72 6D 00 74 6F 53 74 72 69 6E 67 00 7B 45 6E 76 69 72 6F 6E 6D 65 6E 74 00 7C 5F 67 6C 6F 62 61 6C 2E 67 66 78 45 78 74 65 6E 73 69 6F 6E 73 3A 00 7C 5F 67 6C 6F 62 61 6C 2E 64 65 62 75 67 67 69 6E 67 3A 00 7C 6D 6F 75 73 65 41 63 74 69 76 65 3A 00 62 49 73 4D 6F 75 73 65 45 6E 61 62 6C 65 64 00 7C 7D 00 53 65 74 56 69 65 77 00 45 6E 76 69 72 6F 6E 6D 65 6E 74 2E 53 65 74 56 69 65 77 3A 20 00 2C 20 00 57 41 52 4E 49 4E 47 3A 20 55 49 20 45 6E 76 69 72 6F 6E 6D 65 6E 74 2E 53 65 74 56 69 65 77 28 29 20 72 65 63 65 69 76 65 64 20 73 61 66 65 20 61 72 65 61 20 61 62 6F 76 65 20 31 2E 30 3A 20 00 4E 6F 74 69 66 79 52 65 73 6F 6C 75 74 69 6F 6E 43 68 61 6E 67 65 00 69 50 6C 61 74 66 6F 72 6D 00 67 65 74 41 6E 63 68 6F 72 00 41 4E 43 48 4F 52 5F 54 4F 50 5F 4C 45 46 54 00 41 4E 43 48 4F 52 5F 54 4F 50 5F 43 45 4E 54 45 52 00 41 4E 43 48 4F 52 5F 54 4F 50 5F 52 49 47 48 54 00 41 4E 43 48 4F 52 5F 4D 49 44 44 4C 45 5F 4C 45 46 54 00 41 4E 43 48 4F 52 5F 4D 49 44 44 4C 45 5F 43 45 4E 54 45 52 00 41 4E 43 48 4F 52 5F 4D 49 44 44 4C 45 5F 52 49 47 48 54 00 41 4E 43 48 4F 52 5F 42 4F 54 54 4F 4D 5F 4C 45 46 54 00 41 4E 43 48 4F 52 5F 42 4F 54 54 4F 4D 5F 43 45 4E 54 45 52 00 41 4E 43 48 4F 52 5F 42 4F 54 54 4F 4D 5F 52 49 47 48 54 00 6C 65 66 74 00 74 6F 70 00 72 69 67 68 74 00 62 6F 74 74 6F 6D 00 50 6F 69 6E 74 00 49 73 4D 6F 75 73 65 41 63 74 69 76 65 00 73 65 74 4D 6F 75 73 65 41 63 74 69 76 65 00 47 46 58 5F 49 4E 50 55 54 3A 20 53 65 74 4D 6F 75 73 65 41 63 74 69 76 65 3A 20 27 00 27 00 54 6F 67 67 6C 65 4D 6F 75 73 65 48 69 74 44 65 62 75 67 67 69 6E 67 00 54 6F 67 67 6C 69 6E 67 20 4D 6F 75 73 65 20 48 69 74 20 44 65 62 75 67 67 69 6E 67 20 66 6F 72 20 27 00 6F 6E 4D 6F 75 73 65 4D 6F 76 65 00 44 65 62 75 67 4D 6F 75 73 65 54 61 72 67 65 74 69 6E 67 00 4D 6F 75 73 65 00 67 65 74 54 6F 70 4D 6F 73 74 45 6E 74 69 74 79 00 63 75 72 72 65 6E 74 4D 6F 75 73 65 54 61 72 67 65 74 00 4D 6F 75 73 65 20 74 61 72 67 65 74 20 63 68 61 6E 67 65 64 3A 20 00 49 73 50 43 00 50 4C 41 54 46 4F 52 4D 5F 50 43 00 49 73 50 53 33 00 50 4C 41 54 46 4F 52 4D 5F 50 53 33 00 49 73 58 62 6F 78 00 50 4C 41 54 46 4F 52 4D 5F 58 42 4F 58 00 53 75 62 73 63 72 69 62 65 54 6F 52 65 73 6F 6C 75 74 69 6F 6E 55 70 64 61 74 65 00 6C 65 6E 67 74 68 00 45 6E 76 69 72 6F 6E 6D 65 6E 74 2E 53 75 62 73 63 72 69 62 65 54 6F 52 65 73 6F 6C 75 74 69 6F 6E 55 70 64 61 74 65 28 29 3A 20 44 75 70 6C 69 63 61 74 65 20 73 75 62 73 63 72 69 70 74 69 6F 6E 3F 20 59 6F 75 27 72 65 20 61 6C 72 65 61 64 79 20 73 75 62 73 63 72 69 62 65 64 20 76 69 61 20 74 68 69 73 20 66 75 6E 63 74 69 6F 6E 3A 20 00 70 75 73 68 00 55 6E 73 75 62 73 63 72 69 62 65 54 6F 52 65 73 6F 6C 75 74 69 6F 6E 55 70 64 61 74 65 00 73 70 6C 69 63 65 00 46 52 41 00 53 50 41 00 49 54 41 00 44 45 55 00 4B 4F 52 00 52 55 53 00 4A 50 4E 00 50 4F 4C 00 6C 61 6E 67 75 61 67 65 00 4C 41 4E 47 55 41 47 45 5F 46 52 41 00 4C 41 4E 47 55 41 47 45 5F 53 50 41 00 4C 41 4E 47 55 41 47 45 5F 49 54 41 00 4C 41 4E 47 55 41 47 45 5F 44 45 55 00 4C 41 4E 47 55 41 47 45 5F 4B 4F 52 00 4C 41 4E 47 55 41 47 45 5F 52 55 53 00 4C 41 4E 47 55 41 47 45 5F 4A 50 4E 00 4C 41 4E 47 55 41 47 45 5F 50 4F 4C 00 4C 41 4E 47 55 41 47 45 5F 49 4E 54 00 45 6E 76 69 72 6F 6E 6D 65 6E 74 2E 53 65 74 4C 61 6E 67 75 61 67 65 3A 20 42 41 44 20 4C 41 4E 47 55 41 47 45 20 53 45 54 21 20 27 00 27 2E 20 44 65 66 61 75 6C 74 69 6E 67 20 74 6F 20 49 4E 54 2E 00 67 65 74 4C 61 6E 67 75 61 67 65 00 69 73 4C 61 6E 67 75 61 67 65 00 73 65 74 4B 6F 72 65 61 6E 41 64 76 61 6E 63 65 42 75 74 74 6F 6E 53 77 61 70 00 62 4B 6F 72 65 61 6E 41 64 76 61 6E 63 65 42 75 74 74 6F 6E 53 77 61 70 00 49 73 4B 6F 72 65 61 6E 41 64 76 61 6E 63 65 42 75 74 74 6F 6E 53 77 61 70 41 63 74 69 76 65 00 47 65 74 41 64 76 61 6E 63 65 42 75 74 74 6F 6E 49 63 6F 6E 00 49 63 6F 6E 5F 42 5F 43 69 72 63 6C 65 00 49 63 6F 6E 5F 41 5F 58 00 47 65 74 42 61 63 6B 42 75 74 74 6F 6E 49 63 6F 6E 00 53 43 52 45 45 4E 5F 57 49 44 54 48 00 53 43 52 45 45 4E 5F 48 45 49 47 48 54 00 41 4E 43 48 4F 52 5F 4E 4F 4E 45 00 4D 4F 55 53 45 5F 44 4F 55 42 4C 45 5F 43 4C 49 43 4B 5F 53 50 45 45 44 00 41 53 53 65 74 50 72 6F 70 46 6C 61 67 73 00 [/BEFORE_HEX] [AFTER_HEX] FF 0A 0B 00 00 00 6E 6F 72 6D 61 6C 54 72 65 65 00 BF 06 1E 00 00 00 36 2B 00 8D 00 1D 36 27 2C E0 09 00 70 72 6F 6D 6F 74 69 6F 6E 42 72 61 63 6B 65 74 36 00 BF 06 1E 00 00 00 36 2F 00 8D 00 1D 36 26 98 20 09 00 70 72 6F 6D 6F 74 69 6F 6E 42 72 61 63 6B 65 74 35 00 BF 06 1E 00 00 00 36 33 00 8D 00 1D 36 26 03 E0 09 00 70 72 6F 6D 6F 74 69 6F 6E 42 72 61 63 6B 65 74 34 00 BF 06 1E 00 00 00 36 37 00 8D 00 1D 36 25 6F 80 09 00 70 72 6F 6D 6F 74 69 6F 6E 42 72 61 63 6B 65 74 33 00 BF 06 1E 00 00 00 36 3B 00 8D 00 1D 36 24 DA C0 09 00 70 72 6F 6D 6F 74 69 6F 6E 42 72 61 63 6B 65 74 32 00 BF 06 1E 00 00 00 36 3F 00 8D 00 1D 36 24 46 00 09 00 70 72 6F 6D 6F 74 69 6F 6E 42 72 61 63 6B 65 74 31 00 BF 06 1E 00 00 00 36 43 00 8D 00 1F 9B 12 EC 48 09 00 70 72 6F 6D 6F 74 69 6F 6E 42 72 61 63 6B 65 74 30 00 BF 06 14 00 00 00 36 45 00 8E 00 1D 83 05 4A E0 09 00 69 63 6F 6E 30 5F 32 00 BF 06 14 00 00 00 36 47 00 8E 00 1D A5 85 4A E0 09 00 69 63 6F 6E 30 5F 31 00 BF 06 14 00 00 00 36 49 00 8E 00 1D C8 05 4A E0 09 00 69 63 6F 6E 30 5F 30 00 BF 06 14 00 00 00 36 4B 00 8E 00 1D 83 05 DF 60 09 00 69 63 6F 6E 31 5F 32 00 BF 06 14 00 00 00 36 4D 00 8E 00 1D A5 85 DF 60 09 00 69 63 6F 6E 31 5F 31 00 BF 06 14 00 00 00 36 4F 00 8E 00 1D C8 05 DF 60 09 00 69 63 6F 6E 31 5F 30 00 BF 06 14 00 00 00 36 51 00 8E 00 1D 83 06 73 E0 09 00 69 63 6F 6E 32 5F 32 00 BF 06 14 00 00 00 36 53 00 8E 00 1D A5 86 73 E0 09 00 69 63 6F 6E 32 5F 31 00 BF 06 14 00 00 00 36 55 00 8E 00 1D C8 06 73 E0 09 00 69 63 6F 6E 32 5F 30 00 BF 06 14 00 00 00 36 57 00 8E 00 1D 83 07 08 60 09 00 69 63 6F 6E 33 5F 32 00 BF 06 14 00 00 00 36 59 00 8E 00 1D A5 87 08 60 09 00 69 63 6F 6E 33 5F 31 00 BF 06 14 00 00 00 36 5B 00 8E 00 1D C8 07 08 60 09 00 69 63 6F 6E 33 5F 30 00 BF 06 14 00 00 00 36 5D 00 8E 00 1D 83 07 9C E0 09 00 69 63 6F 6E 34 5F 32 00 BF 06 14 00 00 00 36 5F 00 8E 00 1D A5 87 9C E0 09 00 69 63 6F 6E 34 5F 31 00 BF 06 14 00 00 00 36 61 00 8E 00 1D C8 07 9C E0 09 00 69 63 6F 6E 34 5F 30 00 BF 06 14 00 00 00 36 63 00 8E 00 1D 83 00 31 60 09 00 69 63 6F 6E 35 5F 32 00 BF 06 14 00 00 00 36 65 00 8E 00 1D A5 80 31 60 09 00 69 63 6F 6E 35 5F 31 00 BF 06 14 00 00 00 36 67 00 8E 00 1D C8 00 31 60 09 00 69 63 6F 6E 35 5F 30 00 BF 06 14 00 00 00 36 69 00 8E 00 1D 83 00 C5 E0 09 00 69 63 6F 6E 36 5F 32 00 BF 06 14 00 00 00 36 6B 00 8E 00 1D A5 80 C5 E0 09 00 69 63 6F 6E 36 5F 31 00 BF 06 14 00 00 00 36 6D 00 8E 00 1D C8 00 C5 E0 09 00 69 63 6F 6E 36 5F 30 00 BF 06 21 00 00 00 36 5F 00 99 00 C9 41 E3 50 6F 0E CA 5A C5 90 09 00 73 65 6C 65 63 74 6F 72 42 72 61 63 6B 65 74 00 40 00 40 00 40 00 40 00 40 00 40 00 40 00 40 00 40 00 40 00 02 07 01 00 02 07 07 00 02 07 0D 00 02 07 13 00 02 07 19 00 02 07 1F 00 02 07 25 00 02 07 2B 00 02 07 2F 00 02 07 33 00 02 07 37 00 02 07 4F 00 02 07 51 00 02 07 53 00 02 07 55 00 02 07 57 00 02 07 59 00 02 07 5B 00 FF 0A 08 00 00 00 70 73 69 54 72 65 65 00 BF 06 13 00 00 00 36 01 00 9C 00 19 96 B5 A2 13 00 62 6F 72 64 65 72 32 00 BF 06 14 00 00 00 36 03 00 9C 00 1B CB 5B 16 00 13 00 62 6F 72 64 65 72 31 00 BF 06 14 00 00 00 36 05 00 9C 00 1B CB 58 C3 80 13 00 62 6F 72 64 65 72 30 00 88 06 05 3B 00 1D 36 36 02 00 88 06 05 3F 00 1D 36 1D 6E 00 88 06 05 43 00 1D 36 1C DA 00 88 06 05 47 00 1D 39 DF 08 C0 88 06 05 49 00 1D 74 87 08 C0 88 06 05 4B 00 1D 39 DF 9C 20 88 06 05 4D 00 1D 74 87 9C 20 88 06 05 5D 00 1D 35 DE 40 A0 40 00 40 00 40 00 40 00 40 00 40 00 40 00 40 00 40 00 40 00 00 00 FF 09 95 00 00 00 9E 00 01 00 BF 06 16 00 00 00 26 01 00 62 00 1D D7 74 3D 00 70 72 6F 6D 6F 74 69 6F 6E 42 47 00 BF 06 19 00 00 00 26 0D 00 63 00 20 88 BF E0 6A 73 6F 6C 64 69 65 72 53 74 61 74 73 4D 43 00 BF 06 18 00 00 00 26 0E 00 64 00 1E D8 E3 15 A0 73 6F 6C 64 69 65 72 49 6E 66 6F 4D 43 00 BF 06 17 00 00 00 26 0F 00 51 00 1E D9 14 01 F8 6D 65 63 41 62 69 6C 69 74 79 4D 43 00 BF 06 11 00 00 00 26 1B 00 9D 00 17 0D AD D0 74 68 65 54 72 65 65 00 40 00 00 00 3F 0E 1B 00 00 00 01 00 9E 00 53 6F 6C 64 69 65 72 50 72 6F 6D 6F 74 69 6F 6E 53 63 72 65 65 6E 00 BF 06 14 00 00 00 26 01 00 9E 00 1E B6 04 F8 18 74 68 65 53 63 72 65 65 6E 00 FF 09 06 00 00 00 9F 00 00 00 00 00 3F 0E 1B 00 00 00 01 00 9F 00 5F 5F 50 61 63 6B 61 67 65 73 2E 49 44 69 73 70 6F 73 61 62 6C 65 00 FF 0E 44 00 00 00 9F 00 88 16 00 02 00 5F 67 6C 6F 62 61 6C 00 49 44 69 73 70 6F 73 61 62 6C 65 00 96 02 00 08 00 1C 96 02 00 08 01 4E 12 12 9D 02 00 14 00 96 02 00 08 00 1C 96 02 00 08 01 9B 05 00 00 00 00 00 00 4F 17 00 FF 09 06 00 00 00 A0 00 00 00 00 00 3F 0E 1B 00 00 00 01 00 A0 00 5F 5F 50 61 63 6B 61 67 65 73 2E 45 6E 76 69 72 6F 6E 6D 65 6E 74 00 FF 0E DD 15 00 00 A0 00 88 BC 05 6E 00 5F 67 6C 6F 62 61 6C 00 45 6E 76 69 72 6F 6E 6D 65 6E 74 00 67 66 78 45 78 74 65 6E 73 69 6F 6E 73 00 64 65 62 75 67 67 69 6E 67 00 67 66 78 50 6C 61 79 65 72 00 67 66 78 56 65 72 73 69 6F 6E 00 72 65 73 6F 6C 75 74 69 6F 6E 00 66 6C 61 73 68 00 67 65 6F 6D 00 52 65 63 74 61 6E 67 6C 65 00 73 61 66 65 41 72 65 61 00 61 72 72 4E 6F 74 69 66 79 55 70 6F 6E 52 65 73 6F 6C 75 74 69 6F 6E 43 68 61 6E 67 65 00 41 72 72 61 79 00 61 72 72 4E 6F 74 69 66 79 55 70 6F 6E 49 6E 70 75 74 43 68 61 6E 67 65 00 49 4E 54 00 53 65 74 4C 61 6E 67 75 61 67 65 00 70 72 6F 74 6F 74 79 70 65 00 49 44 69 73 70 6F 73 61 62 6C 65 00 69 6E 73 74 61 6E 63 65 00 5F 69 6E 73 74 61 6E 63 65 00 64 69 73 70 6F 73 65 64 00 57 41 52 4E 49 4E 47 3A 20 00 64 69 73 70 6F 73 65 00 70 6C 61 74 66 6F 72 6D 00 74 6F 53 74 72 69 6E 67 00 7B 45 6E 76 69 72 6F 6E 6D 65 6E 74 00 7C 5F 67 6C 6F 62 61 6C 2E 67 66 78 45 78 74 65 6E 73 69 6F 6E 73 3A 00 7C 5F 67 6C 6F 62 61 6C 2E 64 65 62 75 67 67 69 6E 67 3A 00 7C 6D 6F 75 73 65 41 63 74 69 76 65 3A 00 62 49 73 4D 6F 75 73 65 45 6E 61 62 6C 65 64 00 7C 7D 00 53 65 74 56 69 65 77 00 45 6E 76 69 72 6F 6E 6D 65 6E 74 2E 53 65 74 56 69 65 77 3A 20 00 2C 20 00 57 41 52 4E 49 4E 47 3A 20 00 4E 6F 74 69 66 79 52 65 73 6F 6C 75 74 69 6F 6E 43 68 61 6E 67 65 00 69 50 6C 61 74 66 6F 72 6D 00 67 65 74 41 6E 63 68 6F 72 00 41 4E 43 48 4F 52 5F 54 4F 50 5F 4C 45 46 54 00 41 4E 43 48 4F 52 5F 54 4F 50 5F 43 45 4E 54 45 52 00 41 4E 43 48 4F 52 5F 54 4F 50 5F 52 49 47 48 54 00 41 4E 43 48 4F 52 5F 4D 49 44 44 4C 45 5F 4C 45 46 54 00 41 4E 43 48 4F 52 5F 4D 49 44 44 4C 45 5F 43 45 4E 54 45 52 00 41 4E 43 48 4F 52 5F 4D 49 44 44 4C 45 5F 52 49 47 48 54 00 41 4E 43 48 4F 52 5F 42 4F 54 54 4F 4D 5F 4C 45 46 54 00 41 4E 43 48 4F 52 5F 42 4F 54 54 4F 4D 5F 43 45 4E 54 45 52 00 41 4E 43 48 4F 52 5F 42 4F 54 54 4F 4D 5F 52 49 47 48 54 00 6C 65 66 74 00 74 6F 70 00 72 69 67 68 74 00 62 6F 74 74 6F 6D 00 50 6F 69 6E 74 00 49 73 4D 6F 75 73 65 41 63 74 69 76 65 00 73 65 74 4D 6F 75 73 65 41 63 74 69 76 65 00 47 46 58 5F 49 4E 50 55 54 3A 20 53 65 74 4D 6F 75 73 65 41 63 74 69 76 65 3A 20 27 00 27 00 54 6F 67 67 6C 65 4D 6F 75 73 65 48 69 74 44 65 62 75 67 67 69 6E 67 00 54 6F 67 67 6C 69 6E 67 20 4D 6F 75 73 65 20 48 69 74 20 44 65 62 75 67 67 69 6E 67 20 66 6F 72 20 27 00 6F 6E 4D 6F 75 73 65 4D 6F 76 65 00 44 65 62 75 67 4D 6F 75 73 65 54 61 72 67 65 74 69 6E 67 00 4D 6F 75 73 65 00 67 65 74 54 6F 70 4D 6F 73 74 45 6E 74 69 74 79 00 63 75 72 72 65 6E 74 4D 6F 75 73 65 54 61 72 67 65 74 00 4D 6F 75 73 65 20 74 61 72 67 65 74 20 63 68 61 6E 67 65 64 3A 20 00 49 73 50 43 00 50 4C 41 54 46 4F 52 4D 5F 50 43 00 49 73 50 53 33 00 50 4C 41 54 46 4F 52 4D 5F 50 53 33 00 49 73 58 62 6F 78 00 50 4C 41 54 46 4F 52 4D 5F 58 42 4F 58 00 53 75 62 73 63 72 69 62 65 54 6F 52 65 73 6F 6C 75 74 69 6F 6E 55 70 64 61 74 65 00 6C 65 6E 67 74 68 00 45 20 00 70 75 73 68 00 55 6E 73 75 62 73 63 72 69 62 65 54 6F 52 65 73 6F 6C 75 74 69 6F 6E 55 70 64 61 74 65 00 73 70 6C 69 63 65 00 46 52 41 00 53 50 41 00 49 54 41 00 44 45 55 00 4B 4F 52 00 52 55 53 00 4A 50 4E 00 50 4F 4C 00 6C 61 6E 67 75 61 67 65 00 4C 41 4E 47 55 41 47 45 5F 46 52 41 00 4C 41 4E 47 55 41 47 45 5F 53 50 41 00 4C 41 4E 47 55 41 47 45 5F 49 54 41 00 4C 41 4E 47 55 41 47 45 5F 44 45 55 00 4C 41 4E 47 55 41 47 45 5F 4B 4F 52 00 4C 41 4E 47 55 41 47 45 5F 52 55 53 00 4C 41 4E 47 55 41 47 45 5F 4A 50 4E 00 4C 41 4E 47 55 41 47 45 5F 50 4F 4C 00 4C 41 4E 47 55 41 47 45 5F 49 4E 54 00 45 6E 76 69 72 6F 6E 6D 65 6E 74 2E 53 65 74 4C 61 6E 67 3A 20 42 41 44 20 4C 41 4E 47 55 41 47 45 20 53 45 54 21 20 27 00 27 2E 20 44 65 66 61 75 6C 74 69 6E 67 20 74 6F 20 49 4E 54 2E 00 67 65 74 4C 61 6E 67 75 61 67 65 00 69 73 4C 61 6E 67 75 61 67 65 00 73 65 74 4B 6F 72 65 61 6E 41 64 76 61 6E 63 65 42 75 74 74 6F 6E 53 77 61 70 00 62 4B 6F 72 65 61 6E 41 64 76 61 6E 63 65 42 75 74 74 6F 6E 53 77 61 70 00 49 73 4B 6F 72 65 61 6E 41 64 76 61 6E 63 65 42 75 74 74 6F 6E 53 77 61 70 41 63 74 69 76 65 00 47 65 74 41 64 76 61 6E 63 65 42 75 74 74 6F 6E 49 63 6F 6E 00 49 63 6F 6E 5F 42 5F 43 69 72 63 6C 65 00 49 63 6F 6E 5F 41 5F 58 00 47 65 74 42 61 63 6B 42 75 74 74 6F 6E 49 63 6F 6E 00 53 43 52 45 45 4E 5F 57 49 44 54 48 00 53 43 52 45 45 4E 5F 48 45 49 47 48 54 00 41 4E 43 48 4F 52 5F 4E 4F 4E 45 00 4D 4F 55 53 45 5F 44 4F 55 42 4C 45 5F 43 4C 49 43 4B 5F 53 50 45 45 44 00 41 53 53 65 74 50 72 6F 70 46 6C 61 67 73 00 [/AFTER_HEX] Core unreal changes: MODFILEVERSION=3 UPKFILE=XComGame.upk GUID=5B 06 B8 18 67 22 12 44 85 9B A8 5B 9D 57 1D 4B // XComGame_EW_patch1.upk FUNCTION=GetPerkInTree@XComPerkManager // alters GetPerk in Tree to retrieve more perks from DGC.ini // GetPerkInTreePsi is no longer used -- instead Psi Perks are stored in class eSC_Psi [BEFORE_HEX] [HEADER] 99 02 00 00 B9 01 00 00 [/HEADER] [code] //null op -- optional parameter 0B //if(bIsPsiTree) 07 2B 00 2D 00 02 71 00 00 //return GetPerkInTreePsi(branch, Option) 04 1B 5F 3A 00 00 00 00 00 00 00 04 71 00 00 00 03 71 00 00 16 //bFound = false 14 2D 00 FF 70 00 00 28 //foreach SoldierPerkTrees(kTree,) 58 01 18 2B 00 00 00 00 71 00 00 00 4A 8C 00 //if(kTree.SoldierType == soldierClass) 07 8B 00 9A 38 3A 35 0A 2B 00 00 0B 2B 00 00 00 00 00 00 71 00 00 38 3A 00 05 71 00 00 16 //bFound = true 14 2D 00 FF 70 00 00 27 //break 06 8C 00 //IN 31 //IP 30 //if(bFound) 07 8B 02 2D 00 FF 70 00 00 //switch(branch) 05 04 71 00 00 00 00 04 71 00 00 //case 1: 0A CE 00 26 //return kTree.Squaddie 04 35 09 2B 00 00 0B 2B 00 00 00 00 00 00 71 00 00 //case 2: 0A 1F 01 2C 02 //if(Option == 0) 07 02 01 9A 00 03 71 00 00 25 16 //return kTree.Corporal1 04 35 08 2B 00 00 0B 2B 00 00 00 00 00 00 71 00 00 //else 06 1F 01 //return kTree.Corporal2 04 35 07 2B 00 00 0B 2B 00 00 00 00 00 00 71 00 00 //case 3: 0A 70 01 2C 03 //if(Option == 0) 07 53 01 9A 00 03 71 00 00 25 16 //return kTree.Sergeant1 04 35 06 2B 00 00 0B 2B 00 00 00 00 00 00 71 00 00 //else 06 70 01 //return kTree.Sergeant2 04 35 05 2B 00 00 0B 2B 00 00 00 00 00 00 71 00 00 //case 4: 0A C1 01 2C 04 //if(Option == 0) 07 A4 01 9A 00 03 71 00 00 25 16 //return kTree.Lieutenant1 04 35 04 2B 00 00 0B 2B 00 00 00 00 00 00 71 00 00 //else 06 C1 01 //return kTree.Lieutenant2 04 35 03 2B 00 00 0B 2B 00 00 00 00 00 00 71 00 00 //case 5: 0A 12 02 2C 05 //if(Option == 0) 07 F5 01 9A 00 03 71 00 00 25 16 //return kTree.Captain1 04 35 02 2B 00 00 0B 2B 00 00 00 00 00 00 71 00 00 //else 06 12 02 //return kTree.Captain2 04 35 01 2B 00 00 0B 2B 00 00 00 00 00 00 71 00 00 //case 6: 0A 34 02 2C 06 //return kTree.Major 04 35 00 2B 00 00 0B 2B 00 00 00 00 00 00 71 00 00 //case 7: 0A 85 02 2C 07 //if(Option == 0) 07 68 02 9A 00 03 71 00 00 25 16 //return kTree.Colonel1 04 35 FF 2A 00 00 0B 2B 00 00 00 00 00 00 71 00 00 //else 06 85 02 //return kTree.Colonel2 04 35 FE 2A 00 00 0B 2B 00 00 00 00 00 00 71 00 00 //default: 0A FF FF //break 06 8B 02 //return 0 04 24 00 //return ReturnValue 04 3A 01 71 00 00 //EOS 53 [/CODE] [/BEFORE_HEX] // snag int local variable from another function to store iteration count // 00 1E 71 00 00 -- iNumGeneMods from NumGeneMods@XComPerkManager [AFTER_HEX] [HEADER] 55 02 00 00 B9 01 00 00 [/HEADER] [code] //null op -- optional parameter 0B //if(bIsPsiTree) 07 1A 00 2D 00 02 71 00 00 // soldierClass = eSC_Psi (5) 0F 00 05 71 00 00 24 05 //bFound = false 14 2D 00 FF 70 00 00 28 // iNumGeneMods = 0 0F 00 1E 71 00 00 2C 00 //foreach SoldierPerkTrees(kTree,) 58 01 18 2B 00 00 00 00 71 00 00 00 4A A9 00 //if(kTree.SoldierType == soldierClass) 07 A8 00 9A 38 3A 35 0A 2B 00 00 0B 2B 00 00 00 00 00 00 71 00 00 38 3A 00 05 71 00 00 16 // if(iNumGeneMods == Option) 07 9D 00 9A 00 1E 71 00 00 00 03 71 00 00 16 //bFound = true 14 2D 00 FF 70 00 00 27 //break 06 A9 00 //iNumGeneMods++; A3 00 1E 71 00 00 16 //IN 31 //IP 30 //if(bFound) 07 BD 01 2D 00 FF 70 00 00 //switch(branch) 05 04 71 00 00 00 00 04 71 00 00 //case 1: 0A EB 00 26 //return kTree.Squaddie 04 35 09 2B 00 00 0B 2B 00 00 00 00 00 00 71 00 00 //case 2: 0A 0D 01 2C 02 //return kTree.Corporal1 04 35 08 2B 00 00 0B 2B 00 00 00 00 00 00 71 00 00 //case 3: 0A 2F 01 2C 03 //return kTree.Sergeant1 04 35 06 2B 00 00 0B 2B 00 00 00 00 00 00 71 00 00 //case 4: 0A 51 01 2C 04 //return kTree.Lieutenant1 04 35 04 2B 00 00 0B 2B 00 00 00 00 00 00 71 00 00 //case 5: 0A 73 01 2C 05 //return kTree.Captain1 04 35 02 2B 00 00 0B 2B 00 00 00 00 00 00 71 00 00 //case 6: 0A 95 01 2C 06 //return kTree.Major 04 35 00 2B 00 00 0B 2B 00 00 00 00 00 00 71 00 00 //case 7: 0A B7 01 2C 07 //return kTree.Colonel1 04 35 FF 2A 00 00 0B 2B 00 00 00 00 00 00 71 00 00 //default: 0A FF FF //break 06 BD 01 //return 0 04 24 00 //return ReturnValue 04 3A 01 71 00 00 //null-ops 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B /null-ops 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B //EOS 53 [/CODE] [/AFTER_HEX] MODFILEVERSION=4 UPKFILE=XComStrategyGame.upk GUID=31 9C 3B 3F 9C 5D E4 40 AB AF 92 8E 25 65 74 F2 // XComStrategyGame_EW_patch1.upk FUNCTION=PreviousPerksToAssign@XGSoldierUI // altered to check for 3 perks per rank [BEFORE_HEX] [HEADER] 34 01 00 00 E4 00 00 00 [/HEADER] [code] //if((GetAbilityTreeBranch()) > 0) 07 27 01 97 1B 1D 11 00 00 00 00 00 00 16 25 16 //iBranch = 1 0F 00 B1 4C 00 00 26 //if(iBranch < (GetAbilityTreeBranch())) 07 27 01 96 00 B1 4C 00 00 1B 1D 11 00 00 00 00 00 00 16 16 //perkA = m_kSoldier.HasPerk(m_kSoldier.GetPerkInClassTree(iBranch, 0, m_iCurrentView == 2)) 14 2D 00 B0 4C 00 00 19 01 78 4C 00 00 42 00 8B 53 00 00 00 1B 28 14 00 00 00 00 00 00 38 3A 19 01 78 4C 00 00 21 00 E4 52 00 00 00 1B DB 12 00 00 00 00 00 00 00 B1 4C 00 00 25 9A 01 1C 09 00 00 2C 02 16 16 16 //perkB = m_kSoldier.HasPerk(m_kSoldier.GetPerkInClassTree(iBranch, 1, m_iCurrentView == 2)) 14 2D 00 AF 4C 00 00 19 01 78 4C 00 00 42 00 8B 53 00 00 00 1B 28 14 00 00 00 00 00 00 38 3A 19 01 78 4C 00 00 21 00 E4 52 00 00 00 1B DB 12 00 00 00 00 00 00 00 B1 4C 00 00 26 9A 01 1C 09 00 00 2C 02 16 16 16 //if(!perkA && !perkB) 07 19 01 82 81 2D 00 B0 4C 00 00 16 18 0D 00 81 2D 00 AF 4C 00 00 16 16 //return true 04 27 //++ iBranch A5 00 B1 4C 00 00 16 //while loop 06 1B 00 //return false 04 28 //return ReturnValue 04 3A B2 4C 00 00 //EOS 53 [/CODE] [/BEFORE_HEX] // uses local int iMedalIndex from XGSoldierUI.GetMedalName 00 0D 4D 00 00 [AFTER_HEX] [HEADER] 34 01 00 00 E4 00 00 00 [/HEADER] [code] //if((GetAbilityTreeBranch()) > 0) 07 15 01 97 1B 1D 11 00 00 00 00 00 00 16 25 16 //iBranch = 1 0F 00 B1 4C 00 00 26 //if(iBranch < (GetAbilityTreeBranch())) 07 15 01 96 00 B1 4C 00 00 1B 1D 11 00 00 00 00 00 00 16 16 // perkB = false 14 2D 00 AF 4C 00 00 28 //iMedalIndex = 0 0F 00 0D 4D 00 00 25 //if (iMedalIndex < 3) 07 F6 00 96 00 0D 4D 00 00 2C 03 16 //perkA = m_kSoldier.HasPerk(m_kSoldier.GetPerkInClassTree(iBranch, iMedalIndex, m_iCurrentView == 2)) 14 2D 00 B0 4C 00 00 19 01 78 4C 00 00 4A 00 8B 53 00 00 00 1B 28 14 00 00 00 00 00 00 38 3A 19 01 78 4C 00 00 29 00 E4 52 00 00 00 1B DB 12 00 00 00 00 00 00 00 B1 4C 00 00 00 0D 4D 00 00 9A 01 1C 09 00 00 2C 02 16 16 16 // perkB = perkB || perkA 14 2D 00 AF 4C 00 00 84 2D 00 AF 4C 00 00 18 0B 00 2D 00 B0 4C 00 00 16 // ++ iMedalIndex A5 00 0D 4D 00 00 16 // while loop 06 4A 00 //if(!perkB) 07 07 01 81 2D 00 AF 4C 00 00 16 //return true 04 27 //++ iBranch A5 00 B1 4C 00 00 16 //while loop 06 1B 00 //return false 04 28 //return ReturnValue 04 3A B2 4C 00 00 //null ops 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B //EOS 53 [/CODE] [/AFTER_HEX] MODFILEVERSION=4 UPKFILE=XComStrategyGame.upk GUID=31 9C 3B 3F 9C 5D E4 40 AB AF 92 8E 25 65 74 F2 // XComStrategyGame_EW_patch1.upk FUNCTION=AssignRandomPerks@XGStrategySoldier //RESTART=0 //fix up random perk assignment to work with more perks // now creates a virtual 3x7 array of random perks [BEFORE_HEX] [HEADER] B8 01 00 00 38 01 00 00 [/HEADER] [code] //kPerkMan = PERKS() 0F 00 DD 52 00 00 1B DA 27 00 00 00 00 00 00 16 //m_arrRandomPerks.Length = 0 0F 36 01 9F 52 00 00 25 //I = 2 0F 00 DC 52 00 00 26 //if(I < 8) 07 B5 01 96 00 DC 52 00 00 2C 08 16 //J = 0 0F 00 DB 52 00 00 25 //if(J < 2) 07 A7 01 96 00 DB 52 00 00 2C 02 16 //ePerk = kPerkMan.GetPerkInTree(m_kChar.eClass, I, J) 0F 00 DE 52 00 00 19 00 DD 52 00 00 39 00 1C FF FF FF 00 1B DD 12 00 00 00 00 00 00 35 02 FF FF FF CB F9 FF FF 00 00 01 B3 52 00 00 00 DC 52 00 00 00 DB 52 00 00 4A 16 //if(kPerkMan.IsFixedPerk(ePerk)) 07 F2 00 19 00 DD 52 00 00 13 00 61 FF FF FF 00 1B C9 17 00 00 00 00 00 00 00 DE 52 00 00 16 //m_arrRandomPerks.AddItem(ePerk) 55 01 9F 52 00 00 0A 00 00 DE 52 00 00 16 //else 06 75 01 //ePerk = kPerkMan.GetRandomPerk() 0F 00 DE 52 00 00 19 00 DD 52 00 00 0A 00 1A FF FF FF 00 1B FE 12 00 00 00 00 00 00 16 //if(!IsRandomPerkValidToAdd(ePerk)) 07 5F 01 81 1B 3A 18 00 00 00 00 00 00 00 DE 52 00 00 16 16 //ePerk = kPerkMan.GetRandomPerk() 0F 00 DE 52 00 00 19 00 DD 52 00 00 0A 00 1A FF FF FF 00 1B FE 12 00 00 00 00 00 00 16 //while loop 06 1B 01 //m_arrRandomPerks.AddItem(ePerk) 55 01 9F 52 00 00 0A 00 00 DE 52 00 00 16 //if((I == 1) || I == 6) 07 99 01 84 9A 00 DC 52 00 00 26 16 18 0E 00 9A 00 DC 52 00 00 2C 06 16 16 //break 06 A7 01 //++ J A3 00 DB 52 00 00 16 //while loop (J) 06 46 00 //++ I A3 00 DC 52 00 00 16 //while loop (I) 06 2B 00 //return 04 0B //EOS 53 [/CODE] [/BEFORE_HEX] // using local int Y -- 00 7D 22 00 00 // from XComHeadquartersCheatManager.FacilityStressTest [AFTER_HEX] [HEADER] AB 01 00 00 38 01 00 00 [/HEADER] [code] // Y = GetClass() 0F 00 7D 22 00 00 38 3A 1B 64 11 00 00 00 00 00 00 16 //kPerkMan = PERKS() 0F 00 DD 52 00 00 1B DA 27 00 00 00 00 00 00 16 //m_arrRandomPerks.Length = 0 0F 36 01 9F 52 00 00 25 //I = 1 0F 00 DC 52 00 00 2C 01 //if(I < 8) 07 9C 01 96 00 DC 52 00 00 2C 08 16 //J = 0 0F 00 DB 52 00 00 25 //if(J < 3) 07 8E 01 96 00 DB 52 00 00 2C 03 16 // if ( true ) // switch to enable subclass perk selection for Long War 07 A6 00 27 // if(m_iEnergy < 20 && I > 1) 07 A6 00 82 96 01 AD 52 00 00 2C 14 16 18 0B 00 97 00 DC 52 00 00 2C 01 16 16 //Y = m_iEnergy 0F 00 7D 22 00 00 01 AD 52 00 00 //ePerk = kPerkMan.GetPerkInTree(byte(Y), I, J) 0F 00 DE 52 00 00 19 00 DD 52 00 00 28 00 1C FF FF FF 00 1B DD 12 00 00 00 00 00 00 38 3D 00 7D 22 00 00 00 DC 52 00 00 00 DB 52 00 00 4A 16 //if(kPerkMan.IsFixedPerk(ePerk)) // 07 1B 01 19 00 DD 52 00 00 13 00 61 FF FF FF 00 1B C9 17 00 00 00 00 00 00 00 DE 52 00 00 16 //else 06 6A 01 //ePerk = 0 0F 00 DE 52 00 00 25 //if(!IsRandomPerkValidToAdd(ePerk)) 07 6A 01 81 1B 3A 18 00 00 00 00 00 00 00 DE 52 00 00 16 16 //ePerk = kPerkMan.GetRandomPerk() 0F 00 DE 52 00 00 19 00 DD 52 00 00 0A 00 1A FF FF FF 00 1B FE 12 00 00 00 00 00 00 16 //while loop 06 26 01 //m_arrRandomPerks.AddItem(ePerk) 55 01 9F 52 00 00 0A 00 00 DE 52 00 00 16 //++ J A3 00 DB 52 00 00 16 //while loop (J) 06 5D 00 //++ I A3 00 DC 52 00 00 16 //while loop (I) 06 42 00 //return 04 0B //null ops 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B //EOS 53 [/CODE] [/AFTER_HEX] MODFILEVERSION=4 UPKFILE=XComStrategyGame.upk GUID=31 9C 3B 3F 9C 5D E4 40 AB AF 92 8E 25 65 74 F2 // XComStrategyGame_EW_patch1.upk FUNCTION=GetPerkInClassTree@XGStrategySoldier //fix up random perk retrieval to work with more perks // now assumes the random perks are placed in a 3x7 grid array [BEFORE_HEX] [HEADER] 24 02 00 00 98 01 00 00 [/HEADER] [code] //null -- default value for optional parameter 0B //if((IsOptionEnabled(4)) && !IsASuperSoldier()) 07 AD 01 82 1B 22 18 00 00 00 00 00 00 24 04 16 18 0D 00 81 1B 6C 17 00 00 00 00 00 00 16 16 16 //if(bIsPsiTree) 07 61 00 2D 00 E5 52 00 00 //return PERKS().GetPerkInTreePsi(branch, Option) 04 19 1B DA 27 00 00 00 00 00 00 16 1C 00 1B FF FF FF 00 1B DE 12 00 00 00 00 00 00 00 E7 52 00 00 00 E6 52 00 00 16 //switch(branch) 05 E7 52 00 00 00 00 E7 52 00 00 //case 1: 0A 86 00 26 //I = 0 0F 00 E3 52 00 00 25 //break 06 99 01 //case 2: 0A B7 00 2C 02 //if(Option == 0) 07 A8 00 9A 00 E6 52 00 00 25 16 //I = 1 0F 00 E3 52 00 00 26 //else 06 B4 00 //I = 2 0F 00 E3 52 00 00 2C 02 //break 06 99 01 //case 3: 0A E9 00 2C 03 //if(Option == 0) 07 DA 00 9A 00 E6 52 00 00 25 16 //I = 3 0F 00 E3 52 00 00 2C 03 //else 06 E6 00 //I = 4 0F 00 E3 52 00 00 2C 04 //break 06 99 01 //case 4: 0A 1B 01 2C 04 //if(Option == 0) 07 0C 01 9A 00 E6 52 00 00 25 16 //I = 5 0F 00 E3 52 00 00 2C 05 //else 06 18 01 //I = 6 0F 00 E3 52 00 00 2C 06 //break 06 99 01 //case 5: 0A 4D 01 2C 05 //if(Option == 0) 07 3E 01 9A 00 E6 52 00 00 25 16 //I = 7 0F 00 E3 52 00 00 2C 07 //else 06 4A 01 //I = 8 0F 00 E3 52 00 00 2C 08 //break 06 99 01 //case 6: 0A 61 01 2C 06 //I = 9 0F 00 E3 52 00 00 2C 09 //break 06 99 01 //case 7: 0A 93 01 2C 07 //if(Option == 0) 07 84 01 9A 00 E6 52 00 00 25 16 //I = 10 0F 00 E3 52 00 00 2C 0A //else 06 90 01 //I = 11 0F 00 E3 52 00 00 2C 0B //break 06 99 01 //default: 0A FF FF //return 0 04 24 00 //return m_arrRandomPerks[I] 04 10 00 E3 52 00 00 01 9F 52 00 00 //return PERKS().GetPerkInTree(m_kSoldier.kClass.eType, branch, Option, bIsPsiTree) 04 19 1B DA 27 00 00 00 00 00 00 16 55 00 1C FF FF FF 00 1B DD 12 00 00 00 00 00 00 35 01 FF FF FF CA F9 FF FF 00 00 35 DC F8 FF FF C1 F9 FF FF 00 00 01 B2 52 00 00 00 E7 52 00 00 00 E6 52 00 00 2D 00 E5 52 00 00 16 //return ReturnValue 04 3A E4 52 00 00 //EOS 53 [/CODE] [/BEFORE_HEX] [AFTER_HEX] [HEADER] F8 01 00 00 98 01 00 00 [/HEADER] [code] //null -- default value for optional parameter 0B //if(bIsPsiTree) 07 7A 00 2D 00 E5 52 00 00 //return PERKS().GetPerkInTree(m_kSoldier.kClass.eType, branch, Option, bIsPsiTree) 04 19 1B DA 27 00 00 00 00 00 00 16 55 00 1C FF FF FF 00 1B DD 12 00 00 00 00 00 00 35 01 FF FF FF CA F9 FF FF 00 00 35 DC F8 FF FF C1 F9 FF FF 00 00 01 B2 52 00 00 00 E7 52 00 00 00 E6 52 00 00 2D 00 E5 52 00 00 16 //if((IsOptionEnabled(4)) && !IsASuperSoldier() && branch != 1) // add explicitly that first rank perks can't be randomized -- used for subclass system 07 D3 00 82 82 1B 22 18 00 00 00 00 00 00 24 04 16 18 0D 00 81 1B 6C 17 00 00 00 00 00 00 16 16 16 18 0F 00 9B 00 E7 52 00 00 2C 01 16 16 //return m_arrRandomPerks[(branch-1)*3 + Option] 04 10 92 90 2C 03 93 00 E7 52 00 00 2C 01 16 16 00 E6 52 00 00 16 01 9F 52 00 00 // I = GetClass() 0F 00 E3 52 00 00 38 3A 1B 64 11 00 00 00 00 00 00 16 // if(false) // switch to enable retrieval of subclasses' perks 07 1F 01 28 // if(branch != 1 || IsAugmented()) // subclass perks not retrieved for first rank 07 1F 01 84 9B 00 E7 52 00 00 2C 01 16 18 0B 00 1B 76 17 00 00 00 00 00 00 16 16 // I = m_iEnergy; 0F 00 E3 52 00 00 01 AD 52 00 00 //return PERKS().GetPerkInTree(byte(I), branch, Option, bIsPsiTree) 04 19 1B DA 27 00 00 00 00 00 00 16 31 00 1C FF FF FF 00 1B DD 12 00 00 00 00 00 00 38 3D 00 E3 52 00 00 00 E7 52 00 00 00 E6 52 00 00 2D 00 E5 52 00 00 16 //return ReturnValue 04 3A E4 52 00 00 //null ops 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B //EOS 53 [/CODE] [/AFTER_HEX] MODFILEVERSION=3 UPKFILE=XComStrategyGame.upk GUID=31 9C 3B 3F 9C 5D E4 40 AB AF 92 8E 25 65 74 F2 // XComStrategyGame_EW_patch1.upk FUNCTION=HasAvailablePerksToAssign@XGStrategySoldier // updated to handle up to 3 perks //psionics case [BEFORE_HEX] [code] //if(jIndex < 2) 07 2C 01 96 00 EA 52 00 00 2C 02 16 [/CODE] [/BEFORE_HEX] [AFTER_HEX] [code] //if(jIndex < 3) 07 2C 01 96 00 EA 52 00 00 2C 03 16 [/CODE] [/AFTER_HEX] //regular tree case [BEFORE_HEX] [code] if(jIndex < 2) 07 E7 01 96 00 EA 52 00 00 2C 02 16 [/CODE] [/BEFORE_HEX] [AFTER_HEX] [code] if(jIndex < 3) 07 E7 01 96 00 EA 52 00 00 2C 03 16 [/CODE] [/AFTER_HEX] MODFILEVERSION=4 UPKFILE=XComStrategyGame.upk GUID=31 9C 3B 3F 9C 5D E4 40 AB AF 92 8E 25 65 74 F2 // XComStrategyGame_EW_patch1.upk FUNCTION=IsRandomPerkValidToAdd@XGStrategySoldier // ensure that the 0 perk is not considered a valid random perk [BEFORE_HEX] [HEADER] 28 01 00 00 E0 00 00 00 [/HEADER] [code] //if(m_arrRandomPerks.Find(Perk) != -1) 07 22 00 9B 46 01 9F 52 00 00 0A 00 00 E1 52 00 00 16 1D FF FF FF FF 16 //return false 04 28 //if(Perk == 23) 07 4D 00 9A 38 3A 00 E1 52 00 00 38 3A 24 17 16 //return m_arrRandomPerks.Find(54) == -1 04 9A 46 01 9F 52 00 00 03 00 24 36 16 1D FF FF FF FF 16 //if(Perk == 54) 07 78 00 9A 38 3A 00 E1 52 00 00 38 3A 24 36 16 //return m_arrRandomPerks.Find(23) == -1 04 9A 46 01 9F 52 00 00 03 00 24 17 16 1D FF FF FF FF 16 //if(Perk == 94) 07 DE 00 9A 38 3A 00 E1 52 00 00 38 3A 24 5E 16 //if((m_kChar.eClass == 2) || m_kChar.eClass == 6) 07 DE 00 84 9A 38 3A 35 02 FF FF FF CB F9 FF FF 00 00 01 B3 52 00 00 38 3A 24 02 16 18 25 00 9A 38 3A 35 02 FF FF FF CB F9 FF FF 00 00 01 B3 52 00 00 38 3A 24 06 16 16 //return false 04 28 //if(Perk == 26) 07 1B 01 9A 38 3A 00 E1 52 00 00 38 3A 24 1A 16 //if(m_kChar.eClass == 1) 07 1B 01 9A 38 3A 35 02 FF FF FF CB F9 FF FF 00 00 01 B3 52 00 00 38 3A 24 01 16 //return false 04 28 //return true 04 27 //return ReturnValue 04 3A E0 52 00 00 //EOS 53 [/CODE] [/BEFORE_HEX] // using local int X -- 00 7E 22 00 00 // from XComHeadQuartersCheatManager.FacilityStressTest [AFTER_HEX] [HEADER] 1B 01 00 00 E0 00 00 00 [/HEADER] [code] // X = m_kChar.eClass 0F 00 7E 22 00 00 38 3A 35 02 FF FF FF CB F9 FF FF 00 00 01 B3 52 00 00 //if(Perk == 0) 07 3B 00 9A 38 3A 00 E1 52 00 00 25 16 // return false 04 28 //if(m_arrRandomPerks.Find(Perk) != -1) 07 5D 00 9B 46 01 9F 52 00 00 0A 00 00 E1 52 00 00 16 1D FF FF FF FF 16 //return false 04 28 //switch (Perk) 05 E1 52 00 00 00 00 E1 52 00 00 //case 23: // ePerk_RapidReaction 0A 8C 00 24 17 //return m_arrRandomPerks.Find(54) == -1 // ePerk_Sentinel 04 9A 46 01 9F 52 00 00 03 00 24 36 16 1D FF FF FF FF 16 //case 54: // ePerk_Sentinel 0A A8 00 24 36 //return m_arrRandomPerks.Find(23) == -1 // ePerk_RapidReaction 04 9A 46 01 9F 52 00 00 03 00 24 17 16 1D FF FF FF FF 16 // case 94: // ePerk_Gunslinger 0A D1 00 24 5E //if((X == 2) || X == 6) 07 D1 00 84 9A 00 7E 22 00 00 2C 02 16 18 25 00 9A 00 7E 22 00 00 2C 06 16 16 //return false 04 28 // case 26: // ePerk_BulletSwarm 0A E8 00 24 1A //if(X == 1) 07 E8 00 9A 00 7E 22 00 00 2C 01 16 //return false 04 28 //case default 0A FF FF //break 06 EE 00 //return true 04 27 //return ReturnValue 04 3A E0 52 00 00 //null ops 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B //EOS 53 [/CODE] [/AFTER_HEX] MODFILEVERSION=3 UPKFILE=XComStrategyGame.upk GUID=31 9C 3B 3F 9C 5D E4 40 AB AF 92 8E 25 65 74 F2 // XComStrategyGame_EW_patch1.upk // XComStrategyGame_EU_patch4.upk FUNCTION=UpdateAbilityData@UISoldierPromotion // alters display mechanic to hide ranks below current // alters display of perks to allow 3 perks per rank // alters display of perks to display nothing if perk value is 0 [BEFORE_HEX] [HEADER] 75 05 00 00 DD 03 00 00 [/HEADER] [code] // if(m_bPsiPromotion) 07 45 00 2D 01 C0 1A 00 00 // abilityColumns = 3 0F 00 F8 1A 00 00 2C 03 // SoldierRank = m_kSoldier.GetPsiRank() 0F 00 F7 1A 00 00 19 01 BE 1A 00 00 0A 00 C8 52 00 00 00 1B F5 12 00 00 00 00 00 00 16 // else 06 7A 00 // abilityColumns = 7 0F 00 F8 1A 00 00 2C 07 // SoldierRank = m_kSoldier.GetRank() 0F 00 F7 1A 00 00 19 01 BE 1A 00 00 0A 00 C6 52 00 00 00 1B 00 13 00 00 00 00 00 00 16 // isFirstPromotableColumn = true 14 2D 00 F5 1A 00 00 27 // column = 0 0F 00 FB 1A 00 00 25 // if(column < abilityColumns) 07 67 05 96 00 FB 1A 00 00 00 F8 1A 00 00 16 // isColumnPromotable = true 14 2D 00 F6 1A 00 00 27 // Row = 0 0F 00 FA 1A 00 00 25 // if(Row < 2) 07 B4 02 96 00 FA 1A 00 00 2C 02 16 // if(Row > 0) 07 18 01 97 00 FA 1A 00 00 25 16 if(column == 0) 07 F3 00 9A 00 FB 1A 00 00 25 16 // break 06 B4 02 // else 06 18 01 // if((m_bPsiPromotion == false) && column == 5) 07 18 01 82 F2 2D 01 C0 1A 00 00 28 16 18 0E 00 9A 00 FB 1A 00 00 2C 05 16 16 //break 06 B4 02 // Perk = m_kSoldier.GetPerkInClassTree(column + 1, Row, m_bPsiPromotion) 0F 00 F9 1A 00 00 38 3A 19 01 BE 1A 00 00 29 00 E4 52 00 00 00 1B DB 12 00 00 00 00 00 00 92 00 FB 1A 00 00 26 16 00 FA 1A 00 00 2D 01 C0 1A 00 00 16 // if(m_kSoldier.HasPerk(Perk) || column >= SoldierRank) 07 B2 01 84 19 01 BE 1A 00 00 13 00 8B 53 00 00 00 1B 28 14 00 00 00 00 00 00 00 F9 1A 00 00 16 18 15 00 99 00 FB 1A 00 00 00 F7 1A 00 00 16 16 // isColumnPromotable = false 14 2D 00 F6 1A 00 00 28 // if(column >= SoldierRank) 07 19 02 99 00 FB 1A 00 00 00 F7 1A 00 00 16 // AS_SetAbilityIcon(column, Row, "unknown", m_kSoldier.HasPerk(Perk)) 1B 59 02 00 00 00 00 00 00 00 FB 1A 00 00 00 FA 1A 00 00 1F 75 6E 6B 6E 6F 77 6E 00 19 01 BE 1A 00 00 13 00 8B 53 00 00 00 1B 28 14 00 00 00 00 00 00 00 F9 1A 00 00 16 16 //else 06 A6 02 // AS_SetAbilityIcon(column, Row, class'UIUtilities'.static.GetPerkIconLabel(Perk, GetMgr().perkMgr()), m_kSoldier.HasPerk(Perk)) 1B 59 02 00 00 00 00 00 00 00 FB 1A 00 00 00 FA 1A 00 00 12 20 6C FE FF FF 34 00 5E F9 FF FF 00 1B D9 12 00 00 00 00 00 00 00 F9 1A 00 00 19 1B 71 12 00 00 00 00 00 00 4A 16 0A 00 0C 01 00 00 00 1B D9 27 00 00 00 00 00 00 16 16 19 01 BE 1A 00 00 13 00 8B 53 00 00 00 1B 28 14 00 00 00 00 00 00 00 F9 1A 00 00 16 16 // ++ Row A3 00 FA 1A 00 00 16 //while loop 06 BF 00 // if(isColumnPromotable) 07 26 04 2D 00 F6 1A 00 00 // if(isFirstPromotableColumn) 07 96 03 2D 00 F5 1A 00 00 // isFirstPromotableColumn = false 14 2D 00 F5 1A 00 00 28 // GetMgr().SetAbilityTreeBranch(column + 1) 19 1B 71 12 00 00 00 00 00 00 4A 16 16 00 00 00 00 00 00 1B 58 2A 00 00 00 00 00 00 92 00 FB 1A 00 00 26 16 16 // AS_SetColumnData(column, Caps(XComGameReplicationInfo(class'Engine'.static.GetCurrentWorldInfo().GRI).m_kGameCore.GetRankString(column + 1)), 1) 1B 72 02 00 00 00 00 00 00 00 FB 1A 00 00 EB 19 19 2E 5C FE FF FF 19 12 20 CD FE FF FF 0A 00 A8 FA FF FF 00 1C 49 FD FF FF 16 09 00 91 FA FF FF 00 01 91 FA FF FF 09 00 60 FA FF FF 00 01 60 FA FF FF 18 00 1B F9 FF FF 00 1B 02 13 00 00 00 00 00 00 92 00 FB 1A 00 00 26 16 4A 4A 16 16 26 16 //else 06 23 04 // AS_SetColumnData(column, Caps(XComGameReplicationInfo(class'Engine'.static.GetCurrentWorldInfo().GRI).m_kGameCore.GetRankString(column + 1)), 2) 1B 72 02 00 00 00 00 00 00 00 FB 1A 00 00 EB 19 19 2E 5C FE FF FF 19 12 20 CD FE FF FF 0A 00 A8 FA FF FF 00 1C 49 FD FF FF 16 09 00 91 FA FF FF 00 01 91 FA FF FF 09 00 60 FA FF FF 00 01 60 FA FF FF 18 00 1B F9 FF FF 00 1B 02 13 00 00 00 00 00 00 92 00 FB 1A 00 00 26 16 4A 4A 16 16 2C 02 16 //else 06 59 05 // if(column >= SoldierRank) 07 CD 04 99 00 FB 1A 00 00 00 F7 1A 00 00 16 // AS_SetColumnData(column, Caps(XComGameReplicationInfo(class'Engine'.static.GetCurrentWorldInfo().GRI).m_kGameCore.GetRankString(column + 1)), 3) 1B 72 02 00 00 00 00 00 00 00 FB 1A 00 00 EB 19 19 2E 5C FE FF FF 19 12 20 CD FE FF FF 0A 00 A8 FA FF FF 00 1C 49 FD FF FF 16 09 00 91 FA FF FF 00 01 91 FA FF FF 09 00 60 FA FF FF 00 01 60 FA FF FF 18 00 1B F9 FF FF 00 1B 02 13 00 00 00 00 00 00 92 00 FB 1A 00 00 26 16 4A 4A 16 16 2C 03 16 // else 06 59 05 // AS_SetColumnData(column, Caps(XComGameReplicationInfo(class'Engine'.static.GetCurrentWorldInfo().GRI).m_kGameCore.GetRankString(column + 1)), 0) 1B 72 02 00 00 00 00 00 00 00 FB 1A 00 00 EB 19 19 2E 5C FE FF FF 19 12 20 CD FE FF FF 0A 00 A8 FA FF FF 00 1C 49 FD FF FF 16 09 00 91 FA FF FF 00 01 91 FA FF FF 09 00 60 FA FF FF 00 01 60 FA FF FF 18 00 1B F9 FF FF 00 1B 02 13 00 00 00 00 00 00 92 00 FB 1A 00 00 26 16 4A 4A 16 16 25 16 // ++ column A3 00 FB 1A 00 00 16 // while loop 06 91 00 // RealizeSelected() 1C FE 1A 00 00 4A 16 // return 04 0B // EOS 53 [/CODE] [/BEFORE_HEX] [AFTER_HEX] [HEADER] E5 04 00 00 DD 03 00 00 [/HEADER] [code] // if(m_bPsiPromotion) 07 45 00 2D 01 C0 1A 00 00 // abilityColumns = 3 0F 00 F8 1A 00 00 2C 03 // SoldierRank = m_kSoldier.GetPsiRank() 0F 00 F7 1A 00 00 19 01 BE 1A 00 00 0A 00 C8 52 00 00 00 1B F5 12 00 00 00 00 00 00 16 // else 06 7A 00 // abilityColumns = 7 0F 00 F8 1A 00 00 2C 07 // SoldierRank = m_kSoldier.GetRank() 0F 00 F7 1A 00 00 19 01 BE 1A 00 00 0A 00 C6 52 00 00 00 1B 00 13 00 00 00 00 00 00 16 // isFirstPromotableColumn = true 14 2D 00 F5 1A 00 00 27 // column = 0 0F 00 FB 1A 00 00 25 // if(column < 7) 07 74 03 96 00 FB 1A 00 00 2C 07 16 // if(column >= SoldierRank) 07 D3 00 99 00 FB 1A 00 00 00 F7 1A 00 00 16 // Row = 3 0F 00 FA 1A 00 00 2C 03 // isFirstPromotableColumn = false 14 2D 00 F5 1A 00 00 28 //else 06 C9 02 // Row = 0 0F 00 FA 1A 00 00 2C 00 // isColumnPromotable = true 14 2D 00 F6 1A 00 00 27 // if(Row < 3) //increase to 3 to allow up to 3 perks per rank 07 4D 02 96 00 FA 1A 00 00 2C 03 16 // Perk = m_kSoldier.GetPerkInClassTree(column + 1, Row, m_bPsiPromotion) // get perk -- can be zero, which means display no icon 0F 00 F9 1A 00 00 38 3A 19 01 BE 1A 00 00 29 00 E4 52 00 00 00 1B DB 12 00 00 00 00 00 00 92 00 FB 1A 00 00 26 16 00 FA 1A 00 00 2D 01 C0 1A 00 00 16 // if(m_kSoldier.HasPerk(Perk) || column >= SoldierRank) 07 95 01 84 19 01 BE 1A 00 00 13 00 8B 53 00 00 00 1B 28 14 00 00 00 00 00 00 00 F9 1A 00 00 16 18 15 00 99 00 FB 1A 00 00 00 F7 1A 00 00 16 16 // isColumnPromotable = false 14 2D 00 F6 1A 00 00 28 // if (isFirstPromotableColumn) 07 3F 02 2D 00 F5 1A 00 00 // if(Perk > 0) 07 3F 02 97 00 F9 1A 00 00 2C 00 16 // AS_SetAbilityIcon(column, Row, class'UIUtilities'.static.GetPerkIconLabel(Perk, GetMgr().perkMgr()), m_kSoldier.HasPerk(Perk)) 1B 59 02 00 00 00 00 00 00 00 FB 1A 00 00 00 FA 1A 00 00 12 20 6C FE FF FF 34 00 5E F9 FF FF 00 1B D9 12 00 00 00 00 00 00 00 F9 1A 00 00 19 1B 71 12 00 00 00 00 00 00 4A 16 0A 00 0C 01 00 00 00 1B D9 27 00 00 00 00 00 00 16 16 19 01 BE 1A 00 00 13 00 8B 53 00 00 00 1B 28 14 00 00 00 00 00 00 00 F9 1A 00 00 16 16 // ++ Row A3 00 FA 1A 00 00 16 //while loop 06 EB 00 // if(isColumnPromotable) 07 BD 02 2D 00 F6 1A 00 00 // if(isFirstPromotableColumn) 07 AE 02 2D 00 F5 1A 00 00 // mode 1 -- column is highlighted and active // Row = 1; 0F 00 FA 1A 00 00 26 // isFirstPromotableColumn = false 14 2D 00 F5 1A 00 00 28 // GetMgr().SetAbilityTreeBranch(column + 1) 19 1B 71 12 00 00 00 00 00 00 4A 16 16 00 00 00 00 00 00 1B 58 2A 00 00 00 00 00 00 92 00 FB 1A 00 00 26 16 16 //else 06 BA 02 // mode 2 -- column is faded and inactive // Row = 2; 0F 00 FA 1A 00 00 2C 02 //else 06 C9 02 // mode 0 -- column has been promoted -- column highlighting is off // Row = 0; 0F 00 FA 1A 00 00 2C 00 // AS_SetColumnData(column, Caps(XComGameReplicationInfo(class'Engine'.static.GetCurrentWorldInfo().GRI).m_kGameCore.GetRankString(column + 1, , m_bPsiPromotion)), Row) 1B 72 02 00 00 00 00 00 00 00 FB 1A 00 00 EB 19 19 2E 5C FE FF FF 19 12 20 CD FE FF FF 0A 00 A8 FA FF FF 00 1C 49 FD FF FF 16 09 00 91 FA FF FF 00 01 91 FA FF FF 09 00 60 FA FF FF 00 01 60 FA FF FF 21 00 1B F9 FF FF 00 1B 02 13 00 00 00 00 00 00 92 00 FB 1A 00 00 26 16 4A 2D 01 C0 1A 00 00 16 16 00 FA 1A 00 00 16 // ++ column A3 00 FB 1A 00 00 16 // while loop 06 91 00 // RealizeSelected() 1C FE 1A 00 00 4A 16 // return 04 0B // null ops 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B // EOS 53 [/CODE] [/AFTER_HEX] MODFILEVERSION=3 UPKFILE=XComStrategyGame.upk GUID=31 9C 3B 3F 9C 5D E4 40 AB AF 92 8E 25 65 74 F2 // XComStrategyGame_EW_patch1.upk FUNCTION=PerkLockedOut@XGStrategySoldier // updated to handle up to 3 perks // subsumed into Psionics rework version [BEFORE_HEX] [code] if(iOptions < 2) 07 CE 00 96 00 F0 52 00 00 2C 02 16 [/CODE] [/BEFORE_HEX] [AFTER_HEX] [code] if(iOptions < 3) 07 CE 00 96 00 F0 52 00 00 2C 03 16 [/CODE] [/AFTER_HEX] To install the above changes UICollection_Strategy_SF.upk, XComGame.upk, and XComStrategyGame.upk must be decompressed. The following changes patch up gamepad/keyboard functionality. If you're only using a mouse you can skip these: MODFILEVERSION=3 UPKFILE=XComStrategyGame.upk GUID=31 9C 3B 3F 9C 5D E4 40 AB AF 92 8E 25 65 74 F2 // XComStrategyGame_EW_patch1.upk FUNCTION=OnPromotionDown@XGSoldierUI //clamp keyboard/gamepad down motion to no more than current soldier rank [BEFORE_HEX] [HEADER] 79 00 00 00 61 00 00 00 [/HEADER] [code] //newBranch = (GetAbilityTreeBranch()) + 1 0F 00 BE 4C 00 00 92 1B 1D 11 00 00 00 00 00 00 16 26 16 //if(newBranch > ((m_iCurrentView == 1) ? 7 : 3)) 07 59 00 97 00 BE 4C 00 00 45 9A 01 1C 09 00 00 26 16 02 00 2C 07 02 00 2C 03 16 //newBranch = ((m_iCurrentView == 1) ? 7 : 3) 0F 00 BE 4C 00 00 45 9A 01 1C 09 00 00 26 16 02 00 2C 07 02 00 2C 03 //SetAbilityTreeBranch(newBranch) 1B 58 2A 00 00 00 00 00 00 00 BE 4C 00 00 16 //PlayScrollSound() 1B 0F 28 00 00 00 00 00 00 16 //return 04 0B //EOS 53 [/CODE] [/BEFORE_HEX] [AFTER_HEX] [HEADER] 75 00 00 00 61 00 00 00 [/HEADER] [code] // newBranch = ((m_iCurrentView == 1) ? m_kSoldier.GetRank() : m_kSoldier.GetPsiRank()) //0F 00 BE 4C 00 00 45 9A 01 1C 09 00 00 26 16 1F 00 19 01 78 4C 00 00 0A 00 C6 52 00 00 00 1B 00 13 00 00 00 00 00 00 16 1F 00 19 01 78 4C 00 00 0A 00 C8 52 00 00 00 1B F5 12 00 00 00 00 00 00 16 // newBranch = Min(GetAbilityTreeBranch() + 1, newBranch) //0F 00 BE 4C 00 00 F9 92 1B 1D 11 00 00 00 00 00 00 16 26 16 00 BE 4C 00 00 16 //SetAbilityTreeBranch(newBranch) //1B 58 2A 00 00 00 00 00 00 00 BE 4C 00 00 16 //setAbilityTreeBranch(Min(GetAbilityTreeBranch()+1, ((m_iCurrentView == 1) ? m_kSoldier.GetRank() : m_kSoldier.GetPsiRank())) 1B 58 2A 00 00 00 00 00 00 F9 92 1B 1D 11 00 00 00 00 00 00 16 26 16 45 9A 01 1C 09 00 00 26 16 1F 00 19 01 78 4C 00 00 0A 00 C6 52 00 00 00 1B 00 13 00 00 00 00 00 00 16 1F 00 19 01 78 4C 00 00 0A 00 C8 52 00 00 00 1B F5 12 00 00 00 00 00 00 16 16 16 //PlayScrollSound() 1B 0F 28 00 00 00 00 00 00 16 //return 04 0B //null ops //EOS 53 [/CODE] [/AFTER_HEX] MODFILEVERSION=3 UPKFILE=XComStrategyGame.upk GUID=31 9C 3B 3F 9C 5D E4 40 AB AF 92 8E 25 65 74 F2 // XComStrategyGame_EW_patch1.upk FUNCTION=OnPromotionLeft@XGSoldierUI //redirect to call RotateSoldier@XGSoldierUI [BEFORE_HEX] [code] 1B 59 2A 00 00 00 00 00 00 26 16 1B 0F 28 00 00 00 00 00 00 16 [/CODE] [/BEFORE_HEX] [AFTER_HEX] [code] 1B EF 29 00 00 00 00 00 00 26 16 1B 0F 28 00 00 00 00 00 00 16 [/CODE] [/AFTER_HEX] MODFILEVERSION=3 UPKFILE=XComStrategyGame.upk GUID=31 9C 3B 3F 9C 5D E4 40 AB AF 92 8E 25 65 74 F2 // XComStrategyGame_EW_patch1.upk FUNCTION=OnPromotionRight@XGSoldierUI //redirect to call RotateSoldier@XGSoldierUI [BEFORE_HEX] [code] 1B 59 2A 00 00 00 00 00 00 25 16 1B 0F 28 00 00 00 00 00 00 16 [/CODE] [/BEFORE_HEX] [AFTER_HEX] [code] 1B EF 29 00 00 00 00 00 00 25 16 1B 0F 28 00 00 00 00 00 00 16 [/CODE] [/AFTER_HEX] MODFILEVERSION=3 UPKFILE=XComStrategyGame.upk GUID=31 9C 3B 3F 9C 5D E4 40 AB AF 92 8E 25 65 74 F2 // XComStrategyGame_EW_patch1.upk FUNCTION=RotateSoldier@XGSoldierUI //turn into helper function for left/right keyboard/gamepad perk selection [BEFORE_HEX] [HEADER] 75 00 00 00 51 00 00 00 [/HEADER] [code] 07 72 00 82 77 01 78 4C 00 00 2A 16 18 22 00 77 19 01 78 4C 00 00 09 00 A1 52 00 00 00 01 A1 52 00 00 2A 16 16 19 19 01 78 4C 00 00 09 00 A1 52 00 00 00 01 A1 52 00 00 13 00 00 00 00 00 00 1B ED 29 00 00 00 00 00 00 00 9B 4C 00 00 16 04 0B 53 [/CODE] [/BEFORE_HEX] [AFTER_HEX] [HEADER] 55 00 00 00 51 00 00 00 [/HEADER] [code] SetAbilityTreeOption(Clamp(GetAbilityTreeOption() + (Dir *2) - 1, 0, 2); (39 bytes) 1B 59 2A 00 00 00 00 00 00 FB 93 92 1B 1E 11 00 00 00 00 00 00 16 90 00 9B 4C 00 00 2C 02 16 16 26 16 25 2C 02 16 16 null ops 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B return, EOS 04 0B 53 [/CODE] [/AFTER_HEX] To make changes to the DGC.ini, you'll need to have installed the XComEW.exe-patch to force the game to load DefaultGameCore.ini from file instead of Resource Cache. Perks are configured in the DGC.ini using the following template: SoldierPerkTrees=(SoldierType=eSC_Sniper, Squaddie=ePerk_SquadSight, Corporal1=ePerk_SquadSight, Corporal2=0, Sergeant1=ePerk_DamnGoodGround, Sergeant2=0, Lieutenant1=ePerk_BattleScanner, Lieutenant2=0, Captain1=ePerk_Opportunist, Captain2=0, Major=0, Colonel1=ePerk_DoubleTap, Colonel2=0) SoldierPerkTrees=(SoldierType=eSC_Sniper, Squaddie=0, Corporal1=0, Corporal2=0, Sergeant1=0, Sergeant2=0, Lieutenant1=0, Lieutenant2=0, Captain1=0, Captain2=0, Major=ePerk_LowProfile, Colonel1=0, Colonel2=0) SoldierPerkTrees=(SoldierType=eSC_Sniper, Squaddie=ePerk_LightningReflexes, Corporal1=ePerk_SnapShot, Corporal2=0, Sergeant1=ePerk_Gunslinger, Sergeant2=0, Lieutenant1=ePerk_DisablingShot, Lieutenant2=0, Captain1=ePerk_Executioner, Captain2=0, Major=0, Colonel1=ePerk_InTheZone, Colonel2=0) SoldierPerkTrees=(SoldierType=eSC_HeavyWeapons, Squaddie=ePerk_FireRocket, Corporal1=ePerk_TracerBeams, Corporal2=0, Sergeant1=ePerk_FocusedSuppression, Sergeant2=0, Lieutenant1=ePerk_RapidReaction, Lieutenant2=0, Captain1=ePerk_DangerZone, Captain2=0, Major=0, Colonel1=ePerk_Mayhem, Colonel2=0) SoldierPerkTrees=(SoldierType=eSC_HeavyWeapons, Squaddie=0, Corporal1=0, Corporal2=0, Sergeant1=0, Sergeant2=0, Lieutenant1=0, Lieutenant2=0, Captain1=0, Captain2=0, Major=ePerk_WillToSurvive, Colonel1=0, Colonel2=0) SoldierPerkTrees=(SoldierType=eSC_HeavyWeapons, Squaddie=ePerk_FocusedSuppression, Corporal1=ePerk_BulletSwarm, Corporal2=0, Sergeant1=ePerk_ShredderRocket, Sergeant2=0, Lieutenant1=ePerk_HEATAmmo, Lieutenant2=0, Captain1=ePerk_Grenadier, Captain2=0, Major=0, Colonel1=ePerk_Rocketeer, Colonel2=0) SoldierPerkTrees=(SoldierType=eSC_Support, Squaddie=ePerk_FieldMedic, Corporal1=ePerk_CoveringFire, Corporal2=0, Sergeant1=ePerk_SmokeAndMirrors, Sergeant2=0, Lieutenant1=ePerk_FocusedSuppression, Lieutenant2=0, Captain1=ePerk_CombatDrugs, Captain2=0, Major=0, Colonel1=ePerk_Sentinel, Colonel2=0) SoldierPerkTrees=(SoldierType=eSC_Support, Squaddie=0, Corporal1=0, Corporal2=0, Sergeant1=0, Sergeant2=0, Lieutenant1=0, Lieutenant2=0, Captain1=0, Captain2=0, Major=ePerk_DeepPockets, Colonel1=0, Colonel2=0) SoldierPerkTrees=(SoldierType=eSC_Support, Squaddie=ePerk_Grenadier, Corporal1=ePerk_Sprinter, Corporal2=0, Sergeant1=ePerk_FieldMedic, Sergeant2=0, Lieutenant1=ePerk_Revive, Lieutenant2=0, Captain1=ePerk_DenseSmoke, Captain2=0, Major=0, Colonel1=ePerk_Savior, Colonel2=0) SoldierPerkTrees=(SoldierType=eSC_Assault, Squaddie=ePerk_RunAndGun, Corporal1=ePerk_Aggression, Corporal2=0, Sergeant1=ePerk_CloseAndPersonal, Sergeant2=0, Lieutenant1=ePerk_RapidFire, Lieutenant2=0, Captain1=ePerk_BringEmOn, Captain2=0, Major=0, Colonel1=ePerk_KillerInstinct, Colonel2=0) SoldierPerkTrees=(SoldierType=eSC_Assault, Squaddie=0, Corporal1=0, Corporal2=0, Sergeant1=0, Sergeant2=0, Lieutenant1=0, Lieutenant2=0, Captain1=0, Captain2=0, Major=ePerk_ExtraConditioning, Colonel1=0, Colonel2=0) SoldierPerkTrees=(SoldierType=eSC_Assault, Squaddie=ePerk_BulletSwarm, Corporal1=ePerk_TacticalSense, Corporal2=0, Sergeant1=ePerk_LightningReflexes, Sergeant2=0, Lieutenant1=ePerk_Flush, Lieutenant2=0, Captain1=ePerk_CloseCombatSpecialist, Captain2=0, Major=0, Colonel1=ePerk_Resilience, Colonel2=0) SoldierPerkTrees=(SoldierType=eSC_Psi, Squaddie=0, Corporal1=ePerk_PsiPanic, Corporal2=0, Sergeant1=ePerk_MindControl, Sergeant2=0, Lieutenant1=0, Lieutenant2=0, Captain1=0, Captain2=0, Major=0, Colonel1=0, Colonel2=0) SoldierPerkTrees=(SoldierType=eSC_Psi, Squaddie=ePerk_MindFray, Corporal1=0, Corporal2=0, Sergeant1=0, Sergeant2=0, Lieutenant1=0, Lieutenant2=0, Captain1=0, Captain2=0, Major=0, Colonel1=0, Colonel2=0) SoldierPerkTrees=(SoldierType=eSC_Psi, Squaddie=0, Corporal1=ePerk_PsiInspiration, Corporal2=0, Sergeant1=ePerk_TelekineticField, Sergeant2=0, Lieutenant1=0, Lieutenant2=0, Captain1=0, Captain2=0, Major=0, Colonel1=0, Colonel2=0) Unfortunately this hasn't been converted into a more end-user-friendly method of installation such as Toolboks or UPK-Utils. I've managed to avoid resizing any functions so it should be able to be converted into either format. Link to comment Share on other sites More sharing options...
Mohreb Posted May 11, 2014 Share Posted May 11, 2014 Hi i would like to try out a larger perk tree, but i am kind-of lost how to install those changes. Should i just copy those code sections to a text file, then use them with PatcherGUI? (i know it is probably explained somewhere in this thread), but could someone please explain in simple steps what to do to have those larger trait-trees? (i would like to use them with training roulette if that matters) Link to comment Share on other sites More sharing options...
ArunnyE Posted June 20, 2014 Share Posted June 20, 2014 Hi i would like to try out a larger perk tree, but i am kind-of lost how to install those changes. Should i just copy those code sections to a text file, then use them with PatcherGUI? (i know it is probably explained somewhere in this thread), but could someone please explain in simple steps what to do to have those larger trait-trees? (i would like to use them with training roulette if that matters) Very much this. I would like to give the Major Rank two choices, because more often than not, entire characters gets screwed up by the fact that Major only gives 1 choice. With Training Roulette, Major really should have two choices, just like any other Rank. But I have no idea how to use the information in this thread, and it's 18 pages to plow through, and most of those pages are very old, maybe not even applicable to Enemy Within. Help, anyone? D: Link to comment Share on other sites More sharing options...
Amineri Posted June 21, 2014 Author Share Posted June 21, 2014 I did my best to modularize the Expanded Perk Tree (when I updated it for EW), but there did end up being some intersection points with other Long War specific code. In particular :- The LongWar subclasses required some significant alterations- The Psionics rework required changes to how some functions allow psionic powers to be trained I haven't tested the basic Expanded Perk Tree by itself with vanilla in quite a while, so I can't guarantee that it will be compatible, but here's a link to the 13 upk_mod files in the module for Long War : https://drive.google.com/folderview?id=0Bxrv8QdeQ-cybnQxUUlMVkFfT2M&usp=sharing It also changes how the config data is read, as previously mentioned in the thread. Link to comment Share on other sites More sharing options...
ArunnyE Posted June 21, 2014 Share Posted June 21, 2014 (edited) I did my best to modularize the Expanded Perk Tree (when I updated it for EW), but there did end up being some intersection points with other Long War specific code. In particular :- The LongWar subclasses required some significant alterations- The Psionics rework required changes to how some functions allow psionic powers to be trained I haven't tested the basic Expanded Perk Tree by itself with vanilla in quite a while, so I can't guarantee that it will be compatible, but here's a link to the 13 upk_mod files in the module for Long War : https://drive.google.com/folderview?id=0Bxrv8QdeQ-cybnQxUUlMVkFfT2M&usp=sharing It also changes how the config data is read, as previously mentioned in the thread. I really appreciate you taking the time, and I feel like a total idiot for asking, but all mods I've dealt with so far either uses the Patcher, ol' ToolBoks (I think that's the name), or editing of the .ini-files. Looking at the .upk_mod-files in Notepad+ that you just linked, they seem to contain the same (exact same?) information as you posted earlier. Now.. *cough* what.. what do I actually do with them? Do I place them somewhere? Do I run them through some kind of patcher to edit the .upk-files? I'm.. at a bit of a loss. Edit: Alright, so, after searching vigorously for a while, I've found the UPKModder v0.82, but I can't work out the instructions. It doesn't seem to be working, but that's likely because I have no idea how I'm supposed to configure the upk_config.ini. What information goes where? It lists files I can't even find in my folders, such as XComGame_EU_Patch4.upk and such. Also, I doubt that anyone ever had such files dumped straight in C:/Games, especially considering that the .upk-files are usually way down in the XCOM installation folders (in my case, D:\Games\Steam\SteamApps\common\XCom-Enemy-Unknown\XEW\XComGame\CookedPCConsole). Any pointers on that? And I'm not even sure what the GUID lines are. I've managed to create a Project and I dumped the .upk_mod-files in the modsrc-folder of the project. So if I can work out the UPKModder configurations, I think it should just be punch and go.. right? I think. Edited June 21, 2014 by SwedenRebel Link to comment Share on other sites More sharing options...
Amineri Posted June 21, 2014 Author Share Posted June 21, 2014 Well, you have a few different options. 1) Try and work out how to configure UPKmodder -- UPKmodder isn't designed as a mod installer, although it does have some limited installation capabilities. So it won't patch the executable to load the DGC.ini, and it won't decompress the upks in the CookedPCConsole folder for you. You also have to link to the upks being modded (using the button in the lower left when a upk_mod file is open) 2) Convert the upk_mod files into PatchGUI format -- they are fairly similar, and none of the Expanded Perk Tree changes resize, so this should be fairly straightforward 3) Manually install using a hex editor -- since none of the modfiles do a resize operation, manual installation is possible Link to comment Share on other sites More sharing options...
ArunnyE Posted June 21, 2014 Share Posted June 21, 2014 Well, you have a few different options. 1) Try and work out how to configure UPKmodder -- UPKmodder isn't designed as a mod installer, although it does have some limited installation capabilities. So it won't patch the executable to load the DGC.ini, and it won't decompress the upks in the CookedPCConsole folder for you. You also have to link to the upks being modded (using the button in the lower left when a upk_mod file is open) 2) Convert the upk_mod files into PatchGUI format -- they are fairly similar, and none of the Expanded Perk Tree changes resize, so this should be fairly straightforward 3) Manually install using a hex editor -- since none of the modfiles do a resize operation, manual installation is possible1) I've tried to figure it out, but I'm just not sure what it's asking for. The executable is patched to load the DGC.ini and the relevant .upk-files in the CookedPCConsole should be decompressed now, but I still have no idea how to configure the config file for UPKmodder. Like I said, what information goes where? And I'm not even sure what the GUID lines are. I'd love to configure it, but I just have no idea what it's asking, like I said earlier, some of the files it seems to make references to doesn't even exist in my CookedPCConsole folder (such as the aforementioned XComGame_EU_Patch4.upk). Linking to the .upk:s can't be done before UPKmodder has been configured, it seems; the instructions speak of colours, but all I get is grey, and the folder in the lower left can't be pressed. Either way, that's practically a non-issue until I know how to configure the config file. 2) You're an amazing person with some amazing experience with these things. What is straightforward to you is certainly not straightforward for others. I'm not even sure how to get started on doing that, based on the information I have (the .upk_mod-files). 3) I actually tried to work that out when reading the your earlier post, but either I'm not looking at the right files or I don't have them, or something else went wrong, because I quite quickly ran into strings I couldn't find when searching. Which, obviously, means that I can't really alter them. I'll take another swing at them and see what I can work out, although I doubt I'll get far. Link to comment Share on other sites More sharing options...
Amineri Posted June 22, 2014 Author Share Posted June 22, 2014 To set up UPKmodder to apply files to particular upks, do the following : 1) Launch UPKmodder2) Open upk_mod file by double clicking in project pane3) At lower left it will say "no UPK file selected"4) Click on the small folder icon next to that text5) Navigate to the upk file that this modfile should be applied to (could be in your CookedPCConsole, but also allows applying to a back-up copy of desired)6) Once selected, UPKmodder remembers the association between the file in the header (e.g. "UPKFILE=XComGame.upk") and will link all files with the same header entry to the same file until it is changed7) Because of (6), steps 4-5 only have to be done once for each different UPK being modified -- for this mod, XComGame.upk, XComStrategyGame.upk, and UICollection_Strategy_SF.upk are modded. Hopefully this helps Link to comment Share on other sites More sharing options...
ArunnyE Posted June 22, 2014 Share Posted June 22, 2014 (edited) To set up UPKmodder to apply files to particular upks, do the following : 1) Launch UPKmodder2) Open upk_mod file by double clicking in project pane3) At lower left it will say "no UPK file selected"4) Click on the small folder icon next to that text5) Navigate to the upk file that this modfile should be applied to (could be in your CookedPCConsole, but also allows applying to a back-up copy of desired)6) Once selected, UPKmodder remembers the association between the file in the header (e.g. "UPKFILE=XComGame.upk") and will link all files with the same header entry to the same file until it is changed7) Because of (6), steps 4-5 only have to be done once for each different UPK being modified -- for this mod, XComGame.upk, XComStrategyGame.upk, and UICollection_Strategy_SF.upk are modded. Hopefully this helps I think I can see where it went wrong before. I created projects that I put the .upk_mod-files in, and the "no UPK file selected" never showed up, nor could I press the folder. When completely disregard the whole "project" thing and just open up a .upk_mod-file straight away, it finally shows the "no UPK file selected" and the folder is pressable! Woo! This is counter to what it says on the page I got the UPKmodder from, though. I'll give it a swirl and see how far I get. Much love, cheers. I'll be back when things inevitably don't work out (they never do). :smile: Edit: Aaaaaaaaaaaaaaaah, I can load the project, and then open up the individual files inside of the UPKmodder, and then it shows up as it should. I had no difficulties configuring it, although the __S_UiSoldierPromotion_UpdateAbilityData.upk_mod shows up in red when testing it's status. I'll see if I can hit that with a wrench and see what happens... Edit 2: Is there a way to determine what the error was? Edited June 22, 2014 by SwedenRebel Link to comment Share on other sites More sharing options...
Recommended Posts