MochiMedia is now offering free translation to Chinese
So… this could really be worth looking into, if you have a game comming out soon.
Nothing else to add really. Just thought it was worth pointng at.
So… this could really be worth looking into, if you have a game comming out soon.
Nothing else to add really. Just thought it was worth pointng at.
So, I’m still hard at work on Puzzle Runners. Remember when I said that I had written the single player version in a way that lent itself easily to being converted over to multiplayer?
Yeah, I’m not as smart as I thought.
It took 17.5 hours spread over many days to get the setup and sync working.* Or at least working well enough that I could move onto the ingame message handling, I still need to go back to the setup code and handle some loose ends.
So… the whole game is setup using a “bounce” server which just bounces all the messages it receives to all the connected clients. The first client to connect becomes the ‘Master’ which is responsible for setting up the game and owns the AIs. And now I’ve got an error state where if only the Master is connected, the AIs behave correctly, but if there are two or more clients the AIs just stand in place.
This is my code which dispatches messages to the server:
Here’s the crazy part… that “trace” statement marked with the red arrow? All it does is print the message being sent to the server to the debugging console (or copies it to a log file). I added it because I wanted to make sure the AI messages were being sent (they were). If the trace statement is present, the AIs move correctly. If the trace statement is commented out**, the AIs don’t move. Human players however, move correctly regardless of the presence of the trace, so I know the dispatch function is working.
Ultimately of course, the lack of a trace can not be the reason why the AIs are turning themselves off… I’m guessing the trace is affecting the timing in which the messages are being received and that’s causing something I didn’t intend (I designed the message handler to work regardless of the order in which messages are received, and independently of the refresh timer… but I’ve made bigger mistakes before!
).
Anybody reading this got a good story of a bug where the symptom and the root cause didn’t appear connected?
-TF
* – That’s not a complaint… I haven’t worked with multiplayer games before, so I’m turning up issues I’ve never considered before. (ie: How should the game react when a client disconnects before setup is complete? What should happen if a player attempts to join a table that’s already full? etc) So to the extent that I am a programmer, this is interesting stuff… it just taking longer than I had budgeted.
**- For the non-programmers, commenting out a statement makes the computer ignore it when it’s executing the program. The words following // are comments.
Last Thursday, PlayerIO added a persistent data solution to the PlayerIO white-label multiplayer services.
With BigDB you’re getting a complete database that is especially built for the usage scenarios of games, and that will handle any load you can throw at it. You don’t have to buy, host, or manage your own database server, since BigDB is part of the Player.IO cloud services.
This is a really big thing.*
Puzzle Runners, my in-progress project, is built using PIO as it’s back-end but didn’t need persistent data. (At some point I need to write a ‘How to use PlayerIO services in a game developed with FlashDevelop and the FlexSDK’ tutorial because all the examples assume working under the FlashIDE… expect that sometime after I release Puzzle Runners) My experience with their API has been almost wholly positive, and the all their services are still free while they’re in Beta. If you’ve been contemplating a multiplayer flash game, but discarded PIO because you would have had to run a separate DB server, you should probably take another look.
*- Within the context of flash game development.
Here’s why…
Below is a screenshot of my developer’s dashboard, showing the number of ad impressions in a group of random weeks. (Most players are not playing on Nightflyergames.com, or even aware that it exists and that’s fine with me.)
Below is this week (I had to do a cut and paste to make the screenshot fit in my blog layout… The black line is to make the location of the break obvious, and the other splotch of black is to obfuscate a line which lists todays earnings.) Notice how my normal baseline gets compressed to a near horizontal line near the x-axis:
The vast majority of those impressions are coming from DayTrader, which I released 2 years ago. I’ve done no promotion for that game since. Even though most of the players seem to be in developing countries, and my eCPM is around US$0.05 for that traffic, DayTrader is paying the cost of this server today. (And since the rightmost dot will keep slowly creeping up for the next several hours, quite possibly tomorrow).
So that’s why the ads are there. I still think it would be madness to write a business plan that solely was dependent on in-game ads for revenue– one minor contract or small sponsorship will cover the costs of my hobby into next year and beyond. But they let me capture random spikes like this with no cost to the player, so they’ll stay in. Even though they can be a bit annoying.
EDIT 5/23/10:
So Daytrader ended yesterday with 16k impressions/plays, and looks like it’s going to do about the same today. I also figured out what was occurring:
The traffic is mostly playing at a site “whatzfun.com”.* I knew that from the start of the spike, but I couldn’t figure out -why- the game was getting played there. As it turns out, Daytrader is sitting on it’s front page at the moment. Whatzfun is a minor arcade, with 26 games. What’s interesting is what games it’s providing– they’re all either stock market/trading games or hospital games. The site is using 2 Google Ad-sense ads, a Wild Tangent skyscraper ad, and a footer which is some type of referral program with a site called “ztage.com”. I’m not familiar with zstage, Wild Tangent and Google are contextual ad providers. With Google it’s possible to look up** what it would cost to advertise in those spots by checking what it would cost to advertise for keywords such as ‘Stock Market’, ‘Daytrader’, or ‘Broker’.
| Keyword | CPC |
|---|---|
| Broker | $4.83-$6.48 |
| Daytrader | $1.98-$2.47 |
| Stock Market | $3.64-$5.20 |
| Stocks | $3.44-$5.16 |
| Trading System | $3.36-$4.25 |
| game | $0.44-$0.65 |
| flash game | $0.41-$0.61 |
Data acquired from Google AdWords Traffic Estimator at 2:23 pm AKDT on May 23, 2010. CPC is an abbreviation for ‘Cost-Per-Click’ and is what the advertiser is paying Google for each click the ad generates. (Google then pays the website running the ad some percentage of that).
One of the mysteries of the web is that if you get enough people to look at something, eventually someone will click it. Assuming the webmaster for “whatzfun.com” has a way to get traffic to his site cheaper than what he’s making from the contextual ads, he’ll turn a profit. To give himself the best chance of doing so he’s targeting high CPC keywords. Best of luck to him, he’s welcome to use my game in his plan… I was baffled and concerned because there was no reason for -this game- to develop a following at this time. I’m much happier knowing that it didn’t, and the reason for the sudden increase in plays.
*- I feel under no obligation to provide a link. You’re smart enough to enter the address in your browser if you’re curious.
**- The link has a session id variable in it, so it may not persist. Do a search for ‘Google Adwords Estimator’ and you’ll find the tool if the link breaks. Obviously, be smart and use the search result that points at an https from adwords.google.com…
EDIT 5/25:
26,000 plays yesterday. Up from a long term average of about 100 per day. Put another way, my DAU (daily active users) has increased by a factor of 260 times over the past 4 days. I’m choosing to assume that will continue, and I’ll have 6.2 million DAU by Friday, and 1.7 BILLION users by next Tues. NightflyerGames will acquire both Activision and Electronic Arts the week after. LOL
(Puzzle Runners is the the title of the game I mentioned in this post. I’m pretty bad at staying cryptic.
)
So, a few minutes ago I had my black triangle moment for this project!! The single player game works, but I knew that wasn’t going to be a problem. I’ve never done any type of multiplayer before and I’m using PlayerIO‘s white label multiplayer servers. I wasn’t sure I could pull that off, because PlayerIO assumes that you’re developing your client with Flash… but I don’t actually use the Flash authoring tool, I write my code in FlashDevelop and compile with the FlexSDK.
Anyway, despite (actually, in part because I’m) using a bounce server, Puzzle Runners needs a (for my skill level) fairly complex message handling system. I’ve spent the past 5 days trying to get it to come together. And now it has:
What you’re seeing is a screenshot of FD’s output window, which is where traces are displayed. (In AS3 traces are basically console print statements to aid in debugging). In the screenshot, the client has received a message asking for an index needed for part of the setup (type A1), and then generated and sent a message containing that index (type A2). And the A1 message was originally generated by a second client, and bounced off the remote server. So my message handler works! PlayerIO works happily with the FlexSDK! There are no major (technical) hurdles left to building the game!
-TF
The results from LD17 are now released, and available here. There were 204 entries.
If you want to know how my entry did, click read more.
Read more »
So, LD17 is over, but I am working on another project. I actually started work on April 7th, thinking I’d have it done in time to release before LD, planning to use it as a warm-up for the contest since I hadn’t programmed anything in a while.
Yeah, right.
But it’s been turning into a decent little game. Here’s a screenshot over on the right. (My drawing ability has not magically improved, the sprites are from here, a Japanese team called REFMAP with a license friendly to commercial games.) If you look closely, there’s enough information in that screen shot to tell what the game is about. Otherwise you’ll have to wait a few weeks for the public beta.
You’ll notice that one of the characters is named, ‘Guest’. Although I’m implementing at least two player authentication systems, if you don’t have an account with one of them, and don’t want to sign up for one, you’ll still be able to play. Unlike one recently released indie game. Whose development I’ve been following. And which I wanted to try
At the moment, the other characters are actually AI’s. To get the names I found a list of popular names for babies, published by the Social Security Administration. I wouldn’t have remembered that, but this time I’m keeping a log of my work, in addition to my (paper) design notebook.
The single player mode is -done-. There’s still a lot of UI work, and getting the multiplayer mode running. (Fortunately, I wrote the single player mode in such a way that this should be easy. Well, easy-ish anyways…)
-TF
(Being cryptic about upcoming games is apparently the in thing these days.)
The theme for LD17 was ‘Islands’. I did a small game about a group of islands having a problem with an invasive species.
Here’s a screenshot:
My journal for this project is here. You can play the game, see the in-progress builds, and get my source code here. My entry isn’t all that much to look at, but the blitting engine seems to be running well on my machine, and I did some different things (compared to my usual methods) for collision detection. I’ll write a more detailed AAR over on the LD site in a few days. My AAR is here. I’ll write another post when the results are out (judging is still in progress).
-TF
Ludum Dare 17 is going to be next weekend (23-25 April). I’ll be participating in this one. (I missed LD 16 due to work, so this time I requested vacation time
) Theme voting should open next week.
If you’re in Canada, To-Jam 5 is running the same weekend.
And to get you fired up about whichever event you’re going to participate in or watch, here’s Sid Meier at a 48-hr competition held at U. Michigan (some neat anecdotes about the early game industry as well):
(via the Escapist, originally from Dell (I think))
As an aside, what’s the right word to describe these events? LD is structured as a competition and has judging, but ‘winning’ or ‘beating the competition’ isn’t really the point. From what I gather, the various global game jams are the same way.
Just in case you’re living under a rock, Bay12 released the first new version of Dwarf Fortress in 2 years on April 1st. Specifically, version 0.31.01 … otherwise known as the much rumored DF2010, which makes a number of changes to … lots of things. Check the wiki for mirrors and the bare-bones documentation.
I’d say my productivity for the next month is shot… but who would I kidding? I haven’t been productive in years.