Account disabled

Wednesday, July 1, 2015

Linden Labs has disabled my account for some reason. I am working with them to try to resolve the issue. In the meantime this probably means my games aren't working. It also means I can't read any messages. If you need to communicate with me I can be reached at my email (for my email address, click to the main Procyon Games web site, then click the Contact Me link in the lower right)

New En Garde Name Display System

Wednesday, March 26, 2014

Recently a lot of players have had problems getting their names to display when playing En Garde, or on the leader boards. This was due to the system I had breaking down. The names are displayed with custom textures, which are auto-generated and uploaded to Second Life. The robot I used for this would frequently stop working.

Also, the process I used to make the name textures wasn't compatible with some third-party Second Life clients. The names would look all speckly and weird. There wasn't anything I could do about that, since it worked with the standard client and I can't control the code in the third-party clients.

But now I have a new system which should fix both of those problems. Now, everyone can make their own custom textures to display their names.

I'm sending out Name Display prims to all En Garde owners. To set your display name, you can make your own texture and drop it on any prim. Your custom name will be set in the system and will display on any En Garde piste you play. If you change your display name in Second Life, you can re-upload a new texture for En Garde. You can do this as many times as you want.

When you touch the Name Display prim it will give you a notecard detailing the process, and also some suggestions for the best way to format your texture. If you have problems, the owner of the piste should be able to help you. If you need to know how to upload a texture to Second Life, there's plenty of tutorials on that.

I hope I don't have to stress that everyone should keep their custom name display within the bounds of good taste.

This problem with the name display has been one of the most frequently requested fixes/improvements for En Garde, and I'm glad I finally got something up and running. Thanks to the owners who helped me debug the new system, and all the players for their patience.

New En Garde display names are coming

Monday, March 17, 2014

For all the players whose names don't show up on the display .... I have a new system that I'm testing right now. Hopefully soon everyone can see their names when they play!

En Garde Team rankings are back

Tuesday, December 10, 2013

I fixed the glitch that prevented the team rankings page from showing. You can see your team rankings now

New Danger Zone v1.08

Sunday, December 8, 2013

Danger Zone is the very first game I ever made in Second Life. Linden Lab used to have an annual games contest, and I entered Danger Zone in the last such contest they had, way back in 2008 I believe. It was one of the winning games, and it launched my career as a games designer in Second Life.

The code is old and creaky, and if I were to do it again there's a lot of things I'd do differently. One of the biggest problems is that I went overboard with the prims. It rezzes prims during the game, and with a full eight players you could see 4 or 500 prims in use. Yikes.

But people do still play it, and one thing I was able to fix was some spammy messages it sends to the game owner, even when it's not in use. So there's a new version you can grab, if you currently have a copy.

And if you don't have a copy, I've listed it on the Marketplace.

Randomness and Games

Monday, October 14, 2013

I like having a little bit of randomness in my games. I view luck as the lubricant of game play. You need just enough to keep a game from getting stale, but not so much that it falls apart.

En Garde is, at its heart, a card game. Before each round, the cards are shuffled and dealt to each player. Whenever a new card is drawn, it comes from the top of the "deck."

That shuffling is as random as I could make it. I'm at the mercy of the LSL scripting language. In particular, I make a call to llListRandomize() to do the shuffle. I hope that that particular API call is truly random. It's not hard to make a good shuffle routine, but then again, it's not hard to screw it up, either. One of my favorite stories is about an online Poker site which screwed up their random shuffle routine, and when some players figured it out, they were able to predict who had what cards and make a bunch of money off the exploit.

I can tell you, though, that there is no intentional bias in any of the card shuffling. There is nothing in the code that gives an advantage to Player 1 or Player 2 (other than the fact that Player 1 has a very slight advantage because he plays first in the first round). So if you think that one side or the other is getting good cards all the time, it's just your mind finding patterns in the random numbers that aren't really there.

Sometimes you get a good hand, and sometimes you don't. The skill in the game comes from making the best of when you have a bad hand.

Back to Normal

Sunday, January 13, 2013

I think I have all the bugs fixed.

For anyone who's wondering, this was all caused by a forced upgrade. I don't upgrade the site often, so it's usually running on older versions of the software. But there was a big scary exploit that had been published, so I was forced to upgrade to Rails 2.3.15.

With that upgrade came a bunch of other changes, and it introduced some incompatibilities in pre-existing code. The last one involved the player game history. Probably none of the Second Life players care about this (except that it's been fixed), but I'll document it here for the benefit of any Rails coders confused as to why their named scopes are no longer working.

To generate the player history, I have a named scope which looks something like this:

named_scope :played_by, lambda { |*avs| { 
      :select => "games.*", 
      :joins => [:plays => [:avatar] ], 
      :conditions => {:plays => { :avatars => {:id => avs} } }

So I could pull up games played by two player like Games.played_by(mark, john). And that worked fine under Rails 2.3.5. But when I updated to Rails 2.3.15, the same code was giving me ActiveRecord::StatementInvalid.

I didn't get an error message more explicit than that, though. So I had to browse through the Rails code to find out more. It looks like sometime between 2.3.5 and 2.3.15 they changed sanitize_sql_hash so that it no longer accepts nested hases. I don't know why they changed that; it was working fine before. But I had to change my named scope to flatten out the nested hash, like this:

named_scope :played_by, lambda { |*avs| { 
      :select => "games.*", 
      :joins => [:plays => [:avatar] ], 
      :conditions => [" in (?)", avs] }

And now it works again.