diff options
| -rw-r--r-- | AnodyneArchipelago/ArchipelagoManager.cs | 12 | ||||
| -rw-r--r-- | AnodyneArchipelago/Patches/GameplayPatches.cs | 96 |
2 files changed, 107 insertions, 1 deletions
| diff --git a/AnodyneArchipelago/ArchipelagoManager.cs b/AnodyneArchipelago/ArchipelagoManager.cs index 7c67114..4570c39 100644 --- a/AnodyneArchipelago/ArchipelagoManager.cs +++ b/AnodyneArchipelago/ArchipelagoManager.cs | |||
| @@ -107,6 +107,8 @@ namespace AnodyneArchipelago | |||
| 107 | NetworkItem item = _session.Items.AllItemsReceived[i]; | 107 | NetworkItem item = _session.Items.AllItemsReceived[i]; |
| 108 | _itemsToCollect.Enqueue(item); | 108 | _itemsToCollect.Enqueue(item); |
| 109 | } | 109 | } |
| 110 | |||
| 111 | _itemIndex = _session.Items.AllItemsReceived.Count; | ||
| 110 | } | 112 | } |
| 111 | 113 | ||
| 112 | if (_itemsToCollect.Count > 0 && (GlobalState.Dialogue == null || GlobalState.Dialogue == "") && !GlobalState.ScreenTransition && Plugin.Player != null && GlobalState.black_overlay.alpha == 0f) | 114 | if (_itemsToCollect.Count > 0 && (GlobalState.Dialogue == null || GlobalState.Dialogue == "") && !GlobalState.ScreenTransition && Plugin.Player != null && GlobalState.black_overlay.alpha == 0f) |
| @@ -132,7 +134,7 @@ namespace AnodyneArchipelago | |||
| 132 | 134 | ||
| 133 | private void HandleItem(NetworkItem item) | 135 | private void HandleItem(NetworkItem item) |
| 134 | { | 136 | { |
| 135 | if (item.Player == _session.ConnectionInfo.Slot) | 137 | if (item.Player == _session.ConnectionInfo.Slot && item.Location >= 0) |
| 136 | { | 138 | { |
| 137 | string itemKey = $"ArchipelagoLocation-{item.Location}"; | 139 | string itemKey = $"ArchipelagoLocation-{item.Location}"; |
| 138 | if (GlobalState.events.GetEvent(itemKey) > 0) | 140 | if (GlobalState.events.GetEvent(itemKey) > 0) |
| @@ -213,6 +215,14 @@ namespace AnodyneArchipelago | |||
| 213 | cardTreasure.GetTreasure(); | 215 | cardTreasure.GetTreasure(); |
| 214 | GlobalState.SpawnEntity(cardTreasure); | 216 | GlobalState.SpawnEntity(cardTreasure); |
| 215 | } | 217 | } |
| 218 | else if (itemName == "Cardboard Box") | ||
| 219 | { | ||
| 220 | GlobalState.events.SetEvent("ReceivedCardboardBox", 1); | ||
| 221 | } | ||
| 222 | else if (itemName == "Biking Shoes") | ||
| 223 | { | ||
| 224 | GlobalState.events.SetEvent("ReceivedBikingShoes", 1); | ||
| 225 | } | ||
| 216 | 226 | ||
| 217 | string message; | 227 | string message; |
| 218 | if (item.Player == _session.ConnectionInfo.Slot) | 228 | if (item.Player == _session.ConnectionInfo.Slot) |
| diff --git a/AnodyneArchipelago/Patches/GameplayPatches.cs b/AnodyneArchipelago/Patches/GameplayPatches.cs index 9db87a5..ba33457 100644 --- a/AnodyneArchipelago/Patches/GameplayPatches.cs +++ b/AnodyneArchipelago/Patches/GameplayPatches.cs | |||
| @@ -10,6 +10,11 @@ using System; | |||
| 10 | using System.Collections.Generic; | 10 | using System.Collections.Generic; |
| 11 | using System.Reflection; | 11 | using System.Reflection; |
| 12 | using Microsoft.Xna.Framework; | 12 | using Microsoft.Xna.Framework; |
| 13 | using AnodyneSharp.Entities.Interactive.Npc.RunningTradeNPCs; | ||
| 14 | using AnodyneSharp.Dialogue; | ||
| 15 | using AnodyneSharp.Sounds; | ||
| 16 | using AnodyneSharp.States; | ||
| 17 | using AnodyneSharp.Entities.Interactive.Npc; | ||
| 13 | 18 | ||
| 14 | namespace AnodyneArchipelago.Patches | 19 | namespace AnodyneArchipelago.Patches |
| 15 | { | 20 | { |
| @@ -225,4 +230,95 @@ namespace AnodyneArchipelago.Patches | |||
| 225 | } | 230 | } |
| 226 | } | 231 | } |
| 227 | } | 232 | } |
| 233 | |||
| 234 | [HarmonyPatch(typeof(Box), nameof(Box.PlayerInteraction))] | ||
| 235 | class BoxOpenPatch | ||
| 236 | { | ||
| 237 | static bool Prefix(Box __instance, ref bool __result) | ||
| 238 | { | ||
| 239 | if (!GlobalState.events.SpookedMonster) | ||
| 240 | { | ||
| 241 | __result = false; | ||
| 242 | return false; | ||
| 243 | } | ||
| 244 | |||
| 245 | __instance.Play("open"); | ||
| 246 | SoundManager.PlaySoundEffect("broom_hit"); | ||
| 247 | GlobalState.StartCutscene = OnOpened(__instance); | ||
| 248 | __result = true; | ||
| 249 | return false; | ||
| 250 | } | ||
| 251 | |||
| 252 | static IEnumerator<CutsceneState.CutsceneEvent> OnOpened(Box box) | ||
| 253 | { | ||
| 254 | MethodInfo openedMethod = typeof(Box).GetMethod("OnOpened", BindingFlags.NonPublic | BindingFlags.Instance); | ||
| 255 | IEnumerator<CutsceneState.CutsceneEvent> subCutscene = (IEnumerator<CutsceneState.CutsceneEvent>)openedMethod.Invoke(box, new object[] { }); | ||
| 256 | |||
| 257 | yield return subCutscene.Current; | ||
| 258 | while (subCutscene.MoveNext()) | ||
| 259 | { | ||
| 260 | yield return subCutscene.Current; | ||
| 261 | } | ||
| 262 | |||
| 263 | GlobalState.inventory.tradeState = InventoryManager.TradeState.NONE; | ||
| 264 | |||
| 265 | Plugin.ArchipelagoManager.SendLocation("Fields - Cardboard Box"); | ||
| 266 | } | ||
| 267 | } | ||
| 268 | |||
| 269 | [HarmonyPatch(typeof(ShopKeep), nameof(ShopKeep.PlayerInteraction))] | ||
| 270 | class ShopKeepTalkPatch | ||
| 271 | { | ||
| 272 | static bool Prefix(ShopKeep __instance) | ||
| 273 | { | ||
| 274 | if (GlobalState.events.GetEvent("ReceivedCardboardBox") == 1 && GlobalState.events.GetEvent("UsedCardboardBox") == 0) | ||
| 275 | { | ||
| 276 | GlobalState.Dialogue = GetDiag(2) + " " + GetDiag(4); | ||
| 277 | GlobalState.events.SetEvent("UsedCardboardBox", 1); | ||
| 278 | |||
| 279 | EntityPreset preset = PatchHelper.GetEntityPreset(typeof(ShopKeep), __instance); | ||
| 280 | preset.Activated = true; | ||
| 281 | |||
| 282 | Plugin.ArchipelagoManager.SendLocation("Fields - Shopkeeper Trade"); | ||
| 283 | |||
| 284 | return false; | ||
| 285 | } | ||
| 286 | |||
| 287 | return true; | ||
| 288 | } | ||
| 289 | |||
| 290 | static string GetDiag(int i) => DialogueManager.GetDialogue("misc", "any", "tradenpc", i); | ||
| 291 | } | ||
| 292 | |||
| 293 | [HarmonyPatch(typeof(MitraFields), "GetInteractionText")] | ||
| 294 | class MitraFieldsTextPatch | ||
| 295 | { | ||
| 296 | static bool Prefix(ref string __result) | ||
| 297 | { | ||
| 298 | if (GlobalState.events.GetEvent("ReceivedBikingShoes") == 1 && GlobalState.events.GetEvent("UsedBikingShoes") == 0) | ||
| 299 | { | ||
| 300 | __result = DialogueManager.GetDialogue("misc", "any", "mitra", 1); | ||
| 301 | |||
| 302 | GlobalState.events.SetEvent("UsedBikingShoes", 1); | ||
| 303 | |||
| 304 | Plugin.ArchipelagoManager.SendLocation("Fields - Mitra Trade"); | ||
| 305 | |||
| 306 | return false; | ||
| 307 | } | ||
| 308 | |||
| 309 | return true; | ||
| 310 | } | ||
| 311 | } | ||
| 312 | |||
| 313 | [HarmonyPatch("AnodyneSharp.Entities.Interactive.Npc.Windmill.Console", "PlayerInteraction")] | ||
| 314 | class WindmillInteractPatch | ||
| 315 | { | ||
| 316 | static void Prefix(object __instance) | ||
| 317 | { | ||
| 318 | if ((__instance as Entity).CurAnimName == "active") | ||
| 319 | { | ||
| 320 | Plugin.ArchipelagoManager.SendLocation("Windmill - Activation"); | ||
| 321 | } | ||
| 322 | } | ||
| 323 | } | ||
| 228 | } | 324 | } |
