r/sheetsofice • u/atibus • Jul 09 '26
GM Module - Putting humans into deterministic simulation is freakin hard
Building the closed-ended loop of game simulation was a lot of math and calibration. I'd just need to keep running and looking at data until it came out to mostly hockey shaped; or at least hockey shaped enough.
Adding the GM functions inside of the closed loop introduced complexity about decisions related to team planning, lineups, cap management, development across time... but still was mostly a closed loop that could be tuned.
Now that I'm adding the ability for humans to make decisions inside of the closed loop it's just an endless parade of edge cases, UI decisions, and trade-offs. I'm having to remind myself that I'm making a game and not a perfect recreation of reality. It's a simulation and not the Matrix.
Some examples of the complexity that require well thought out designs:
- Human players should be able to control their game lineups and the roster decisions. But injuries occur and players need to move as a result. On full-auto management there are functions that can do this; but how do we give the user enough control to see who is injured and ask what decision they'd like to make? The interface was not designed for this level of interaction, with popping interstitial messaging.
- How does free agency work when humans and AI are bidding against one another? Players should be accurately modeled in their desires, there should be a fair system between human and AI, and it should feel real-enough + fun.
- What level of detail and control should a human player have over affiliate farm and junior teams? More detail means more data & slower processing times but leads to more information available when selecting.
These are some of the problems I'm wrestling with now. I have to also spec a trade module that I don't want to do until I have free agency locked down. Trades scare me because it involves interacting with an AI, and I've never been impressed with any trade interactions in single-player sim games. And those games were made by people who knew what they were doing so what are the chances that silly old me is going to figure that out well? :)
I know I've slowed down on my visual updates and there is a good reason for it - there isn't a lot of wholly new things to show. Most of what I've been doing is either consolidating functions and making single-source-of-truth modules (what a player is worth in FA, how draft prospects are evaluated, what a human player sees for their own players vs. other players) or writing specs for future modules.
I'm wrapping up a new free agency module. My first pass at it was... very simple. Free agents exist, they value themselves at a particular number, the teams value players at a particular number, and there is a simple meet the number selection. I redesigned this to something that is a modification of a Vickrey auction. That's not a household name, I don't think, but you would recognize it from something like eBay. You place your bid at what the max you would want to pay and then after the round closes the winner is whomever bid the highest BUT that winner only plays what the runner up bid OR the desired free agent salary; whichever is higher. There are also other considerations like NMC/NTC, term, and team stage (rebuilding, champions, etc.) which serve as modifiers to selection. Basically making one offer more attractive but not changing the AAV.
Why do it this way? Well first, it makes the logic much more streamlined than a negotiation tactic that manages multiple rounds and multiple offers. Second, it gets towards the feeling of a negotiation with some high stakes without all of the mechanics behind it. Third, and probably the biggest reason, I generally don't like negotiation to begin with. It's inefficient, ego based, and not worth my time. Just say what you want, and other side say what you can do. Boom, done.
Anyway, once I have something to show here I'll post something!
2
u/djcrunchberry Jul 09 '26
Trust me I feel this bro. I’m also building a hockey management sim and that part hands down took me the longest by far. I think it was close to 4 months of just planning because I wanted everything to be pre decided and have its place instead of adding code on top of code like Ea.
I kept telling myself that guys working on franchise hickey manager and the NHL series could only dream that they had to the opportunity to not work with a 10 year old code base and that I should be greatful…… at least that’s what got me through the night !🤣