02 November 2011

Negative Thinking

I spent the past couple of days polishing the new silly quest, fine tuning the scripts for the quest NPC and chasing down a small speech bug (the NPC was not properly articulating which quest components she was referencing).  As I read through my script I felt something that I had never felt before: I felt ashamed of my script.  My script was just plain bad.  Although it worked well enough, it was poorly designed and the layout was just awful.  I completely Frankensteined the script together, and it was obvious.

To understand my displeasure is to understand some basic scripting logic: throughout a typical NPC quest script, comparisons are made:

if a player has the quest item
{
 then say some things
 and take the quest item
 and give a reward
}

otherwise
{
 tell the player that they do not possess the quest item
}
end

The problem with this format is that it's too (ahem) positive.  The script begins by making a comparison for a true condition, and if the comparison is true, then I do some positive stuff – otherwise the comparison is false, and I do the negative stuff.  This style becomes harder to read when there are multiple positive comparisons:

if the player is alive
{
  if the player has the quest item

  {
   if the player's gender is male
   {
    then say "Attaboy!"
   }
   otherwise the player's gender is female
   {
    then say "Attagal!"
   }
  then take the quest item
  give the reward
 }
 otherwise the player does not have the quest item
 {
  tell the player that they do not possess the quest item
 }
}
otherwise the player is dead
{
 look sympathetically at the player
}
end

While there's nothing wrong with the logic of this code (at least I hope so; I have not debugged it!), I find it rather difficult to read.  What I should have done is to design the script to make negative comparisons, and if the negative comparison is true, then do not make subsequent comparisons:

if the player is not alive
{
 look sympathetically at the player

 end
}

if the player does not have the quest item
{
  tell the player that they do not possess the quest item
 
end
}

if the player is not a female
{
 then say "Attaboy!"
}
otherwise
{
 say "Attagal!"
}
take the quest item
give the reward
end

The rewrite is easier to read in that it filters out any of the negative possibilities first; by first eliminating any "negative" conditions, then whatever conditions remains must be "positive".  If the player is not alive, then it does not matter if the player has the quest item: stop here and check no further.  If the player does not have the quest item, then the player's gender does not matter: stop here and check no further.

Who would have thought that negative thinking would have been so positive?

No comments:

Post a Comment