Again, let me say 'Thank You". Your Immortal Game is the proper send-off that City of Heroes deserved, and that NC$oft refused to even consider.
You're welcome. And I have to say, while I'm somewhat upset at the shutdown, particularly the details of the shutdown (which I'm sure someone will spill eventually), I was even more upset when I realized NCsoft had no intention whatsoever of allowing the devs to script us an ending to the game, essentially out of spite. It would have cost them nothing: the devs by law were being paid for two months past the shutdown announcement. I'm particularly upset over the fact that in their shutdown announcement they implied they would do something, and in their current goodbye message they implied they *did* something. What final battle did they host?
Anyway, yesterday I talked about what we tried to do on that day, but that was the culmination of about a month of figuring out what we could do. Again: this will be a bit of a ramble because I'm writing this up on the fly, before some of the details get squishy in my memory. We spent a lot of time just trying to figure out what we could do, and we were figuring that out right up to the morning of Wednesday.
My guess is that everyone who has ever gotten admin access to a City of Heroes server, devs included, has figured out how to do three things immediately and then abused the privilege. One: everyone learns how to jump to any zone. Two: everyone learns how to make themselves look like any entity in the game. And of course Three: everyone learns how to spawn critters.
I will admit that I spent a lot of time just spawning things, just for fun, but also to brainstorm. I spawned Hamidon and the Avatar of the Hamidon and had them fight. Primal Hamidon wins that fight, by the way - go Primal. I spawned squadrons of Kronos and Warwalkers and AVs and every kind of critter. I had them fight each other, fight me, fight anyone else that might accidentally zone into the zone.
That zone, incidentally, was a place called "daveland." I don't know the complete backstory to why there's a zone called Daveland although it seems obvious at least that someone decided they needed a place to test things. You can't get to Daveland except with admin teleport (mapmove) capability, so it was a safe place to experiment.
I spent a lot of time deciding how that fight would go. Would the players have help? Should I spawn praetorian warwalkers on the players' side. What should I spawn on the enemy side? In fact, if not enough players showed up, my backup plan was to have the IDF backup the players against the Battalion, but as it turned out that contingency was completely mooted by the fact that a hundred fifty people showed up for the event.
I really, really, *really* wanted to make custom Battalion enemies. There's just no way to do it. You can manipulate players, but not really critters. You cannot customize the look of a critter - not on a real server (its possible on a development shard I believe). The only place you can create customized critters is in the AE, and we actually considered holding the event on an AE map for that reason, but ultimately decided against that idea. You cannot even grant new powers to critters. The fundamental problem is that a critter is just a critter: its a single thing. Its an instance of a thing hardcoded into the game. Players, on the other hand, are dynamic things. Players level, they slot, they train, they respec. The game deals with players as database records with database entries for all the aspects of the player. You can add powers to players. You can remove powers from players. You can change the location of a player from this map to that map. Its all done with the player database. There is no such thing for critters. Critters are immutable cardboard cutouts. Not that I didn't try. I tried adding powers to critters, changing critters into other critters - a critter is just a critter. So if we were going to use NPCs, they would have to be the garden variety kind.
I was just not satisfied with that. We needed to deliver something more, so we decided to incorporate volunteer pilots driving customized Battalion player characters. We could do all kinds of things to those. We could customize the look of them, and we had the theoretical ability to customize the powers they had. We just needed to figure out the right way to do it.
There's a game command called "omnipotent." Omnipotent is an interesting command: it grants a player character every power that is valid for their archetype. In other words, all of the primary powers of their archetype, all of the secondary powers of their archetype, all pool powers, all epic powers appropriate to their archetype, and all of the temporary powers. Omnipotent characters are a lot of fun to play around with. They also tend to break. They sometimes crash the maps they are on, they sometimes crash themselves out of the game, and they sometimes get hosed to the point they can't be logged in anymore. Unfortunately. The problem seems to be hard coded limits on certain things, one of them being the number of powers you can have. Its apparently somewhere around a thousand, and omnipotent characters come very close to or pass that limit. Curiously, I spent a lot of time on an omnipotent character without it breaking, but some other people reported they broke immediately for them. When it finally did break for me I stopped using the command, and certainly had to disqualify it from being used for the event.
Which meant creating Battalion critters by hand, power by power. I spent a lot of time in Daveland looking at powers. I thought I had a great combination when I ran into another problem. On top of buffing a player with the entire encyclopedia being not so good, buffing players with player powers not in their archetype proved problematic. It seems the game has error checkers for that, and it often concludes a Tanker with Blaster powers (for example) is corrupted. So if I was going to make custom player characters, I had to make sure the only player powers they had were those in the archetype the character was created for.
Unfortunately, that eliminated another possibility. I wanted the player characters to be tougher due to testing them being too weak to stand up to players, so I decided they would be Tankers, with tanker health and res caps. But that eliminated an option I thought would have been fun: an early design of the Battalion Lts had all the Blaster nukes. Which you may recall were buffed in I24 to not crash. But for this error checking annoyance, you guys would have been fighting Battalion that were nuking you every few seconds. That's not as bad as it sounds: due to another issue I'll explain in a bit, those nukes would not have been slotted. Flashy, and they'd hit hard, but they would not be lethal. But I bet it would have been a surprise to see a Battalion Lt nuke you, and then Inferno you, and then atomic blast you.
I found a way to cheat, but not in a way that gave me the non-crashing nukes back. While I could not grant Blaster or Controller powers to a Tanker without risking breaking the character, I could grant any other non-player power. *Any*. Which means I could grant the powers in the custom critter powersets for the Architect. If I wanted to give the Battalion power blast, I didn't give them Blaster power blast, I gave them Architect power blast.
I could also give them any power that any NPC had. For example, to beef up their mez protection I could give them the purple triangles of an AV. True story: I accidentally gave them the purple triangles from the green mitos because it also had a lot of resistance, but it also self-immobilized the Battalion. So I had to remove that one at the last minute. And I gave them the healing strength of the green mitos, which is substantial especially on a tanker. I also made sure to pick powers that would grant significant debuff resistance so they were not melted instantly by strong debuffing players.
One thing I gave them but they didn't use because they lost was level shifts. I could level shift the Battalion by simply granting temporary powers that offered level shift. However, while I did that when buffing the Battalion, when the zone crashed and everyone had to log back in I forgot those powers did not persist between logouts.
The bottom line is that for player characters, I could grant any player power that was valid for their archetype, and any other power period. Which provided a lot of opportunities for customization. But I did notice something that relates to something else I knew from a while back, which created another interesting glitch. If you grant all these powers to a level 50, nothing unusual happens. But if you grant them to a lower level character, a curious thing (if you don't understand how the powers system works) happens. Suppose you're level 23 and I grant you a ton of these powers. And suppose I also then bump you to level 50. Now you go and train. What happens? Well at level 24 you're supposed to get a new power. But what actually happens is nothing: the trainer says he or she is ready to train you to 24, you select train to new power at the trainer, there's a pause, and then you're back to the trainer and now he or she says they are ready to train you to 25. What happened?
What happened is this: the game doesn't award powers and slots by a schedule. It actually checks to see if you have less than what you are supposed to have, and if you have less than what you are supposed to have it gives you the opportunity to get more. So at 23 you are supposed to have I think thirteen powers. At 24 you're supposed to have fourteen. Normally, when you train to 24 the game goes "oh, you're allowed 14, but you only have 13. I'll send you to the power selection screen." But when I mucked with them, they now have something like 32 non-temp powers. So when they train to 24, the game says "oh, you're allowed 14 but you have, err, 32. Well I guess you're done" and never takes you to the screen.
In other words, if I roll a level 1, bump him to 50, and then grant a bunch of custom powers, when that character trains up to 50 they will never get the chance to take any of their primary or secondary powers. They already have too many. So, to work around this we had to make sure to bump characters first, train them, and *then* grant them all their special powers.
Incidentally, a variation of this type of processing for slots is what the devs ran into when they tried to grant us more slots. There's a complex dance of "what should the character have now" validation code that gets unraveled when you change what we're supposed to have. That's why weird things happened like all your purple enhancements vanished with those extra slots. The game simply doesn't work the way people would ever guess it worked, ever. Frankly, in many respects its pretty Rube Goldbergian.
In any case, that meant since the character was trained to 50 first, they could not slot the new powers I granted. So that's why nukes would have been not very strong. With more thought, we could have designed these characters in just the right way so the right powers were slotted: train to 26, grant powers, retrain, slot, grant more powers, retrain, etc. Again: the limit was time. I finalized the design of the Battalion and wrote the scripts to buff them about thirty minutes before 5:00 Pacific when we started to trickle into the zone and set things up. We went right to the wire.
In any case, that's the basics of how we figured out how to create the custom Battalion Lts. Oh, I forgot to mention. I hope someone noticed that one of the attacks I granted to the Battalion was the ranged attack from the Crystal Titan. It doesn't actually do that much damage, but its really cool looking so I added it. Although in the heat of combat its possible the Battalion pilots didn't think to use it much. I'm kicking myself now that I check and realize I did not record the testing I did where SnowGlobe was dueling the Crystal Titan, each firing that prismatic blast power at the other.
And for the record, this is how my character became Prometheus: benpc Model_Prometheus_NoRing
And on an alternate account, I became RulaCole (aka RulaWade): benpc Rularuu_RulaWade
And what power is RulaCole using to make it look like he's doing something important? Its the teleport power that Dominatrix uses during the Magisterium trial to teleport away. Its purple and swirly and looks like something interesting is about to happen, and curiously it has a fairly fast recharge for a power designed to perform a special visual effect mostly.
Those model names, by the way, work in demorecords, which is how I created the illustrated panels that are at the start of each part of the story. The game gives developers two ways to become something else. They can "benpc" which will change their *appearance* into the appearance of a non-combat model. Or they can "becritter" which will not only change their appearance but also grant them the powers of that NPC. "becritter PraetorianWarworksEndGame_Warworks_Goliath_War_Walker" is all kinds of fun. I would also not be surprised to find that macro on the power tray of a certain Zity of Heroes community manager.
And that's the basics of creating the Battalion and some other housekeeping for the NPCs. Next time, I'll probably talk a little about how the story and the event evolved in lock step. I tried to make things an integrated whole, which was interesting because I was not working alone: I had other players offering (very good) suggestions which I then had to determine if they made sense for the story, or if the story could be altered to make sense for them, or if they were super cool but we just couldn't accommodate them.
Like, for example, if a giant Rikti mothership swooped in and hovered over the players.