??????
You are not logged in.
Fixed in v9
Like the equivalent of a coupon code that is worth $5 in-game dollars that you can purchase for your friend?
I've thought about this...
I set the antes based on fraction-of-max-buy-in that is used in poker. You buy in with 100x the big blind, for example.
Raising the ante would have a similar effect to giving the players fewer chips (instead of making the ante 2, keep it at 1 and give each player 50 chips). The only difference would be the granularity of bets above the ante (for example, being able to raise a 2-chip ante up to 3 by putting in one chip). But in poker, that kind of granularity is thwarted by the minimum bet and raise rules. You can't raise by half the big blind, for example.
Seeing people go all-in all the time down at the penny tables is a symptom of a penny being worthless. Conservative play is the first step toward becoming more skilled. You don't have to worry about that all-in behavior so much if you move up to a $5 table. At a $100 table (which is more like the norm for poker), each chip is $1, and that ante stops looking so small.
But anyway, there are ways to play against an over-aggressive player who goes all-in all the time... very satisfying ways...
I think I'm going to table any further tribute adjustments for now.
The old system (10%, capped at 4) took about 2.5% of every buy-in. The new system seems to be taking 1.5%, which seems pretty good.
Oh, and not sure about the game stopping updating when you switch out of X.
I tried switching to a virtual terminal (ctrl-alt-F4 or whatever) and the game did not pause. So it's not detecting minimzation the way it does when you switch desktops.
I get exactly the same behavior with the game stopping while X is out, though. The Chime for a new game starting does come through until I bring X back.
I could imagine that OpenGL frames are simply not happening when the OpenGL context is gone, which causes the game loop to stop stepping.
Interestingly, if you swap away from X right as the chime sounds, it finishes sounding (it doesn't get cut off), so the audio thread is still running fine. However, the ante chips hang in the air and wait to fly until you bring X back. Thus, the process isn't freezing, just the game update loop.
This seems to be a known issue:
Just added this in v9.
Number keys to pick columns (first green, then red, then back to green). 0 key to swap columns (because sliders don't push each other out of the way when you're using the number keys---that would be confusing because of the modality of picking green then red then green).
Enter to commit columns or commit bet. x to fold bet.
Typing in your bet numerically doesn't work well when you're in a call-or-raise situation. The picker currently shows 17, for example, and can't go below that, but you type 1 8... what happens? Does it become 11 at first? That's out of range. The entire point of the picker is to avoid range bounds checking or notification on numerical user input.
SO... what I did instead was arrow keys to go up/down by 1 and Page Up/Down to go up/down by 10. This maps well to the way the picker looks and avoids and range bounds issues (picker does nothing if you hit up when you're at the top or down when you're at the bottom). You're at most 5 arrow key strokes away from any number, because to hit 9, you can page up one and then arrow down one.
These don't exactly match the picker's per-digit wrap around behavior. Instead, they are a true increment and decrement for the whole value as a number, which is what you want, I think.
Leave confirmation has been added in source. Will be released in v9.
And yeah, "Life and Death and Middle Pair" is one of the greatest talks in the history of the video game industry.
Frank is the one who got me thinking about Poker. He gave another talk the next year about how game theory saved the world from a nuclear holocaust.
More responses:
Yes, this game is 100% skill in that there are no random elements. It is not "subject to chance" according to legal interpretations.
You're right that very few people bet money on "hard skill" games like chess. You can rank players with such fine granularity that the pool of evenly matched players at a given level is very small. And only a fool would play for money (or play at all, really) against someone above their own skill level.
But this game is an experiment in what I'm calling "soft skill." What are you doing in CM to win? You're not searching the 500,000-leaf game tree (though doing that would help you). You're not crunching loads of math and probability (though doing that would help you). You're learning to read and predict the behavior of your opponent and learning to be unpredictable yourself.
So, whereas hard-skill games involve complex (in both senses) algorithms to play well, and thus require years of study to get good at, with an amateur absolutely standing no chance against a more skilled opponent.... games of soft skill are different.
People don't just come back to poker because they might get lucky next time. They come back because "reading their opponent" and "bluffing better next time" seem like reasonably attainable goals. The soft skill is based on intuition, and it feels more like an "art" than a "science."
But yes, Poker also has a strong random element. This game tries to build a system of soft skill, akin to the soft skill present in poker, from the ground up with no random element.
As far as I'm aware, there is no precedent here, so I really have no idea where the player ecosystem will end up in the long run.
Regarding your strategy of always giving the opponent the row with the lowest high number:
Let's say you do that consistently. You know your opponent will never get more than a 25 or whatever on turn one. You can box your opponent in that way, and over time, train them to always pick the row with that 25 (or whatever) in it. Over time, you can predict exactly what row they will pick for themselves.
But once you have them trained that way... would you really give them the 25 every time? There's certainly some lower number in the row that they picked. If you knew what they would pick, you'd probably switch at some point and stick them with a lower number.
A pure Nash equilibrium only happens when both players know what their opponent will pick and still don't want to switch. In your example, this only operates in one direction. Your opponent knows what column you will pick for them and still doesn't want to switch (they want to take the 25). BUT, it's not a Nash equilibrium because you, knowing that your opponent will do that, would want to switch columns.
Long, great thread. Some quick answers as I read through.
I don't want to give the player too many strategy crutches. The graph on the side is just doing the math for you, especially in the end game, where any skilled player would be taking out a calculator (because knowing when you have a score that is higher than any of your opponent's scores is important, for example).
I made the game in C++ because I want it to run on old, slow computers. It currently runs at 60FPS on my 14-year-old laptop (my main dev machine). Once a bunch of brush strokes are added to the board (by the end of the game), that slows down to 30FPS or something like that. In v9 (not released yet), my 14-y-o laptop is able to recompute the possible score graph in realtime as you drag, exploring 14,000 possibilities without a framerate stutter.
These kinds of things would barely be possible on a modern beast machine using a non-native language (and most people actually don't have beast machines). And forget about my 14-y-o laptop. I did play around with Flash a bit at the start, and found that I could barely draw 10 circles on the screen at a reasonable framerate.
Porting the game to iPhone (assuming that apple would approve it) would require changing one file, because C++ is an iPhone target language. And then it would be a real app, not running in a browser.
C++ code is far more portable than people might think. I had the game running on Raspberry Pi on my TV set yesterday---it just compiled and ran there.
As far as dev time... well, I have so much networking code and stuff written already from past games (this is C++ game 11 for me) that it's not very much work. I'm coding very little except the game logic itself. The protocol is all HTTP, and I already have very easy functions written to do that. Loading a sprite from TGA and then drawing it on the screen is two function calls. And I have a built-in game recorder (that I coded up three games ago), translation engine, settings engine, etc.
It also took time to hand-draw and scan the graphics and just generally get the whole thing done. There are more moving parts that you might think. On the server side, there was lots of API stuff to deal with for processing credit cards and sending checks out.
But yes, please do port or rewrite your own client for browsers and such!
You know, I'm actually not tracking any per-round stats.
I'm just tracking stats about whole games.
In the history of this server, there have been 361 games, and 83 where the house raked $0 total from the game. Of course, that counts abandoned games too.
With the old 10% cap-4 system, the server was taking an average of 2.5% of every buy-in. I'll be watching the totals over the next few days to see how the new system works. I'm hoping to keep the net effect at about 2.5%, but just make it feel different and more fair.
Over $260 have gone into games in the past few days, but I've made only $8 total.
Yes, I'm going to add something like this for sure.
It should probably chime if some other game stakes appear on that screen, right? So you can wait for an opponent in the background, and at least be "woken up" if some other stakes appear.
Yeah, I changed it out from under you. See a thread that I just posted about it! ![]()
Originally, the tribute was a flat 10% of the pot, rounded down to the nearest coin.
Then I added a 4-coin tribute cap (tribute never larger than four coins).
This still seemed pretty big, so I just made a further adjustment:
The tribute is now capped at only 1 coin (even if both players go all-in), but it is collected if 17% of the pot is over one coin (on pots containing 6 coins or more).
So, as long as the winner will profit MORE coins than the one-coin tribute, the tribute is taken.
(In a 6-coin pot, the winner is profiting 2 coins, with a 1 coin tribute---the winner gets 2x more profit than the house).
Chart:
Pot contains 2 coins, tribute 0
Pot contains 4 coins, tribute 0
Pot contains 6 coins, tribute 1
Pot contains 8 coins, tribute 1
...
Pot contains 200 coins, tribute 1
Also, don't forget that only matched bets count. Any unmatched bet (when the opponent folds) is returned before the tribute calculation is done.
So, this makes the tribute a more common sight (it's taken from pretty much every non-trivial pot), but also makes it much smaller. It's also consistent ("Oh, one coin was taken."), and it doesn't make you stop and think about the math (was that really X percent? That was a lot of tribute coins). And the "It's just one coin" feels better, I think.
Also, this lets us set the number of rounds at one table before the total rake starts getting too large. If too large counts as "more than 25% of the profit," then you can play at least 25 rounds at one table before we get to that point. That's a lot of rounds, I think.
Before, with a cap of 4, it all depended on how big the bets were.
And, finally, it preserves the "winner always profits more than the house" rule of thumb. Worst case, winner gets 2x what the house gets.
Does the board fade out and then come back in, like what would happen at the end of a round?
Sounds pretty strange! Please send me a recording if you can catch one:
jasonrohrer@fastmail.fm
Hmm... yeah, that shouldn't happen.
Can you send me the recordedGame file from when that happened?
jasonrohrer@fastmail.fm
Chimes happen:
--When waiting for the opponent, right before the game starts (a "game is starting" chime)
--When you've been waiting more than 10 seconds for your opponent's move, and the move finally comes through (unless that move has coin-movement sounds that will play---no chime needed then).
--When you have less than 10 seconds left to make your own move.
There used to be a "transfer money" option for withdrawing (where, for free, you could just pass money to another account). But I need to make sure that I'm not operating a "Money Service Business" (like PayPal) by accident. There are all sorts of regs that would suddenly apply.
I agree that it would be nice to be able to gift 50 cent accounts to friends. Hmm... Still, I can't get near the territory of sending "You've Got Money" emails. Granted, 50 cents can't be withdrawn on it's own. Maybe if it was limited to a certain amount or something.
The anonymity is partially to thwart money laundering (though it doesn't totally thwart intentional money passing, obviously), and also just to ensure that each new game is a fresh slate (you can't carry knowledge about a given opponent from past games, you can't intentionally pick on a weak player repeatedly, etc.) When you join a CM game, you could be playing against a first timer or against the best player in the world. There's no way to tell. Also, you all know how much I don't like xxxTheBosSxxx appearing in the aesthetic fabric of my games.
I'll look at fixing that Old Balance thing in v9.
Yeah, when you reload the game, it gets the balance first, which doesn't currently kick you from the old table. Then it loads the list of games, which DOES kick you. Of course, the balance is already loaded before that, so you see the old balance one time. After re-loading the list of games, the balance is fetched again. I should probably change it so that fetching the balance itself is one of the things that kicks you from the game.
About the crash:
I'm sorry that this happened. I LOVE that MacOS actually produces real crash reports. Sadly, this one doesn't actually show what happened, except that the game got into an infinite loop. I didn't know the OS would actually catch this and kill the process, but that's cool! The stack traces don't show what was actually stuck, for some reason.
If you're just dragging sliders around, the the game is doing nothing else, so maybe there's an infinite loop in the slider-repositioning code. There should be no network operations while you're doing that, for example. One thought: the audio thread could also be involved, because maybe your time is running out and the chime is trying to play when there are 10 seconds left.
Do you happen to have a recording that shows one of these crashes? Please email it to me:
jasonrohrer@fastmail.fm
Yeah, I have seen this myself, for sure.
I don't have a SHORT recording of a tie game. You know, like, where it happens in someone's first game.
I don't recall ever seeing one in my own personal testing, either.
There are actually two different types of non-updating behavior that can happen here. One is buggy, the other is intentional. From an email earlier today:
The right-side graph is actually pretty CPU-intensive to compute (searching a game tree with 500,000 leaves), so it doesn't actually compute in realtime as you drag. Instead, it waits until you drop the handles and they stop moving (otherwise, there would be a noticeable lag in the smooth dragging when the graph update happened).
HOWEVER, once a given graph configuration is computed, it is cached, and it will update in realtime as you drag past that position in the future. You can play with this a bit and see what I mean. If you haven't dragged them onto a given pair of positions yet, the graph won't update until you drop them. Then drag away and drop them somewhere else---graph again updates when you drop them. Now drag back to the first position---the graph will update while you're dragging, because the graph for that position has already been computed and cached.
So, you have to be careful when looking for this bug. It's only a bug if that particular graph has already been computed before OR if you actually drop the slider. Mid-drag, the graph should not update if you're dragging them into an as-of-yet-unseen configuration.
It doesn't happen all the time, but some of the time, dragging one slider to displace another causes the graph to not be updated properly. I'm looking into why this happens.
Yeah, when are you posting that Strategy 101 video on YouTube? ![]()
This has been reported by several people---thank you, everyone!
Tie games are totally broken on the client, with chips flying the wrong direction, and the game failing to go on to the next round or flat-out crashing.
I'm pretty sure the server is doing the right thing (splitting the coins evenly, no house tribute), BUT the client is messing up when it gets this game state back from the server.
SO... no one is losing money unfairly because of this.
Sadly, it's so rare that I didn't get to test it very much. Actually, it looks like I didn't test it at all.
On Monday, this will be top priority. I need to figure out how to reliably generate some tie games move lists, because trying to orchestrate them by hand is turning out to be impractical (too many conflicting constraints---which is why ties are so rare).