Categories
Uncategorized

Space Empires 5 is boring so far

I literally raced out the door to buy Space Empires 5, as it has always been a favorite series of mine. But so far I’ve played all day and am feeling frustrated and annoyed rather than wanting to play more. I think this is in large part due to the interface, which doesn’t give you the information you need when you need it. So you have to click all over the place and try to keep track of everything in your head – closer to programming than playing a game.

A few annoyances:

If you have a fleet of ships and one ship is damaged, the entire fleet moves at the rate of the damaged ship. There is no way to tell which ships in a fleet are damaged except by clicking on them, looking at the details, and hitting back, for every single ship. Keyboard scrolling isn’t supported so it’s very slow and painstaking.

When you colonize a new planet, you pick what type of planet to treat it as (research, mining). But you cannot see the rest of the sector from that screen, so unless you remember you have to pick the wrong thing, remember the name of the planet, go back, go through 2 menus, and change it.

There is no way to get a list of what planets are producing what, or which planets are not producing anything.

Your view of the tech tree is limited only to what you currently have. You have to right click to bring up a new menu to see what the item is – very annoying compared to other games where I can just use the keyboard and scroll down a menu. You can see the NAMES of the things researching a tech will give you next, but not what those things actually are. You cannot see any farther into the tech tree than that either, so if you for example wanted shields, unless you already knew how to get there it’s just a matter of luck.

When you design ground troops, there is no way that I can see to select them, modify them, or remove old designs, the same way you can when you design ships.

There is no auto-explore feature. There is an explore button, but all it does is fly to the nearest unvisited sector. It won’t explore the map for you.

The use of 3D was eye-candy and actually hurt the game. Now I can’t see the whole sector at once unless I scroll way out, in which case the icons obscure the map. They used 3D textures for the text as well, so when I scroll way out I can’t read the text anymore.

A few other, non-interface related complaints:

As far as I’ve seen, there are no random encounters or special events so every sector is pretty much the same as every other sector, just with more or fewer planets.

The game is too easy, or at least it is on quick-start. The first time through, skipping the tutorial I was wiping out another race without even trying.

Space Empires used to be the best if you could get past the lack of graphics. But honestly, Galactic Civilizations is a lot better now from what I’ve seen over the course of playing all day today.

Categories
Uncategorized

Hard time finding even decent applicants

In order to interview with me you have to complete the following laborous and difficult prescreening steps:
1. Click on a button to apply
2. Reply to a form letter asking 9 questions such as “Do you have a high speed internet connection?”
3. Setup an interview time with me, solving the difficult problem of converting time zones ( although I even tell the canidate what the time zone difference is in step 2).
4. Show up

The trials must be difficult indeed, considering that of about 800 applicants, only 6 so far have gotten to step 4. The only ones I’ve rejected out of hand are those that reply to my form letter with an unmodified copy of the same resume they sent in the first place (and no other information), or that ask a ridiculous salary requirement (the new record is $200K ). It doesn’t happen that often, maybe 1 out of 40 applications.

Keep in mind I’ve lowered my bar massively. According to my normal standards, of those 800 applicants, maybe 799 of them I would have normally just deleted immediately.

So going onto the interview, it’s really hard to tell who is qualified and who is not. Sometimes they surprise me with what they know. For example, I think every canidate I’ve asked so far knows the formula for the dot product of two vectors. It could be they are just looking it up online. There’s no way to tell unfortunately since I’m doing instant messenger interviews right now.

They also surprise me with what they don’t know, or cannot answer. One of my interview questions is “Please give me an example of a difficult problem you solved at school or your current job, that demonstrates to me your programming ability.” If you had asked me that back when I first graduated, I could have spoken for hours. I would have told you how I implemented my own set of data structures, including the difficult B+ tree. I could have told you how I wrote a networked game demo in my spare time, before graduating, so I could have something to show to potential employers when I did graduate. I could have told you how I was so fast in my programming class in high school, I had nothing to do so wrote my own game in my spare time, which became so popular in class the teacher forbid us playing it anymore.

The responses I usually have gotten so far is something along the lines of “My job description is to write foozle for platform fizzle” but with broken, misspelled english that took 30 seconds to get a 5 word response to. So I always wind up asking again “That’s fine, but that’s not what I asked. What I asked is…” Sometimes I wonder if it’s them or if they just don’t understand my English.

Another one is “Please describe some data structures to me, and give me as much information as you know.” The response, a minute later will be “List, array, queue, tree” but misspelled. I sit there… and sit there… and eventually ask “Is that your complete answer?” When pressed, they seem to eventually give me the information I want. I’m not sure what the problem is. Maybe they are looking it up online? But if they were, why would it be misspelled?

On the other hand, if I ask something like “What does the friend keyword do in C++” they usually give a pretty good answer right away, even better than I would have thought of. I think it’s something they memorize. Unless they are looking that up online too.

Maybe I should just stick to phone interviews.

Categories
Uncategorized

At least he aims high

[Email Interview excerpt. In Question 1 I ask the applicant’s yearly salary requirement]

[Insane Indian] wrote:
> Respected Sir,
> answers of ur questions.
> 1. I wrote preveciously 70000-120000 Us $ P.a.
> 2. yes i have good internet coonnection but not for whole day.
> 3. i have personnel computer & i have visual studio6.
> 4. thuis is my personnel.
> 5. igive myself 4out of 5.
> 6. yes ican.
> 7. yes i can.
> 8. little bit tough but i try to manage.
> 9. no.

[My reply follows]

I’m sorry but I have to ask, are you serious? You are applying to a job, not the lottery. According to your resume you have no professional experience, no hobbyist experience, no qualifications, you couldn’t follow simple instructions in the job descriptions, you have no code sample, and you want $70,000 to $120,000 in US dollars? Whatever your teacher told you was wrong, maybe when you were taking notes you accidentally wrote an extra 0. With what you’ve already shown me you’d never be hired for any price. But lets ignore for the moment your bad spelling and grammar, total lack of qualifications, and disregard for the job post. A junior programmer in the US 95% of the time STILL wouldn’t be able to find a job in the game industry at all. If they did, they can expect between $40,000 to $60,000. Since you are not in the US, but India, you’re looking at between $5000 and $10,000. Considering that this is a telecommuting position, you can knock another 20%.

Consider this one of life’s hard lessons. You can thank me later.

Categories
Uncategorized

Resumes part 2

What the hell is with Indian job applicants? Out of about 300 resumes so far (of which 0 included the information I demanded) I replied to all 300 of them. In every case I used the exact same form letter, because in every case they didn’t include the required information.

Of the 300 replies I sent out, I got about 30 responses. I have to wonder what is seriously the problem here.

A. You apply to a job. Admittedly a job post you didn’t read, but lets assume you are looking for a job since you bothered clicking the mouse to apply to one.
B. The company replies a few hours later asking for some information your resume was missing.

Do you:

1. Ignore the company
2. Send the required information?

Well in the case of these Indian resume spammers, 90% of the time it’s 1. Ignore the company.

Now I don’t particularly care that they ignore me. So much the better that I don’t get some idiot that can’t 1. Read. 2. Write. 3. Follow simple instructions. But I’m really just curious. What is it about my response that causes them not to reply? I’m not asking for sexual favors here. I’m asking for

1. Salary requirements
2. Availability
3. Contact information

What job wouldn’t need this information? A few geniuses replied “Negotiable” or “Per your standards” to the salary requirements. OK, great! I’d like to pay $1 a year so how’s that? Not good enough? Well don’t waste my time and don’t try to get me to name some outrageous sum and state your salary requirements when directly asked.

There’s another word that isn’t in the Indian english vocabulary. “Must”

Lets look up “Must” in the dictionary:

1 a : be commanded or requested to

To be commanded to. Such as “You *** MUST *** include salary requirements and sample code.” It doesn’t mean “You can include this if you want to” or “You can reply to other parts of the form, ignoring these parts” Yet this is exactly what I get, where some doofus will reply, answering contact info but leaving those fields blank. Why even waste my time?

Another thing. I thought Indians were hardworking. A few applicants even got so far for me to bother sending a sample test, with questions like “What is a Vector” Yet I haven’t gotten a single answer back to the sample test. Is this hardworking? It seems like the height of laziness and apathy to me. Personally, I’d be excited if I applied to a company and they sent me a sample test. It means they are intersted enough to bother grading my work.

It’s just wierd. Sometimes I feel like I’m in an episode of the Twilight Zone.

Categories
Uncategorized

Resumes from the other side

This morning I posted a job on Naukri.com, a general job site for Indians. It is $50 for the most expensive single job post, which is still 1/7th the price of posting on Gamasutra. I always hear that Indians work harder and cheaper than Americans so it was worth a shot.

When I got home, I saw 88 replies in my job inbox. Great! I thought, until I started reading them. The way it worked out was that my job post has an “Apply Now” button that allows a user of that site to send you their resume. Which is utterly worthless. As far as I can tell these guys just went down every job on the site, rapidly clicking “Apply Now” without even reading the job posting.

I have specific instructions in my job post on what you must include to apply to the job, and not a single spammed resume included all the information I asked for. Normally I’d just delete those resumes but if I did that I’d have no resumes at all. So I just spammed back a form letter indicating that if they want to reply to the job they need to include the information I asked for.

This has given me insight into something I knew, but didn’t consider to this extent before. Spamming your resume to employers gives the impression that the potential employee doesn’t care about your job. Nobody wants to hire a potential employee who doesn’t care about your company or what the job actually entails. Conversely, if I were to actually get a resume that shows the applicant read the job posting and is actually applying to my job they’d already have a foot up over all the other canidates.

What this does is to push the work from the employee (applying to jobs they are qualified for and including the information the company wants) to the employer (to filter through spammed resumes to see who actually has this information). Well sorry, but do I really want to hire someone too lazy to read a job description at a company they are asking to pay them?

Some choice quotes, from the few applicants that actually even bothered to write a generic cover letter:

“Currently i am looking for job in a company like yours where can i explore my potential.”
Um, thanks. A company like mine, and every other company on earth.

“I am a BE in Computer Seience.I have enclosed my Curriculum Vitae for your consideration. ”
But obviously not a degree in spelling.

“I have attached my CV for your kind perusal. Please do the necessary. ”
If by necessary you mean hit the delete key, yes I will.

“I came to know about u r company through website.
I send my resume by attachment. And I request u to go through my resume.
And I hope having response from u. ”

I will reply to u as soon as u learn to write English.

I will hire the first person to reply to my post who actually read it!

* Update *

So I got some replies to my form letter demanding more information.

Thanks for your interest in working for Jenkins Software.

As per the job description, you *** MUST *** include:
1. Your resume
2. Contact information
3. A link to self-contained sample code
4. Your salary requirements in US dollars
5. Your work availability in Pacific Standard Time

If your cover letter does not include these five items your application will be not be read and you will not be considered further.

One reply was a blank email with a spam image link.
One reply was the exact form letter the guy sent me in the first place.
Three replies didn’t include salary requirements.
No replies gave the information I asked for.

Is this a language thing? What part of my reply is not clear?

On top of that, a couple of replies with salary information asked for nearly the same wage I pay in the US. From guys who are completely unqualified, with no experience at all in any industry, much less the game industry. What the hell? I wouldn’t even pay a guy in the US what they are asking for much less hire them to begin with.

I’m getting the feeling this was a waste of time.

Categories
Game Development

Performance based bonuses

One problem with a business that hires telecommuter is that telecommuters are harder to keep motivated and working. It’s harder to tell if someone is working and an instant message isn’t as big of a motivator as the boss coming by and giving you a pat on the shoulder. To be clear, I’m not one of those kind of bosses to stand over your shoulder and watch you work. If you have nothing to do, hey go kick back. If you aren’t in the mood to program and want to take a couple of days of rest, please do it. If you work in crunch, 7 days a week, for 3 months and want to take a week or even two to play games you deserve it (I did this myself at my first job). What I do want to avoid is the guy who get paid on Friday so routinely works on Thursday and Friday and no other days. Or the guy who works one month out of a 9 month project (this also happened at my first job).

You can avoid much of this problem with due diligence. I believe that bosses should stop by the worker’s desk every day and ask “How are things coming along? Are there any questions I can answer? Any problems I can help you solve?” Speaking from personal experience, this is not seen as micromanagement but as a lead helping you do your job.

You can also avoid the problem by hiring self-motivated people to begin with. The problem I described is far less prevalent among educated professionals but all people need a boost from time to time to keep them going in the right direction.

My business owner friend suggested using performance based bonuses every paycheck. Paying either weekly or bi-weekly, you monitor the employees performance on a day to day basis. Based on their performance, quality, and drive that day you give them some kind of rating. When it’s time to pay, you say something like “You hit these three goals and wowed me on this feature. I’m going to throw in a bonus of X dollars on top of your paycheck.” The important thing is not to do this so often that the employee takes it for granted (at which point it’s a negative not to give a bonus rather than a positive to give one). It’s also important to avoid the appearance of unfairness or favoritism. So it should be clearly cause and effect. “I scheduled you to do X in 5 days, you did it in 3 days. That’s really impressive. I’m going to throw in a bonus in your next paycheck. While I won’t give you a bonus every time you beat a deadline, I am this time and as long as you work this hard the rewards will keep coming.”

Similarly, my friend suggested starting new employees at a slightly lower pay for X months. The problem with most people is that their enthusiasm wanes after a month. I’ve seen this when I managed reviewers who do a great job on their first review, an OK job on their second, and simply not do the third. A new hire costs you a lot more than an existing hire because of training. So it’s fair that they make less at first and fair that they make more after they have proven they can work over the long haul. It’s a way to keep costs down from bad hires as well as is an incentive to work harder. It’s similar to a regular rate of promotion, except it’s performance based and shouldn’t be expected.

Categories
Game Development

Quality = numRevisions / iterationSpeed;

One problem I’ve always had at my current job is trying to get work done on the poor hardware made available to us. On a regular basis I encounter:

  • 10 seconds lockups to open a new file
  • Compiler crashes
  • 15 seconds to open firefox
  • 1 FPS in debug
  • 10-30 seconds to bring up the visual assist file index
  • 5-12 minute compiles, even with Incredibuild
  • Something like 50 KBPS on our shared internet connection

The problem is twofold: First, you lose the time actually spent waiting. Second, because it’s so distracting you may lose your train of thought and go read The Onion instead. Because it takes so much longer to make changes, you have fewer iterations of the code total. This discourages experimentation, reducing the final quality of the code.

Lets look at the same problem for artists. You ever notice how old games are often more fun than their modern equivalents, despite the old games having a minuscule fraction of the budget of their modern counterparts. I believe this is because of the large iteration time involved with changing assets and code in modern games.

Suppose in my 3D level I have a small town. It turns out the town is the funnest part of the level, with places to hide and more strategy than the surrounding forest. I want to add 4 more towns. In a modern 3D game this is a HUGE amount of work. Man-months by several level designers. In old games, it may be as simple as clicking on the town tile, setting a couple of properties, and trying it out. Suppose it turns out now that 5 towns total wasn’t fun – we should have had 2 instead. Again, with the old game it’s a 5 minute job to adjust the map. In the new game this takes several weeks (have to place trees in place of the old town). Plus, due to the sunk cost fallacy, we may leave the towns in anyway just because it was so much work to put it in in the first place. Maybe rather than removing them the artists just tweak them a bit.

This is why in shooters you don’t see fun levels like in the original Doom anymore. In the original editor I could move a wall in a couple of minutes. In a modern level, this takes 10 times as long.

Fortunately, I think there are ways to mitigate this problem.

First, there is absolutely no excuse for not always working on top-of-the-line equipment. Suppose an employee loses 10 minutes a day due to hardware. This is roughly 40 hours a year, or one week’s pay. At least at my wage this is the cost of the absolute best computer on the market. I currently lose about 2 hours a day due to hardware.

Artists should create levels using only the default Maya objects. Trees should be pillars. Mountains should be triangles. Walls should be cubes. The game should be playable and fun before ever creating a detailed asset. Some final work can be done of course. For example, the character’s model is far less likely to change than a level layout. So it’s not like you have idle artists. Just keep the things that will probably change flexible.

Gameplay programmers should either have a way to very quickly change and link code (such as linking with DLLs) or else use debuggable scripts reloadable at runtime. If using code, it is critical to have a mechanism to change run-time values at run-time, such as debug command console.

Anyway, as I’m soon going into business for myself I’m going to put these ideas into practice.

Categories
Game Development

How much to manage remote contractors?

If I’m lucky I’ll soon have enough work with RakNet that I wouldn’t be able to handle the workload by myself anymore. That means I’ll be in the hiring market for a bright graduate, someone talented, trainable, and willing to work cheap, at least until business is at a point where I can afford a raise.

Anyway, I’ve been debating internally how many checks and structure to give to a remote employee.

At one end, there’s my own first job out of college as a telecommuter. There was essentially no structure. I didn’t have to write reports. I had a very high level task (write the networking) but never had to write design documents or anything like that. I essentially decided on my own tasks, when I wanted to do them. I even used my own data structures and such in my own code, even though the code base already had data structures.

At the other end I could impose structure similar to my job now. Daily reports. Meetings. When you get a major task you are generally expected to write a design document first. What you work on is given to you in a schedule. (This is still very lax compared to some other places.)

The problem with the first approach is that you need someone who is very good and self-motivated. It would be of no benefit to me to hire someone who made a mess of things and I had to go back and have them redo it, or do it myself. In both cases neither of us will be happy. Similarly, without daily interaction and deadline pressures it’s easy to just have your telecommuter just do nothing, which is wasted money. However, when it works it works great. I considered that the best job in the world, except for the pay.

The problem with the second approach is that it’s essentially a waste of time – all that structure is designed to keep bad programmers from doing bad things and not working. At best it’s annoying to a good programmer and not motivating at all to work on something you don’t want to. You bleed programmers who think the grass is greener on the other side. However, since you always know what your people are working on you don’t get slackers who do as little as possible for years (which also happened at my first job).

This may change with time and experience, but I think the best approach may be to hire the best and trust them to do their best. Guide, rather than force, people to your goals through proper motivations such as giving them options on what to work on (and all the options are useful to you). Explaining why things need to be done rather than telling them to do it. Giving them freedom to make important decisions, both in programming and in game design. I think intrinsic motivations (the desire to do a good job) are more important than extrinsic motivations (money, bonuses) and it’s important to motivate people using the former, while still having the latter as a bonus for a job-well done.

Categories
Uncategorized

The perfect scripting language, part 2

The author of Angel Script was kind enough to reply to me about his library:

Hi Kevin,

AngelScript is not an interpreting scripting engine, but its built-in compiler is fast and suitable for (re)loading and compilation of scripts at runtime. The script language is similar to C++, though not 100% compatible. It is also possible to compile the script code and save the precompiled bytecode to disk for later use, if you do not want to distribute your script sources.

You mentioned in your post that the script will be able to call into the engine but not vice versa. This is not quite true, the engine obviously has to know how to make a call for it to be able to do it, but you could define interfaces or callbacks that the script can connect to, which the engine then uses to call into the scripts with. This is of course not an exclusive feature of AngelScript.

The main advantage of AngelScript over other scripting languages is that it is statically typed, just like C++, and that it can in most cases interact directly with the C++ application without the need for wrapper functions. This makes it particularly easy to embed in applications with an efficient interface. I cannot guarantee that AngelScript is the fastest scripting library, but it is for sure one of the fastest available.

I suggest you give it a try, to see if you like it and if it suits your needs.

Regards,
Andreas

1. It is good that you can reload at runtime.
2. To me it’s roughly equivalent to releasing script and releasing C++ game code for modders. On one hand, with script you don’t need to think about which interfaces you expose, and making nice header files for those interfaces. On the other hand, if you plan for this from the start it’s not really extra work and you get the use of a debugger.
3. Regarding script compilation, I think the best solution is to check the file dates of the script and the compiled script. When your game runs, compile the scripts that are out of date. If you change scripts at runtime and reload them, always compile them.
4. There is no debugger for AngelScript that I know of. Perhaps the script code execution module throws an exception? I would refrain from writing too much in script without a debugger. This is not a big deal from me, since I think it’s always a bad idea to write too much in script. Script should only be for things which change very frequently during development, such as gameplay specific numbers or algorithms. The Unreal Engine is an example of where script was overused pointlessly.
5. The author points out that Angel Script isn’t directly equivalent to C. With the use of defines (there is a preprocessor add-on) and refraining from using non-equivalent language semantics I see no reason why one would not be able to both script and compile the same code. I’d have to look at it in more detail to know for sure.

I can see the use for this for something like a map file for an RPG. When the character talks to NPC A, and selects option B, then trigger C.

Categories
Uncategorized

The perfect scripting language

In general I don’t like scripting languages. But you have to admit it’s much faster to iterate changes in a scripting language than C++. Here’s a simplified list of pros and cons:

Pros of C/C++:
Fast execution
Compiler helps you find errors
Full access to the engine.

Pros of Scripting:
Fast iteration
Easy for users to modify

Conversely:

Cons of C++:
Slow iteration
Hard for users to modify

Cons of scripting:
Slow execution
Error prone
Access limited to exposed interfaces

It’s true that any language which can be interpreted can be compiled, and any language which can be compiled can be interpreted. So how’s this for an idea:
Your scripting language is C or C++ (why invent a new language?) which is interpreted and has full access to all your other code. Obviously your script can only call into your engine, and not vice-versa, but this is the only limitation.

Since it’s a script, it is valid and reasonable to hardcode numbers into the script.. You can tweak these numbers and change the script while the game is running to play around with settings.

When you are ready to ship a build, switch your flag to compile rather than interpret the scripts. Or, if you wish user mods, just leave it interpreted.

This is one use of a script system that makes sense to me and I’d fully support in a game project.

Note: there is a library called AngelScript but I’m not sure if it’s capable of doing everything I outlined here. If so, let me know!