Tuesday, April 30, 2013

Open Letters

Dear Authors of the Software Library I'm Working With,

If you provide a base class that I need to subclass in order to provide certain functionality, and your base class has a simple getter and setter method (such as getDebugMode and setDebugMode) whose purpose is obviously just to encapsulate a private int within the class, then please do not declare these methods as pure virtual and force me to implement them. Even assuming that there was a legitimate reason to include functionality in these methods besides the obvious, there's no reason not to provide a default implementation which just gets and sets a private int. Forcing me to implement textbook one-line getter/setter methods makes me feel like I'm being forced to participate in a Computer Science 101 exam.



Dear Patrons of The Gym I Go To,

For whatever reason, the towel supplies at our gym are somewhat limited, and experience has shown that the gym laundry service can occasionally be unreliable. There have been several occurrences during peak hours where the locker room has been without towels for lengthy periods of time, which , I'm sure you'll agree, is inconvenient for everyone involved.

To that end, for the past several years, every available surface in the locker room has been plastered with signs requesting that all patrons limit themselves to one towel. It is impossible to attend the gym without being confronted by one of these reminders of the scarcity of supply and of the need to be mindful of the existence of your fellow guests.

So what, exactly, goes through your mind when you take two or three towels for yourself? Are you being deliberately hostile to the rest of us, or have you somehow managed to convince yourself that the extra towels you took are some sort of magic towels that automatically reproduce themselves after you take them? Or is there something inherently special and valuable about your existence that means that it's more important for you to use an extra towel just to dry your feet while you get dressed, than it is for someone else to get to work on time?

I hope that you will take the time to contemplate these questions and take the appropriate actions in the future.



Dear Creator of the Universe,

I look forward to discussing several implementation flaws in your product at some point in the future. I have several suggestions for a patch or hotfix.

I am not at this time demanding a refund, as I intend to be using your product indefinitely; however, I believe that there are several opportunities for improving the overall experience for all of your registered users.


Monday, April 29, 2013

Review: Crimson: Steam Pirates

Crimson: Steam Pirates is a turn-based naval combat game from the fine folks at Harebrained Schemes. It's available both on the Apple App Store and on the Chrome Web Store, so it's playable on the PC. It's an enjoyable game, but I'd really like to see a more full-featured sequel.

As you might have guessed from the game title, there is a steampunky theme to the game, but if you prefer, you can think of it as alt-history pulp action. You take the role of a pirate captain, set loose in the Caribbean with a colorful crew and a fantastic array of vessels and weapons, including steam-powered dreadnoughts, airships, and lightning guns. For each mission, you are given a few ships, a few officers, and a few mission objectives, and your end-of-mission score is based on how many objectives you completed, how much loot you collected, and how many targets you knocked out.

Actual gameplay is simple: during each turn, you plan out the movement of each vessel under your command. (Anyone who's played Steambirds will find the movement system familiar.) You don't choose firing targets; your ships will automatically fire at any enemy vessels that move into their firing arcs. You do get to choose a special ability for each of your ships to use, which include such abilities as "fire faster" or "move faster" or "repair damage". Each ship can use one special ability a turn, and when an ability is used, it must recharge for a fixed number of turns before it can be used again.

You can also attempt boarding actions, by using the appropriate special ability and then bringing your ship in contact with a chosen enemy ship. The boarding action occurs in three waves: you may designate which of your officers (each with a different combat strength rating) to send out in each wave. If your total strength in a wave is sufficient to defeat the enemy officers in that wave, you win the wave. You must win all three waves to win the boarding action. A successful boarding action gives you control of the enemy vessel, so long as you transfer at least one of your officers to that vessel. Each officer grants one or more special abilities to the ship that officer is in, so you need to think about which abilities are best placed on which vessels.

Overall, I found the difficulty level fairly low. Out of the first eight missions, I won seven on the first try, and had to run the eighth mission twice. The simple strategy of "keep your ships grouped together, keep the enemy in your firing arcs, and use your special abilities often" was sufficient to overcome every challenge.

The first eight missions of Crimson: Steam Pirates are free to play, and took me about two hours to get through. There are two other mission packs available to purchase, each with eight more missions and each costing $2 USD. So if you buy into the whole package, that's $4 for six hours of entertainment. (If the add-on missions are more difficult or lengthy than the first eight, then your play time might be even longer.) Not a bad deal for a solid, if simple, game in my opinion.

What I'd really like to see is a sequel that allows you to choose which ships to deploy on each mission, and to choose the weapons and officers to assign to each ship. This would add some strategic depth as well as some replayability ("I wonder if I could beat that mission using entirely airships...").

As for the story in the game, it's nothing special or memorable, though I expect it would be challenging to develop a deep story with nothing more than a paragraph of narrative at the beginning and end of each mission. More impressive is the collection of lore about the world of Crimson, posted at the Hairbrained Schemes site. There's a timeline of significant events, lists of notable places, persons, and technology, and a quick sketch of the political situation. There's more than enough information here for a solid roleplaying campaign. Once again, I'd love to see a sequel that provides a deeper exploration of the world.

Overall I recommend it: it's turn-based strategy, it's easy to learn and to play, and the art and style bring back fond memories of the alt-history pulp action of Crimson Skies (it's probably safe to say that the similarity is deliberate). For a total price of zero dollars for the first eight missions, it's certainly worth a look.

Thursday, April 25, 2013

Really Extremely Very

I expect that most authors are well aware of the problem with the word "very", and other words of that ilk: they don't add anything of substance to the text, and they're a lazy way of providing emphasis. For instance, if an author says "the night was very hot," just how hot is that? One person's "very hot" might be another person's "mildly hot." Is it hot enough that no one can sleep indoors? Is it hot enough that the crickets are panting instead of chirping? Or is "hot" even the right word for the type of weather the author has in mind? How about "sultry"?

I'm actually encountering this same problem in my programming life as well. The contractors who are testing our software can't seem to use the word "confusing" without prefixing it with the word "very", as in "the controls on this page are very confusing." Wouldn't the defect report communicate the same information if it just said "the controls on this page are confusing"? Is there any additional benefit in trying to specify different levels of confusing? If so, why aren't we seeing any reports of UI elements that are merely "confusing" and not "very confusing"?

I've tried to remain vigilant about the use of "very" words in my novel, but recently I've begun to wonder about similar lazy words in my own speech: specifically, profanities. Craig Ferguson has told us that "sometimes, only a cuss word will do," but is this really true? When I use one of the words that you can't say on broadcast television, what information am I trying to convey? "I'm angry"? "I'm disappointed"? "I want you to pay attention to this"? How about when I use words with a religious context, like "God"? I haven't been a practising Catholic in over twenty years; why am I lending emphasis to a statement by referring to a mythological entity whose existence I do not assert any belief in? Wouldn't statements such as "by Odin" or "by Osiris" have the same weight? Why bring religion into it at all?

It might be useful, as an exercise, to try to omit any expletives from my speech and try to achieve the same emphasis and emotional weight through more polite and descriptive words. I don't know if I have the self-discipline to pull it off, but the results would be interesting.

Wednesday, April 24, 2013

Review: Strikefleet Omega

One of the first things I did after I bought my new Android phone was to install Strikefleet Omega on it. It's by the same people who will, eventually, release Shadowrun Returns. I'm pretty happy with Strikefleet Omega so far. The game concept is similar to Battlestar Galactica; a bunch of bad critters have launched a surprise attack on humanity, and you are in command of the lone surviving human space fleet, warping from star system to star system and fending off increasingly dangerous hostile attacks.

The game starts pretty simple; the bad alien ships fly in from the edges of the screen, you tell your starfighters to go kill them. But then they start layering in complexity; asteroid mining, and extra ships you can warp in as reinforcements, and artillery strikes, and different flavors of bad aliens that require different tactics to destroy. It's an entertaining little "I have ten minutes to kill and I have my cell phone" game. The story is pretty generic, but the character art is well-done, and there are a few little in-jokes for the fans (like star systems named "Plissken" and "Dunkelzahn").

It's a free game, supported by microtransactions, but the microtransactions aren't terribly offensive. You can buy Alloy and MegaCreds; Alloy is used to buy new ship types and to upgrade your ships, and MegaCreds are used to buy perks (special advantages like increased XP or increased fighter damage), to buy special ship types, and to pay for firing your flagship's Deathblossom, a superweapon that kills everything on the screen. The rates they're charging seem kind of expensive for what you get, but so far as I can tell, you can play the game just fine without spending any real money. You earn Alloy during play, so you'll be able to expand and upgrade your fleet just by completing missions. You don't earn MegaCreds past the initial 10 you get when you install the game, but the game is perfectly enjoyable without the premium ships and bonus perks. (You get to choose one free perk every mission anyway, so you're not entirely cut off from that part of the game). It's a shame that you have to spend real money to fire the Deathblossom, but you can think of this as encouragement to improve your play so that you don't have to rely on it.

Overall, well worth my download time, and I recommend it for Android and iPhone users.

Tuesday, April 23, 2013

Very Busy

I'm going through another edit cycle with my novel, based on recent reader feedback. I'm trying to arrange to do a volunteer shift at a local community center. I'm still arguing with BulletPhysics. There's probably a dozen other things I ought to be doing and don't have time for. If Wolfram and Hart showed up at my door and offered to remove my sleep so that I could have more hours in the day, I'd sign up in a heartbeat.

Maybe not. I do like my sleep. But a few more hours in the day would be nice.

Monday, April 22, 2013


I've been thinking that my novel-writing process needs to include more planning time before I actually get to the point where I'm typing "Once upon a time." While writing Stone of Names, I hit several points where I realized that I hadn't really thought certain events through, and that I needed to go back and rewrite my earlier scenes so that my later scenes made sense.

I didn't have much in the way of an outline for this book. I started with three specific scenes in mind -- one at the start, one in the middle, and one at the end -- but with nothing specific planned out in between. It was fairly obvious to me what needed to happen between the first scene and the middle scene, but as I wrote, I realized that I wasn't sure what to put between the middle scene and the last scene. I wound up adding a couple of new characters, which made the last half of the book more interesting, but then I had to go back and introduce them briefly in the first half of the book to keep things tidy.

There were also plenty of little details that I needed to go back and add so that the main character was properly prepared to overcome a variety of obstacles. If I'd thought through those obstacles up front, I might have been able to plan for them ahead of time.

What I think I'd like to try for the next novel is something like this:

Step 1: General statements about the book's action. This could be as simple as two sentences: one describing the physical action (legendary warrior Aria Aviplix must find and destroy the Eye of Elfador) and one describing the emotional action (Aria is forced to confront her ex-lover, the Duke of Dredskul, and resolve her feelings for him). With these two statements made clear up front, I can design the rest of the novel to continually reinforce these themes.

Step 2: Chapter outline. This would be a brief outline, giving a few sentences to describe each chapter at a very high level. This lets me set the pace of the book and ensure that I've established a continuous line of action from the beginning to the end.

Step 3: Scene outline. I'd then break up each chapter into scenes, and for each scene, make a bullet-point list of what needs to happen, what information needs to be delivered, and what needs to happen in prior scenes to make the current scene work.

Doing this work up front would allow me to manipulate the action and the plot elements so that they're nicely distributed through the book, and so that there's no discontinuity or awkward shifts of direction.

The trick would be getting through this planning phase as expediently as possible. It won't be immediately obvious when I'm done with the planning phase, since I could easily wind up tinkering with the story outline for months. At some point I'll need to say "good enough" and start generating prose.

I have no doubts that I'll still wind up doing some level of revision and rewriting. As I'm writing the book and experiencing the characters and events, I may change my mind about a variety of things. But at least with a decent outline up front, I won't be in danger of hitting a dead end halfway through the book.

I'm quite sure that just this sort of planning is recommended by a variety of "how to write a novel" books, but I think that trying to follow someone else's recipe for art is a bad idea. You need to develop your own process that agrees with your own pace and your own goals. My process will probably continue to change with each book; hopefully this means that each book will be better than the last.

Friday, April 19, 2013

The Data Center Always Rings Twice

One of the very, very few good things I got out of my time at Borders was a profound appreciation of the luxury of a full, uninterrupted night's sleep.

Within a couple of weeks of my joining Borders, I was handed a pager and given on-call responsibility, 24x7, without rotation. I remained on-call more or less non-stop from that point on. I actually managed to get myself into an on-call rotation for the last couple of years, but all this meant was that I wouldn't be the first person called in case of trouble.

So, on any given night, I might be awakened by the phone ringing at 2 A.M. to notify me of some critical issue that had to be resolved right away. Sometimes it was an issue that had never occurred before and had no obvious cause; sometimes it was an issue that required me to get dressed and drive down to the offices; sometimes it was an issue connected with a system that I no longer had any formal responsibility for.

I don't know how other folks deal with that kind of responsibility, but after ten years, I got to the point where I went to bed every night dreading the ring of the phone. Sometimes I would lie awake, imploring the local benevolent spirits for the blessing of a night without a phone call. If I had stayed there much longer, I would have been rubbing lamb's blood on the door every night so that the Angel of On Call would pass me by.

I have not been on-call since October of 2009. And even now, when I go to bed, I get a twinge of horror when I look over and see the telephone. But then I remind myself that those days are passed, and that my slumber is no longer threatened by the possible failure of a computer program somewhere else on the planet. I assure myself that my life without on-call for the past four years has not been a dream that will shortly be interrupted by the ring of a cell phone.

And then I sleep.

Thursday, April 18, 2013

Richard Kadrey

I just got finished reading Butcher Bird, by Richard Kadrey. I grabbed it as soon as I saw it on the shelf, dragged it home, read it, and enjoyed it. I didn't like it quite as much as Kadrey's Sandman Slim novels, but it was still a fun ride.

I suppose you could say that the Sandman Slim novels and Butcher Bird are urban fantasy, but you'd have to take urban fantasy and ...

Well, let's say that you and Urban Fantasy decide to hit the bar. You've worked two 16-hour shifts straight, but Urban Fantasy was just fired after a shouting match with the boss, so between the two of you, you make up one well-adjusted working person. You go to your favorite bar in Los Angeles: it's in a dicey neighborhood, but the drinks are honest, the music is good, and the bartender is hot and knows your entire life story.

You and Urban Fantasy spend most of the night there, chain-smoking and drinking tequila. At some point a couple of attractive bar patrons join you, and you know, from the first moment, that some combination of the four of you are going to wind up in bed, but there's an order and a process to these things. You all get drunk and tell each other outrageous things, brilliant things, things that might have been lies, but they were the truth as soon as you said them.

One of your two new friends owns a tattoo parlor, and you you all drift over there, for more drinks and cigarettes, and you and Urban Fantasy both get new ink to add to your collection. It looks like things are getting romantic quickly between Urban Fantasy and the third member of your party, but the fourth member is passing out, so it looks like you're about to be superfluous. You head out, stone drunk and in a strange and dangerous neighborhood, but you sing yourself home, singing all the good old songs, the songs that were written by musicians who weren't chasing MTV or YouTube; they wrote the songs because they had to, because those artists were full of beauty and pain and if they didn't put it into notes, they would have died (and some of them eventually did).

You wake up alone in your bed when the phone rings. Urban Fantasy is calling you. It seems that Urban Fantasy woke up sprawled out in the hall outside Urban Fantasy's apartment, without any clear memory of getting there, and without the apartment door keys. The keys are probably at the tattoo parlor, and Urban Fantasy wants to know if you remember the name of the place?

You eventually remember, and the two of you track the place down, only to find that it's been taken over by apocalpytic cultists who are trying to summon a colossal elder god, and you and Urban Fantasy have to charge in with motorcycles and shotguns to save the world, save the owner of the tattoo parlor, and get the apartment keys back...

...and that's pretty much Richard Kadrey's urban fantasy.

Tuesday, April 16, 2013


My thoughts and prayers go out to all of those caught in yesterday's blasts, as well as their friends and families.

Monday, April 15, 2013

Give Me Your Honest Opinion

The three stages an author goes through when receiving criticism are as follows:
  1. Supervillainy: "How dare they malign my work? Clearly they are incapable of comprehending the true magnitude of my talent! When I've reached the top of the bestseller list, they'll crawl over each other to beg my forgiveness -- crawl, I tell you! Mwa ha ha ha!"
  2. Melodrama: "How could I have been blind to all of these flaws? This book is a failure, from start to finish! I'm nothing but a no-talent hack with a word processor and delusions of grandeur! I must now drown my existential pain with vokda/chocolate/Nethack/etc." (Note: the author does not condone the use of Nethack for purposes other than for which it was originally designed: verifying that your computer is capable of displaying the entire ASCII character set.)
  3. Progress: "Hmm ... I think I see how I can address these shortcomings while staying true to my vision for this book. The book will be richer and more complete as a result."
I've gotten pretty good at speeding through phase 1 so that I can spend more time savoring phase 2. If anyone out there has successfully reached phase 3, send me a postcard and let me know how the weather is up there.

Friday, April 12, 2013

From The Ashes

A little while back, I wrote about the ultimately futile efforts to wish a dead MMORPG back into existence. Now it seems that a group of folks have decided that the only way that anyone is going to do the work to rebuild City of Heroes is if someone actually does the work to rebuild City of Heroes.

This group, Missing Worlds Media, carefully avoids mentioning anyone's IP, but it should be clear to CoH veterans exactly which "missing world" they're hoping to replace. The web site is still under construction, but what's there seems to suggest that the all-volunteer team has a leadership structure, programmers, and artists, and they've chosen a graphics engine. Now all they need is a logo and a T-shirt and they'll have everything they need to be a failed startup.

What you're reading now is not the original blog post I wrote about this. I had written a long, snarky, world-weary article about how I would personally graph out the betting pool squares for this project's failure.

I've deleted all of that. Yes, an MMO is a huge project, and the idea of pulling together a worthy successor to City of Heroes with an all-volunteer team seems insane.

But what if they pull it off?

Wouldn't that be incredible?

I'm going to temporarily turn off my cynicism chip and encourage anyone who believes in City of Heroes, anyone with any talent in art or programming or anything to go to the Missing Worlds Media site and see if there's a way you can help.

Best of luck, Missing Worlds Media. Excelsior.

Thursday, April 11, 2013

Review: Master of the World

In 1904, Jules Verne, one of science fiction's founding authors, wrote a book called Master of the World.

This is one of the worst books I have ever read.

I expected better; this is Jules freaking Verne, after all. But let me explain my problems with this book, in the hopes of saving some other reader a few valuable hours.

The book starts out in a relatively interesting fashion: citizens living close to the Blue Ridge Mountains in North Carolina notice some unusual and disturbing phenomena from high up on one particular summit: the Great Eyrie. The locals are concerned that volcanic activity -- or possibly some supernatural event -- is to blame. The protagonist, a police detective, is sent to investigate.

The top of the Great Eyrie is like a bowl; it has high sides, concealing a depression in the center that no one has ever seen. The detective and a small team climb up the mountain and attempt to find a way to cross over the seemingly-impassible barrier wall that shields the secrets of the interior.

They fail, give up, and go home. This is the first of many incidents in the book where there's a lot of build-up and no payoff.

The book then describes a seemingly completely unrelated series of nationwide sightings of some strange, impossibly fast vehicle. Not only is this vehicle able to travel in excess of two hundred miles per hour (pretty speedy for the time), but it can apparently travel by road, by sea, and underwater as well.

The nations of the world immediately want this contraption. Just think of how it could be used to advance the state of warfare -- I mean, the state of the human condition! World governments begin to publish a series of open letters to the unknown inventor of this vehicle, offering increasingly attractive sums of money for the secret of the craft. The inventor, eventually, responds with an open letter of his own, in which he rejects all of these offers, and announces that this vehicle represents an unstoppable force, greater than any nation, and that power of this vehicle will remain his alone. So there.

This is somewhat provocative, and our friend the detective is sent out again. With the help of an eyewitness, he is able to catch up to the strange vehicle while it is tied up at a secluded lake shore. The occupants of the craft spot him; some gunshots are exchanged; the hero's coat gets caught up in a mooring line; the hero is dragged off into the water as the craft motors away.

The hero nearly drowns, but is rescued by the boat's operators, who then subject him to a horrifying fate.

They give him the silent treatment.

There are apparently only three occupants of the craft: its captain and his two assistants. They continue about their business, driving their super-vehicle around the countryside, refusing to say a word to their captive. The police detective retaliates primarily by sulking. He makes no attempt to overpower his captors; he just rides around in the vehicle for a few days. The craft is pursued by a couple of destroyers; it evades them by going over Niagra Falls and taking to the air; it flies back to its home base, which is (surprise!) the Great Eyrie.

The hero is let off the ship for a little while, during which time the pilots resupply their vessel again. The hero gets to stalk around the bowl of the Eyrie for a little while, and then he gets herded back into the ship for another dose of the silent treatment and another seemingly pointless voyage.

I cannot emphasize enough the fact that, apart from a scant few words in the middle of it all, during this entire long section of the book, there is no conversation between the hero and his captors. They don't threaten him or gloat or boat or even explain why they're keeping him. They just drive/fly/sail him around.

Eventually, while the ship is at sea, it sails into a great storm. The captain, not being a sane man, orders his assistants to unfold the ship's wings and take to the air, and fly into the center of the storm. The hero finally decides that this is a bit much. He resolves to put an end to this; he grits his teeth; he turns to lay hands on the captain and arrest him -- and a lightning bolt hits the ship and destroys it.

The detective survives somehow and is rescued from the sea, and tells his story to his superior officer, and goes home.

The end.

I was shocked at how very, very little happens in this book, particularly since I knew that there was a movie based on it starring Vincent Price. It wasn't until after I finished the book that I found that the Master of the World movie isn't actually based entirely on this book; the movie is based on a combination of Master of the World and Robur the Conqueror, which is an earlier book that Master of the World is a sequel to. In fact, in the middle of the book Master of the World, reference is made to the events of Robur the Conqueror, which even in this brief synopsis is a much more interesting story than anything that occurs in Master of the World.

I'd still like to see the Vincent Price movie at some point, but the only good thing I have to say about the book Master of the World itself is that it's free to download at Project Gutenberg, and so I didn't actually spend a penny on it.

Wednesday, April 10, 2013

This Is Important - Let's Not Talk About It

This morning, my Google News page included an article about an upcoming movie based on the Occupy Wall Street movement. The article itself was written by a conservative-leaning author, and, of course, the author felt compelled to mention...

Actually, I don't really want to talk about what this particular author had to say, especially since any of my liberal friends can probably make a good guess. What I want to talk about is the fact that my initial impulse was to blog about this article, and then I said to myself: "I'd better not ... if I post anything political, folks will quit reading my blog."

Upon consideration, that thought bothered me more than the original article I found on Google News. I don't know how true this is in other places in the world, but here in America, we seem to have an unhealthy relationship with political conversations. Discussion of anything political, in many circumstances, is considered to be impolite and taboo.

For example, when I used to work at A Certain Bookstore, we were forbidden from posting politically-oriented material in our cubes, or from wearing clothing with political messages. I assume there was some fear that someone would ask "So, who are you favoring for President?", and within an hour, we'd have divided the building in half by political party and we'd be battling each other with paper cutters and staplers.

Also, during last year's Presidential campaign, I saw at least once Facebook post stating something along the lines of "I am sick of hearing about politics and I am going to block anyone who posts something political." This bothered me at the time. Aren't the months leading up to an election the time when we should be most interested in discussing politics?

Unfortunately, I think the problem is that we as a people are no longer capable of actually discussing politics. As soon as a politically-oriented issue comes up, we retreat to our respective red and blue corners, put our hands over our ears and start shouting talking points until we're out of breath. "Discussions" like this aren't productive or useful; they're just loud and insulting, which is the reason we try to prohibit them in polite social situations.

I give our political parties most of the blame for this. They train us to react with fear and anger as soon as a hot-button issue comes up, like gun control, or funding cuts for social services. If we all treat the folks in the Other Party as monsters or morons, we're much more likely to support Our Own Party without question or deviation. We've been divided into teams, and we've been told that the other team is plotting the worst sort of evil.

The words "liberal" and "conservative" are frequently used as insults, and this alone should tell us that we've lost our objectivity.

We need to be able to talk about politics. We need to be able to step outside of our red or blue boxes to understand the things that our fellow citizens are concerned about. We need to be able to empathize, to consider, to compromise. We need to be willing to take ownership for our country, our government, and our problems, and we need to have the patience and maturity to work together to produce a future we're willing to live with.

So long as we find ourselves unable to do anything other than stand in the corner and shout, we're not going to produce anything other than apathy and political gridlock. If, however, we're willing to come to the center and talk, we might actually learn a lot, and we might actually find solutions.

The alternative is to reserve our Facebook posts for discussions of Dancing With The Stars, and leave our country in the hands of the professional politicians -- and it should be obvious to everyone just how well that's going.

Tuesday, April 9, 2013

I Hate Arguing With Libraries

... by which I mean, programming libraries. This week my frustration is being caused by the Bullet Physics library, which is included as part of the libGDX game library. When Bullet Physics is working correctly, it produces some impressive results, but getting it to the point where it's working correctly seems to be far from straightforward.

For instance, I have a mesh of a physical object that I want to introduce into the game. I want the physics library to detect collisions between my new object and the existing objects, so that they can bounce off of each other. According to the documentation, I'm using all the right calls to convert my mesh into a rigid body object, which should then generate collisions. Except that the existing game objects are passing right through my new object as if it wasn't there.

One problem is the the documentation for Bullet Physics isn't very helpful. It looks like someone just ran a documentation tool over the library code and posted the results on the web. This would be fine if the original code had been well-commented. For instance, look at this page and tell me: what is the purpose of the vertexStride parameter of the btTriangleIndexVertexArray constructor?

You might think that the overall library manual might be of assistance here, but I can tell you that the word "stride" doesn't appear anywhere in the manual. The manual does, however, at the very back, provide a few tips, such as "Keep the size of triangles reasonable, say below 10 units/meters. Also degenerate triangles with large size ratios between each sides or close to zero area can better be avoided." This would appear to apply to my case, since I know my mesh includes some long, narrow triangles, but what is a "large size ratio" in this case? 10:1? 3:1? 2:1? What are the expected symptoms if you have "degenerate" triangles? If I clean up my triangles, will this repair my collision problem, or is this just a performance optimization?

And then there's the fact that libGDX is a Java library, and it provides a Java wrapper over the Bullet Physics library, which itself is a C library. This is all well and good -- a C library will produce much better performance than a plain Java library -- but the C library doesn't play well with Java garbage collection. If you create an object in your Java code and pass it to the physics library, and then the object goes out of scope in your Java code, Java will eventually garbage collect it, even if the physics library is still using it. In order to prevent memory faults, your Java code needs to maintain references to everything passed to the physics library, which eliminates much of the convenience of using Java in the first place.

I like programming. I really do. But I really don't like spending hours trying to convince a library to do work that the library is supposedly designed to do.

Monday, April 8, 2013

Review: Extinction Machine

Every since I was pleasantly surprised by Patient Zero by Jonathan Maberry, I've been an eager follower of Maberry's Joe Ledger books. Patient Zero looked like it was just going to be a cross between a zombie novel and a tough-guy-adventure novel -- which it is, except that the quality of the writing, in my opinion, elevated it above both of those genres. I grabbed The Dragon Factory and The King of Plagues as soon as I could, and I enjoyed them just as much.

Then Joe Ledger fell off my radar for a while, and the next time I checked, I saw that I'd let two books slip by: Assassin's Code and Extinction Machine. The most recent book, Extinction Machine, was easiest for me to get my hands on quickly (this isn't a series that requires a deep study of the prior volumes in order to appreciate the later work) and I recently finished it.

I was a bit underwhelmed. The first three books stick closely to the same formula: take a James-Bond-style supervillain, arm him with a science-fictionish global threat, start a doomsday countdown, and toss Joe Ledger in the middle. Those three books introduced enough variations on that basic theme so that it didn't seem like the same old plot over and over. But Extinction Machine really doesn't add any interesting elements to the formula. I love a good conspiracy story, and I like how Maberry dressed up the old Majestic-12 stuff, but the supervillains this were fairly bland, and Joe Ledger just didn't seem to get in as much trouble as usual. He's nearly a supporting character in this book; he gets shot at a few times, but these scenes are drowned out by a mess of other activity. We get some flashbacks to earlier events, which are largely unnecessary, since they simply show us information that we had already learned from other sources. We get a series of scenes that are just extended phone interviews, used to dump a massive (and possibly overextensive) amount of exposition onto the reader. We follow around an opposition character who, in the end, could have probably been removed entirely from the book without much difficulty or impact.

In short, it's a Joe Ledger novel without enough Joe Ledger in it, and his presence is replaced by characters who aren't nearly as interesting, or by pages of conspiracy-theory trivia that slow down the action and contribute very little to the overall plot. I feel that Maberry spent a little too much time trying to assemble a fictional justification for this book's doomsday threat, and felt compelled to give us all of his research notes, whether we wanted to read them or not.

If there are more Joe Ledger novels, I hope that Maberry is able to regain his focus on telling a story about Joe, rather than trying to build up a complex cast of allies and antagonists. The Lester Dent Plot (essentially, get the hero in trouble on page one and keep dumping on more trouble until the big finish) is hard to improve on for straight-up pulp action, and watering it down isn't a recipe for success.

Friday, April 5, 2013

Just Give Us Your Money

I wish I could believe that gamers would abandon Electronic Arts in droves after the first DLC for Sim City turned out to be an advertisement. I wish I could believe that Facebook subscribers across the planet would turn away from Zynga games in disgust now that the company has decided to branch out into online gambling (although, honestly, their "free-to-play" games weren't far from gambling to begin with).

But even though you'll see a flood of internet chatter where gamers loudly decry and deplore these actions, there won't be any long-term effect. So long as EA continues to produce elaborate hi-res dating sims, they'll be just fine. And though it's true that Zynga has been having some financial difficulties, I'm sure that their movement away from gaming and into out-and-out vice will be a good move for them.

EA isn't the shining star of video game artistry that it once was, and Zynga was never anything more than a suction hose attached to your wallet. But though folks like me might assert that what they're doing is wrong, you can't deny that what they're doing makes money, and that, in the end, is the actual goal of the real-life game that these companies are playing.

Wednesday, April 3, 2013

Time Sink

I've always found it strange that some video games show you the total amount of time that you've played it. This seems like an anti-achievement to me. "Congratulations! You've wasted 25 hours of your life driving this animated character around an imaginary environment!"

And if you buy a game through Steam, then Steam will helpfully track your wasted time for you, even if the game itself is tactful enough to conceal this statistic from you. However, the centralized, cross-game nature of steam suggests a possible improvement to this feature. What I'd like to see, next to Steam's "total hours played" statistic, is a suggestion for what you might have otherwise accomplished with that time, such as "you could have learned a foreign language" or "you could have written a short novel" or (if you really want to stick the knife in) "you could have helped prepare 100 meals for the homeless."

At the very least it would be a good temporary "feature" for April Fool's Day sometime.

Tuesday, April 2, 2013

Stone of Names - April Status Report

My manuscript is currently in the hands of several beta test readers (thanks everyone!) and I'm braced for incoming feedback. I'm hoping to have this phase of review and edits completed by the end of the month, at which point it will be time to start looking for an agent.

I have no idea what to expect on the agent front. While this will certainly be my most polished book to date, and while it may actually be good, I can't tell if it's commercially viable -- in other words, will readers want to buy it? This depends on a number of arcane business factors and is probably only something an agent will be able to tell me.

I have an idea for two sequels to this book, but I'm not sure if I want to keep writing about these characters or try something different for a while. If the subject material starts to bore me, I'm sure the final results won't be as good. On the other hand, I expect that producing multiple books around the same characters is a good move from a business point of view. Each book would serve as an advertisement for the other books, and someone who likes the initial book would be more likely to want the rest.

I currently have plenty of editing work to do on Stone of Names, so it's too soon to start the next project in any case. So for now, I'll just keep polishing the manuscript, and dream of seeing my book cover on the shelves at the local bookstore...

Monday, April 1, 2013

International Tabletop Day

I was fortunate enough to participate in International Tabletop Day over the weekend, and I had a great time. One of our local gaming stores was running an all-day open gaming event, and I was able to try out a few games I've never played before:
  • Tsuro is a light, quick, visually-attractive strategy game. I think I played it three times, though I was never able to develop my own strategy beyond "meander around in the middle of the board until I run out of room, and then spend the last three or so turns just trying not to get forced out." Presumably a more dedicated player would start to learn the tactics of positioning and planning ahead.
  • Ticket to Ride is a fairly popular and successful game about building cross-country trains. At first glance it doesn't look substantially more complex than Candyland, but once you start playing, the rewards of proper planning and competitive play become more apparent. It took longer to play that I expected; I think we were at it for an hour and a half, though some of that could have been due to floundering about trying to interpret the rules.
  • Zombie House Blitz is a real-time, zombie-themed card game that just barely squeaked over its Kickstarter goal this weekend. I didn't really fully grasp the rules while I was playing, and as I've mentioned before, I really don't need to see any more zombie-themed products, but the players who knew what they were doing seemed to be having a good time. (The Kickstarter page seems to suggest that no physical copies of the game are going to be produced for anyone besides Kickstarter backers; possibly the game art and rules will be made available for print-and-play purposes later.
The overall event organizers over at Geek and Sundry were transmitting an all-day live stream of games they were playing, with occasional videos from gaming stores all over the country (and beyond; I know I saw some footage of gamers down at the South Pole). The scope and reach of participation in this event really amazed me. So many people in the world spend a great deal of time and effort trying to find ways to be jerks to each other; the Geek and Sundry team just wanted to get people around the world to play games for the fun of it, and I find that inspiring and refreshing.

My only problem with the event is that I find a crowded basement full of gamers to be a challenging environment in which to learn a new game from scratch. Noise and confusion aside, I personally am terrible at explaining the rules of a game to people. I tend to explain the rules as they become necessary during play, which means that I don't really talk about the victory conditions until the game is done, which means that everyone who didn't already understand the goals of the game is pretty much screwed at that point. Learning these games would have been less stressful and more effective in a nice, quiet, relaxed living room somewhere.

Still, Mary Lynn and I had a lot of fun, and I'm already looking forward to participating again next year.