My City of Heroes Story

This is a post that is preserved from the Homecoming forums.


My City of Heroes Story

I won’t go through my whole history, but I’ll sum up. I was a Navy brat that never had a real home, who was raised as a latchkey kid. My parents weren’t a father and mother (one I never knew, and the other was largely absent), but rather Mr. Rogers and Lady Aberlin. I learned what was right and wrong from the Teenage Mutant Ninja Turtles, Sailor Moon, the Toxic Crusaders, and many, many others. From those “weird” shows, I learned that this “weird” kid wasn’t so weird, and indeed, could become something extraordinary. The amazing powers were cool, but the things that stuck with me (even though these weren’t traditional “superheroes”) were the concepts of compassion, justice, Bushido, honor. I learned that the strong should care for the weak, that those with power to do good, MUST. I learned from my media morality messengers that people can still do great things in the world, even when they are “weird” or unacceptable to the masses. I learned that I was not alone.

Now, with that out of the way, how does this relate to City of Heroes? Well, through some miracle of life, I managed to get through college and graduated with a degree.

In Computer Information Systems.

Immediately after Y2K, when thousands of developers were laid off since their work was no longer necessary.

In a tri-college town where dozens of students were graduating each year with degrees in my same field.

I had also screwed myself by not specializing, instead taking a little bit of networking, a little bit of programming, a little bit of electronic engineering. I had made myself a “jack of all trades, master of none”, and had screwed myself to every job because there was always someone else that was more of an expert in that area than I was. So, I delivered pizzas and worked in the Geek Squad in a Best Buy (with a BACHELOR’S in CIS). It went this way for over a year with no hope in sight of jumping into the tech career that I wanted. A life with no meaning. I got depressed. I got bored and lonely, as I was no longer surrounded by fellow students that were forced to interact with me. I got dark and considered ending my failure of a life.

Then, like a ray of sunshine into the darkness, came City of Heroes. It was an escape. It was a purpose. It gave me the chance to be a HERO! To emulate (at least virtually), all those weirdo fictional heroes that I had looked up to when I was a kid. I took me away from my depressing life and gave me hope of better things to come. But it wasn’t just the game. This world was filled with an entire COMMUNITY of people who, just like me, were inspired by many of the same media stories that I was. They, too, learned the same lessons of right and wrong, justice and compassion, that I had learned from books, movies, and TV shows. And they weren’t afraid to live out those fantasies, those morality plays, in a digital world where they could be the heroes that they always wanted to be. I had found, not just an escape from the drudgery of a depressing life, but a HOME. A place where I could be myself and be the best me that I could be. The me that I couldn’t be in the real world.

The City of Heroes community, and especially forum, helped me navigate a rough real-life road. When I got prematurely married, divorced, moved away from everyone and everything that I knew, and started a new life hundreds of miles away from it all. When I got to my new physical home and discovered that I didn’t KNOW how to relate to people outside of preconceived roles and forced situations, the City of Heroes community was there for me, offering comfort and support. When I went to counseling to try to determine the cause of my “issues”, and was diagnosed with high functioning autism, the City of Heroes community was still there for me, showing me that what matters isn’t who you ARE, but who you choose to BE.

I’ve spent the better part of the last decade working through my issues, learning how to pass for “normal” amongst neurotypicals, but I always relied on the City of Heroes community as my crutch, my way to get through the rough times. Their support helped me to finally get my first job in the tech industry a decade after my graduation, find the love of my life who accepts me for who I am, and start my own family. And then, after all the community had given me, it then disappeared, evaporated into the wind. The community was taken from me, from us, unceremoniously. Thankfully, at the time, I had largely moved on into the “real world”, but a part of me always yearned for a return back to a world of heroes and villains, where I had a chance to be something greater than I am, and where there were old names and “faces” that I knew as friends. I got by my loss a bit with a small subset of the greater CoH Community, the Paragon Unleashed forums that I had started years ago, but it was a pale echo of the previous, vibrant, community. Good people there, by the way.

And then… this happened. Leandro’s “secret server” got revealed. But that was just the spark that re-ignited the fire. With his generous and brave release of the source code, the community seemingly came back from the dead, and with full force. I had my digital home back again. And, more importantly, I now have another chance to give back to the community, to the people, that had already given me so much.

So, here I am, force fields in one hand and lightning in the other, ready to step up and provide whatever I can, so that the other “weird” kids like I used to be, have a chance to find their own purpose, their own meaning, and their own home. It was taken from us once before. Never again. And that’s why whenever I see either a new, or old face, appear on these forums, my answer will always be the same: “Welcome Home”.

So, thank you. Thank you to the amazing and fantastic community of heroes that helped me through my young adult life and saved me time and time again from both myself and the harsh, cruel world. Thank you to the dozens of volunteers, the coders and GMs, community reps and good old regular forum posters that fill this reinvigorated community with a sense of life, a sense of hope, and a sense of purpose. To everyone here, I say thank you all. And, once again…

Welcome Home.

The Standard Code Rant

This is a post that I’m “preserving” from the CoH Homecoming forums, because as history has taught us, nothing is forever, unless it’s constantly maintained. And since I have no control over what happens to the Homecoming forums, I’m going to preserve it here, because I think it’s worth preserving.

UqE1SsX.jpg

This was known on the original forums as The Standard Code Rant. I didn’t make it, someone else did. (Who? Anyone know? I’d love to talk to this genius!) Why do I do this? Why do I feel it’s important enough to keep doing it? Read on if you’d like to know.

I am a “professional” programmer by trade. Someone pays me money to type on my little keyboard in my little cubicle for 8+ hours a day. This is what I *DO*. Installed prominently in my cubicle, I have a piece of paper with the following text:

Westley’s Maxims

[*]Virtually ANYTHING is possible code, given enough time and resources.

[*]If you don’t know the existing code, or if a task has never been done before, there’s no way to accurately gauge how difficult it will be, until it is attempted.

[*]If the ONLY reason why you’re doing something a certain way is “because it’s always been done that way”, that is *NOT* an acceptable reason to keep doing it that way.

Why do I have this posted in my cubicle?

So that any time someone comes and asks me “can you do X”, I can point to #1.

So that any time someone suggests that something “should be easy, right?”, I can point to #2.

And so that any time I ask someone why they’re doing something “that way”, and they say “because it’s always been done that way”, I can point to #3.

It saves me a LOT of breath. The Standard Code Rant is essentially #2 stated in a more humorous and visual form. I don’t post it to be a COMPLETE dick, maybe just a partial dick, but no, I post it whenever I see “X should be easy” to raise AWARENESS that unless you’ve actually done something similar yourself, with THIS code base… you’re making a HUGE and gross assumption about that process.

Everything that you see on your computer screen is the result of literally MILLIONS of programming man(or woman)-hours of code work to make it appear on your screen, and make it useable to you. The modern programming languages that we have access to today are the results of MILLIONS more hours of programming work that had gone before us. Everything that I make or work on was built on the backs of giants, so that I don’t have to sit on my computer and figure out whether I should code my solution as “00010101” or as ” “00010110”. And thank GOD for that. I thank the tireless efforts of thousands or hundreds of thousands of programmers that came before me and laid the groundwork so that I can move forward and keep building more on top of what they’ve already given me.

Something that “sounds” easy to you, might be take a programmer anywhere from five minutes, to five months to accomplish, or anywhere in between. For example, below is a “Hello World” app that has a button that when you click on it, shows a message box that says “Hello World!”:

AUTFE0W.png

And below is the minimal required code to make that simple thing happen:





using System;
using System.Windows.Forms;

namespace Hello_World
{
    static class Program
    {
        /// <summary>
        /// The main entry point for the application.
        /// </summary>
        [sTAThread]
        static void Main()
        {
            Application.EnableVisualStyles();
            Application.SetCompatibleTextRenderingDefault(false);
            Application.Run(new Form1());
        }
    }
}

using System;
using System.Windows.Forms;

namespace Hello_World
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            MessageBox.Show(“Hello World!”);
        }
    }
}

Now, depending on your current level of computer know-how, that might all seem overwhelming and like Greek to you, or you might just be saying to yourself “is that it? so what?”. Well those saying “so what” aren’t realizing that for MY code to be even THAT simple, THOUSANDS of other lines of code behind the scenes had to be created by programmers that came before me that created all of the objects, methods, and other tools that I was able to use to make that program in the two minutes that it took me to throw it together. Someone had to MAKE the MessageBox class, someone had to MAKE the IDE (Integrated Development Environment) that allowed me to just plop an object down on a form in a GUI environment instead of making everything from scratch. NONE of this exists without someone going through the work and MAKING it exist. The wizards that came before me created the digital world, the digital land, digital air, digital waters, so that I could then populate it with digital trees and birds. But NONE of this would exist, if someone didn’t go through the work of making that world to begin with. *I* certainly couldn’t have made that world, I don’t have the skills necessary.

Now, let’s bring this back to the City of Heroes world. When City of Heroes was created, it was created in the language of C. Not C#, Not C++, but just plain old “regular” C. It was created in 1972. There WAS no easy “IDE” to use, there WERE no graphical tools that existed so that idiots like myself could plop pretty objects down onto other pretty objects. Hell, GUIs didn’t really even exists as a programming CONCEPT until a year after that language was originally envisioned, and wouldn’t become common until the mid 80s.

Now, why Cryptic chose to use regular C in 2003/whenever, I have no idea. But the fact is that they DID choose to use it. And, until someone rewrites the whole engine in a modern programming language, we’re stuck making everything the “hard way”. For example, here’s a snippet of code from source that draws a SINGLE one of the “quick access” selector buttons onscreen for you to click to change your chat channel by using just one of those little “letter buttons” above the chat window:





int drawSelectorButton(int * xp, int y, int z, float scale, int clr, Entity * e, int tip, int info, char * text, char * smallTex, char * largeTex)
{
AtlasTex * tex;
int hit = 0;
int x = *xp;

if( e->pl->chatSendChannel == info )
{
tex = atlasLoadTexture( largeTex );
z += 1;
}
else
{
tex = atlasLoadTexture( smallTex );
}

BuildCBox( &chatTip[tip].bounds, x – tex->width*scale/2, y – tex->height*scale, scale*tex->width, scale*tex->height );
setToolTip( &chatTip[tip], &chatTip[tip].bounds, text, 0, MENU_GAME, WDW_CHAT_BOX );
if( D_MOUSEHIT == drawGenericButton( tex, x – tex->width*scale/2, y – tex->height*scale, z, scale, clr, CLR_WHITE, e->pl->chatSendChannel != info ) )
{
e->pl->chatSendChannel = info;
sendChatChannel( e->pl->chatSendChannel, “” ); // won’t use buttons for user channels
hit = 1;
}

*xp += CHANNEL_SPACER*scale;

return hit;
}

And even THIS is just a SINGLE method that makes use of dozens of other variables and methods that are defined elsewhere in code. Just to DRAW one single teeny tiny pretty button.

Are you starting to get the complexity here? No? Well, take a look at the “How It Fits Together” page from OuroDev, and notice that there are FIFTEEN different unique servers/programs that all work together in conjunction with each other to bring the game that you know and love to your screen, and EACH of those elements contain within them HUNDREDS of methods, objects, and variables that are made up themselves of THOUSANDS of lines of code.

I did at one point have a graphic that showed how all of these pieces fit together so that you could have a graphical representation of the complexity, but I seem to have lost that at this time. If I find it again, I’ll modify my post and stick it here for reference.

So, when I post that “Standard Code Rant”, I hope you can understand that it’s NOT just to troll, but rather to try to foster an understanding of our own ignorance of the process. Make suggestions, as the Standard Code Rant states, it’s fun to dream! Dream big! Go nuts in your imagination. But, unless you are intimitely familiar with the codebase itself, do NOT presume to suggest how “easy” a suggestion would be to implement.

For if you do, I will be there, and I will be memeing. ALL over your thread.

And I’ll be doing it with this now, The Updated Standard Code Rant:

pVih0a2.png