bcmpinc / StardewHack

A bunch of Stardew Valley mods that heavily rely on IL code modification.
GNU Lesser General Public License v3.0
20 stars 14 forks source link

Not compatible with 64-bit SMAPI #55

Closed justastranger closed 3 years ago

justastranger commented 3 years ago

All you need to do to fix this is to switch to Any CPU instead of x86 in the build Configuration Manager.

bcmpinc commented 3 years ago

That change has already been made, though it's a bit more involved than that. One of the patches does not apply cleanly. I'm also working on adding integration with generic mod config menu, so I have to finish that first before I can add 64-bit support.

bcmpinc commented 3 years ago

See https://smapi.io/log/9599bbbe7c4541bfaa10ef86932183a7

[13:21:54 TRACE Bigger Backpack] Applying patch GameLocation_performAction to Boolean performAction(System.String, StardewValley.Farmer, xTile.Dimensions.Location) in StardewValley.GameLocation.
[13:21:54 ERROR Bigger Backpack] Could not find instruction sequence (failed to match line 1: "callvirt Void createQuestionDialogue(System.String, StardewValley.Response[], System.String)"):
  ldstr "Backpack"
  call
  br
   at StardewHack.InstructionRange..ctor(List`1 insts, InstructionMatcher[] contains, Int32 start, Int32 step) in C:\source\_Stardew\Mods.bcmpinc\StardewHack\InstructionRange.cs:line 63
   at BiggerBackpack.Mod.GameLocation_performAction() in C:\source\_Stardew\Mods.bcmpinc\BiggerBackpack\Mod.cs:line 179
[13:21:55 TRACE Harvest With Scythe] Applying patch HoeDirt_performUseAction to Boolean performUseAction(Microsoft.Xna.Framework.Vector2, StardewValley.GameLocation) in StardewValley.TerrainFeatures.HoeDirt.
[13:21:55 ERROR Harvest With Scythe] Could not find instruction sequence (failed to match line 1: "callvirt StardewValley.Crop get_crop()"):
  ldarg.0
  call StardewValley.Crop get_crop()
  ldfld Netcode.NetInt harvestMethod
  call
  brtrue
   at StardewHack.InstructionRange..ctor(List`1 insts, InstructionMatcher[] contains, Int32 start, Int32 step) in C:\source\_Stardew\Mods.bcmpinc\StardewHack\InstructionRange.cs:line 63
   at StardewHack.HarvestWithScythe.ModEntry.HoeDirt_performUseAction_hand(LocalBuilder var_temp_harvestMethod) in C:\source\_Stardew\Mods.bcmpinc\HarvestWithScythe\ModEntry.cs:line 458
   at StardewHack.HarvestWithScythe.ModEntry.HoeDirt_performUseAction() in C:\source\_Stardew\Mods.bcmpinc\HarvestWithScythe\ModEntry.cs:line 495
[13:21:55 TRACE Harvest With Scythe] Applying patch HoeDirt_performToolAction to Boolean performToolAction(StardewValley.Tool, Int32, Microsoft.Xna.Framework.Vector2, StardewValley.GameLocation) in StardewValley.TerrainFeatures.HoeDirt.
[13:21:55 ERROR Harvest With Scythe] Could not find instruction sequence (failed to match line 1: "callvirt StardewValley.Crop get_crop()"):
  ldarg.0
  call StardewValley.Crop get_crop()
  ldfld Netcode.NetInt harvestMethod
  call
  ldc.i4.1
  bne.un
   at StardewHack.InstructionRange..ctor(List`1 insts, InstructionMatcher[] contains, Int32 start, Int32 step) in C:\source\_Stardew\Mods.bcmpinc\StardewHack\InstructionRange.cs:line 63
   at StardewHack.HarvestWithScythe.ModEntry.HoeDirt_performToolAction() in C:\source\_Stardew\Mods.bcmpinc\HarvestWithScythe\ModEntry.cs:line 432
justastranger commented 3 years ago

Good luck! Can't wait to be able to play 64-bit with all my favorite mods :)

If you're having difficulty whipping up the new instruction sequences to match against, ILSpy let's you decompile to bytecode.

bcmpinc commented 3 years ago

I've just finished uploading version 4.1 which has 64-bit support.