I have a friend I made playing online games. We started projects together to code our own games. These projects brought us nothing but strong arguments and overall bad quality time together. None of these projects were successful, and over the time I understood the reasons why.
None of us had authority over gameplay elements. We didn't know what was a good or bad game, and were only driving things by our own taste, and we had very different tastes.
We were not aiming at the same degree of success either. He was much more ambitious than I was. I wanted to code a game mostly for myself to enjoy. He wanted to earn money off of it.
Last, we had personal matters to solve making our collaboration difficult.
While it seems easy to predict failure retrospectively, in the heat of action it's very easy to overestimate your own capacity to overcome obstacles. In the end, I kept the friend but made it clear he couldn't count on me to help him develop games. We worked past that.
How does that can help you with Jim? Well, I have some advice inspired by my failure.
You are both on a project that you do out of passion, you have different goals for the game and no clear responsibilities for several areas of decisions such as gameplay. Jim, by interfering, might just be willing to help, or more likely is trying to contribute to the project at all.
Question yourself here, would Jim want to have an important role in that project, would you trust him, would you value that he gets it even if it may make the project fail, or if you would prefer he stays away even if that means denying him something that could be important to him?
If you can't trust Jim in a real role I'd try to negotiate taking things over by yourself. It would be a bit hypocritic and unproductive to leave someone in a project with no real leverage to act. This risks Jim being quite disapointed obviously but a relief in the long term.
If you decide to keep up together, I'd try to make sure Jim and you align on the goal of the game. If any of you two would favor making a game you individually like over making a game that is successful, you have a problem, because you won't agree on the rationale behind the decisions taken.
Would that step be clear, I'd divide the roles by proficiency like you would do in a company. Maybe Jim can take other responsibilities than the one you have, that would make the project succesful and that would allow him to be part of the crew. You should have your roles, and be able to discuss things solely on the agreed purpose, as to reduce overall friction. And in any crew, a captain there should be, clearing decisions that can't be taken otherwise.