Manual Mode: /banishfd 10 and /movefd 10 d b result in an unrepairable game state

  1. Bug description
    Using /movefd or /banishfd to move cards from deck to banish zone completely breaks a best of 3 duel. The behavior of the FD banish zone after using one of those commands can only be described as “catastrophically broken”.
  • The duel is unable to be reset because 1 card will always be remaining in the FD zone
  • If you have multiple cards in the FD banish zone, returning 1 by 1 to the deck is sometimes successful up until the last card, but only if returning to the bottom of the deck FD, and sometimes the card returned is not the one that was selected to be moved.
  • The last card in the FD zone is immovable. Attempting to move the card provides no error to the user.
  • Logs indicate catastrophic failure.
  1. Bug reproduction steps
  1. Host a game in manual mode and start it with someone (AI is fine)
  2. use either /movefd 10 or /banishfd 10 until you have multiple cards (I did 4) in the banish zone (each attempt will only banish 1 due to a possibly related bug).
  3. Your game is now in a broken state and you can observe the following behaviors of the following actions:

Broken Behavior 1:

  • In the banish zone, click move on card[3] and face down orientation
  • select deck as destination
  • Select “Bottom” and observe a card being sent to deck
    – Open your banish zone and observe that the card previously at card[3] is now card[2] and card[1] is actually the one that was put back.

Broken Behavior 2:

  • In the banish zone, click move on card[2] and face down orientation
  • select deck as destination
  • Select “Top”
    – Observe that nothing happens. No card is sent to deck, and banish zone is still 3 cards.

Broken Behavior 3:

  • Attempt to reset the game state by clicking “Reset”
    – Observe that all but 1 card are put back into the deck, the deck is shuffled, 5 cards are drawn. That last card is immovable regardless of what the player tries to do.
  1. Screenshot OR error code
    Here is a video of the above steps and outcomes:
    Banish bug - Album on Imgur
Logs indicating null references and general internal explosions

Loading player data from D:/games/YGO Omega_Data/data.unity3d
Initialize engine version: 2021.3.3f1 (af2e63e8f9bd)
[Subsystems] Discovering subsystems at path D:/games/YGO Omega_Data/UnitySubsystems
GfxDevice: creating device client; threaded=1; jobified=1
Direct3D:
Version: Direct3D 11.0 [level 11.1]
Renderer: NVIDIA GeForce GTX 1080 Ti (ID=0x1b06)
Vendor: NVIDIA
VRAM: 11128 MB
Driver: 30.0.14.7111
Initializing input.

New input system (experimental) initialized
Initialized touch support.

UnloadTime: 0.307600 ms
Unloading 5 Unused Serialized files (Serialized files now loaded: 84)
Unloading 2 unused Assets to reduce memory usage. Loaded Objects now: 8021.
Total: 11.310500 ms (FindLiveObjects: 0.344700 ms CreateObjectMapping: 0.353000 ms MarkObjects: 10.600300 ms DeleteObjects: 0.012200 ms)

NullReferenceException: Object reference not set to an instance of an object.
at Game.DuelManager.OnMove (System.IO.BinaryReader packet) [0x00000] in <00000000000000000000000000000000>:0
at System.Runtime.CompilerServices.AsyncTaskMethodBuilder.Start[TStateMachine] (TStateMachine& stateMachine) [0x00000] in <00000000000000000000000000000000>:0
at Game.DuelManager.OnMove (System.IO.BinaryReader packet) [0x00000] in <00000000000000000000000000000000>:0
at Game.DuelManager.OnPacket (Enumerator.GameMessage msg, System.IO.BinaryReader packet) [0x00000] in <00000000000000000000000000000000>:0
at System.Runtime.CompilerServices.AsyncTaskMethodBuilder.Start[TStateMachine] (TStateMachine& stateMachine) [0x00000] in <00000000000000000000000000000000>:0
at Game.DuelManager.OnPacket (Enumerator.GameMessage msg, System.IO.BinaryReader packet) [0x00000] in <00000000000000000000000000000000>:0
at Scenes.Battle.DuelZone.DoParse () [0x00000] in <00000000000000000000000000000000>:0
at System.Runtime.CompilerServices.AsyncTaskMethodBuilder`1[TResult].Start[TStateMachine] (TStateMachine& stateMachine) [0x00000] in <00000000000000000000000000000000>:0
at Scenes.Battle.DuelZone.DoParse () [0x00000] in <00000000000000000000000000000000>:0
at Scenes.Battle.DuelZone.FixedUpdate () [0x00000] in <00000000000000000000000000000000>:0
at System.Runtime.CompilerServices.AsyncVoidMethodBuilder.Start[TStateMachine] (TStateMachine& stateMachine) [0x00000] in <00000000000000000000000000000000>:0
at Scenes.Battle.DuelZone.FixedUpdate () [0x00000] in <00000000000000000000000000000000>:0
— End of stack trace from previous location where exception was thrown —

at Game.DuelManager.OnPacket (Enumerator.GameMessage msg, System.IO.BinaryReader packet) [0x00000] in <00000000000000000000000000000000>:0
at System.Runtime.CompilerServices.AsyncTaskMethodBuilder.Start[TStateMachine] (TStateMachine& stateMachine) [0x00000] in <00000000000000000000000000000000>:0
at Game.DuelManager.OnPacket (Enumerator.GameMessage msg, System.IO.BinaryReader packet) [0x00000] in <00000000000000000000000000000000>:0
at Scenes.Battle.DuelZone.DoParse () [0x00000] in <00000000000000000000000000000000>:0
at System.Runtime.CompilerServices.AsyncTaskMethodBuilder`1[TResult].Start[TStateMachine] (TStateMachine& stateMachine) [0x00000] in <00000000000000000000000000000000>:0
at Scenes.Battle.DuelZone.DoParse () [0x00000] in <00000000000000000000000000000000>:0
at Scenes.Battle.DuelZone.FixedUpdate () [0x00000] in <00000000000000000000000000000000>:0
at System.Runtime.CompilerServices.AsyncVoidMethodBuilder.Start[TStateMachine] (TStateMachine& stateMachine) [0x00000] in <00000000000000000000000000000000>:0
at Scenes.Battle.DuelZone.FixedUpdate () [0x00000] in <00000000000000000000000000000000>:0
— End of stack trace from previous location where exception was thrown —

at Scenes.Battle.DuelZone.DoParse () [0x00000] in <00000000000000000000000000000000>:0
at System.Runtime.CompilerServices.AsyncTaskMethodBuilder`1[TResult].Start[TStateMachine] (TStateMachine& stateMachine) [0x00000] in <00000000000000000000000000000000>:0
at Scenes.Battle.DuelZone.DoParse () [0x00000] in <00000000000000000000000000000000>:0
at Scenes.Battle.DuelZone.FixedUpdate () [0x00000] in <00000000000000000000000000000000>:0
at System.Runtime.CompilerServices.AsyncVoidMethodBuilder.Start[TStateMachine] (TStateMachine& stateMachine) [0x00000] in <00000000000000000000000000000000>:0
at Scenes.Battle.DuelZone.FixedUpdate () [0x00000] in <00000000000000000000000000000000>:0
— End of stack trace from previous location where exception was thrown —

at Scenes.Battle.DuelZone.FixedUpdate () [0x00000] in <00000000000000000000000000000000>:0
at System.Runtime.CompilerServices.AsyncVoidMethodBuilder.Start[TStateMachine] (TStateMachine& stateMachine) [0x00000] in <00000000000000000000000000000000>:0
at Scenes.Battle.DuelZone.FixedUpdate () [0x00000] in <00000000000000000000000000000000>:0
UnityEngine.Logger:LogException(Exception, Object)
UnityEngine.Debug:LogException(Exception)
Scenes.Battle.d__171:MoveNext()
System.Runtime.CompilerServices.AsyncVoidMethodBuilder:Start(TStateMachine&)
Scenes.Battle.DuelZone:FixedUpdate()

  1. Expected behavior
    It should not be possible to get the game into this broken state.

  2. What OS are you using
    Windows 10