Discuss the massively-multiplayer home defense game.
You are not logged in.
I definitely don't want any lifetime or cross-lifetime stats in the game. When you die, it should have a real "poof it's gone" feeling. You should have nothing but your memories of that life (in real life, you wouldn't even have that, perhaps).
As far as having to count tapes... hmm...
Paintings are DONE and packaged at the printer.
They've sent one to me, which should arrive today, for me to open and inspect.
The gun shop gift certificates arrived a few days ago.
After I see that the paintings are good to go, I will get people's addresses and have everything sent out.
And this is to keep someone from "camping" in a house until the chill wears off to protect it from other players (like for dual account collaboration).
Yeah, I purposely kept all direct communication out of the game for some pretty obvious reasons.
It's not that I mind direct, "obscene" harassment so much, or that I want to protect "innocent" people from abuse, but that I feel like it would detract from the atmosphere and mystery of the game. That's part of the reason why there are period-specific names assigned in the game instead of xxxOOO_*_*_L337_HANDLEZ_*_*_OOOxxx.
Did any of you ever play Journey? Pretty amazing in terms of a very consistent and smooth multiplayer integration (so much so that it was hard to tell you were playing with another human---many people didn't even realize it).... BUT, they spoiled at the end when they gave you a list of PSN handles that you played with. At least they had sense enough to keep those out of the game itself.
Oh, this is kind of amazing:
GET /gameServer/server.php
This IS actually a valid HTTP request, by itself, because it matches the ancient HTTP 0.9 spec from 1991. The server responds with no headers and just sends the requested document (or does the requested PHP action).
Apache ships supporting this 1991 compatibility mode.
Sadly, this also prevents Apache from detecting modern HTTP requests that might be cut off mid-URL.
Weird that the protocol was "appended" in this way so that you can't tell which version of the protocol you're using from character 0 of the request.
Though maybe this allows modern HTTP browsers to still talk to old 1991 servers just fine?
Yeah, so which recording shows your death?
Yeah, fixed the multiple leave issue already.
Another player sent me recordings that confirm that their client was sending the full request (but that it got cut off before the server received the whole thing).
I'm already using Content-Length headers (these are POST requests, and I think they're pretty much required, right)?
So... that brings up the question of why PHP is accepting an HTTP request as complete that does not have POST data matching Content-Length!
Yeah, I just tested this, and PHP ignores Content-Length and lets the request through even if the length of the data does not match the length specified in the Content-Length header (like, if the connection is closed before all the data is sent).
Though I suppose that I could check the Content-Length and make sure it matches. And this fix could happen server-side with no change to the client protocol.
And some client requests are GET requests, but these are protected from truncation because the full URL comes before the HTTP/1.0 marker in the protocol, so the request is totally invalid if the URL is cut off part way through.
Oh wait... on my servers, even totally incomplete HTTP requests (like "GET /" with nothing after it) are being processed. So incomplete URLs are being sent through to server.php. This is crazy. Need to figure out how to block those for sure.
Mine shows output in the file, but only after quite a while, when the output becomes long enough. I think it's being buffered.
http://stackoverflow.com/questions/1393 … ed-to-file
Looks like an fflush would help (isn't that ugly, though, because printf doesn't usually need it!?)
What do you mean "went offline"?
You mean, you walked away from the game for a while?
Or your disconnected from the network?
If you timed out, the message would be "You died due to inactivity" but this can only happen if you go idle for a long time in the middle of the self test.
Please send me whatever recording you have!
If it's not reported, I don't know about it and have no way to reproduce it. If I can't reproduce it, I can't fix it!
This game has been played by over 14,000 people and gone though over 30 revisions. There are almost no bugs left in it. But, the few bugs that remain are VERY rare and very tricky to find. You know, maybe they happen once every few days to one out of a thousand players. Sadly, bugs in a game like this can often lead to death and significant loss of time and resources.
When it happens to you, you won the lottery and hold the only key in the world to fixing the rare thing that happened to you.
So, PLEASE report any and all bugs that you encounter.
You should NEVER die in this game when it's not your fault. House check-in failed is always a bug (unless you timed out for some reason). Server errors are always a bug.
Okay, so How To Report:
1) Quit the game immediately after you experience a bug.
2) Find the latest recordedGame file.
3) [For crashes and non-server-related bugs] Copy it into playbackGame and run the game to watch your recording. Is the bug reproduced by the recording?
4) Send the recordedGame file to me, along with a brief message explaining what happened:
jasonrohrer@fastmail.fm
If you're on Steam, you can find your game folder by following these instructions:
It varies by platform, but you need to find your SteamApps/common/CastleDoctrine folder.
On Windows, it's:
Program Files/Steam/SteamApps
On Mac, it's in your home folder under:
Library/Application Support/Steam/SteamApps/
One Linux, look in your home folder under .steam (a hidden folder).
Yes, please send me the recordedGame file that shows this.
jasonrohrer@fastmail.fm
You can watch it yourself (to check) by copying it into playbackGame and running the game.
If you ever get a House Checking Failed message, please stop playing immediately and send me your latest recordedGame.
jasonrohrer@fastmail.fm
I can't fix it if it's not reported to me!
I looked at the code, and the only way "You died" is displayed is if your CLIENT decides that you died before it even sends the moves to the server (and then after the server gets the moves and sends back OK, the client shows "You died." but it already decided that you died before it even communicated with the server). In all other cases (server-side death due to a bug or otherwise), there should be some other error message (house check-in failed).
So, it sounds like this is a very mysterious bug.
Please send me the recordedGame file that shows this happening: jasonrohrer@fastmail.fm
You can also watch the recording yourself, which might give you some idea of why it happened.
If you're on Steam, there is a pinned thread in the Steam forums that will help you find your game folder.
Yeah, the hard part about fixing this stuff is really finding it...
These are so rare and mysterious at this point that sometimes it's hard to figure out what caused the problem.
In Stefan's case, it looks like his request to the server was cut off for some reason at the end of his robbery, which meant that the whole map wasn't submitted.
I have NO idea what's causing this. I assumed that an HTTP request, if received by the server, was guaranteed to be a complete request and not cut off. Maybe that's not the case.
I think I need to add something to the protocol to detect and deal with this.
Of course, it is SO rare that it's hard to even notice.
But when it happens to YOU, you notice it!
Daniel made two versions of that painting.
Yeah, that's possible.
But there are 150 paintings, each made by different people... I'm not sure I could algorithmically "shrink them down" in a sensible way without actually redrawing all of them.
I have some sketches in very early design docs about how to display paintings on walls (very much like what you show there), but I decided against it early on.
Oh... OS X never supported SDL!
It was something that I downloaded and installed (and I guess that's where it installed itself /System/Libraries/Frameworks...)
Trying to set your own LAMP (Linux Apache MySQL PHP) thing up from scratch is pretty complicated (though it's rather easy if you just install Ubuntu and then turn on those packages---it kinda just works, except for the database admin part).
In the real world, I've mostly been using web hosts that give me a web-based cPanel, which lets me easily create databases, create database users, assign users to databases, and so on. "phpMyAdmin" is another variant on this (web-based control panel for doing MySQL setup stuff).
That's the only part that's not really covered in my instructions.
Wow! Really great to see this happening.
Good stuff here!
![]()
Yeah, sadly, there is no way to prevent this. How do you tell the difference between two friends who are helping each other and one person using two accounts?
This is true of ALL online games, of course. Friends working together can help each other.
I'm not saying that it's an intended part of this game.
There were plenty of things put in place to thwart straight-up resource transfer between two accounts. So you can't easily feed yourself $2000 over and over from a second account (or two friends can't easily feed each other $2000 repeatedly). But those fixes make sense in the game and don't have huge negative effects on the non-exploiting players.
Trying to detect IP addresses that "seem" to be collaborating would be like looking for patterns in static.
Yeah, I just thought that it wouldn't break the whole window.
The RoosterTeeth guys have a pretty similar experience in their great and entertaining video:
http://www.youtube.com/watch?v=dhz-f3KQw2Q
When I watched that, I realized how LUCKY I was that they had that experience when showing the game. The triumph in their voices is undeniable.
I got the idea from id Software, which used to used tga files back in the day, as I recall.
Super-simple file format, very easy to write portable code to open them that doesn't depend on huge, fragile libraries (like libpng). In the case of the graphics that ship with my game, they're so tiny that they really don't need to be compressed. Very simple and convenient to output screenshots and mapshots using the same format.
Yes, paradoxes are still possible.
That green light is always powered in every step of the loop (alternately gets power from top and bottom) so it settles to powered, even though neither top or bottom settle to powered.
Even more striking if you have orange lights on either side of the green that show up as not powered. Or even better, a trap door that looks like it is powered from "off" electric floors on both sides of it.