The Other Bad Practices Found in RGSS Scripts
We all should know by now how to declare an if or unless conditional statement. Yet, there are people out there that do weird stuff while doing so. In some cases the culprit was the RMXP's default code. For those guys that entered the scene after RMVX or RMVX Ace came out, I have no excuse.
Code:
if variable == true
print "It's true!"
end
if variable == false
print "It isn't true..."
end
This is one of the most extreme cases seen so far.
For some reason, the guy checks the same variable twice, once for a truthy value and another for its opposite value. It is terrible!
Just like in many other languages, there are other ways to check the same value appropiately, without repeating oneself.
Code:
if variable == true
print "It's true!"
elsif variable == false
print "It isn't true..."
end
There we can see how to define a second condition using elsif instead. It certainly means "else if" there.
If we were checking for totally different values, that solution would be fine. Even so, we are only checking what is its actual boolean value and under such circumstance, there is an easier way to deal with it.
Code:
if variable == true
print "It's true!"
else
print "It isn't true..."
end
Yes guys! That is all you needed to do from the very beginning!
But wait! There is more you need to learn here about those statements!
Code:
if is_variable
print "It's true!"
else
print "It isn't true..."
end
It is quite interesting how the code still works, don't you think?
But why does it work here?
There is an easy explanation. In Ruby, unlike C or C++, all objects return a truthy value if they are not equal to nil of the NilClass or false for obvious reasons. In C it would be quite common to see something like the following code:
Code:
if (result) {
return "You were successful!";
} else {
return "You failed!";
}
The negative way to declare that kind of statement would be:
Code:
if (!state) {
return "LoadError: Failed to load script.";
}
A ! bang, yes, a ! bang there means negative value or opposite value or simply false.
And guess what? That does exist in Ruby as well!
Code:
if !is_done
print "In the works!"
else
print "Done!"
end
Of course, newcomers might need to include the equality operator and the true value like this == true but in the professional world that is not used at all. The only reason why you would ever, if ever, use it would be to test if an object is equal to true or false or nil in a threefold check. And this is extremely uncommon, guys!
Toggling Switches
So how can we apply that knowledge to changing the boolean value of a Game Switch?
Just use the following code:
Code:
$game_switches[1] = !$game_switches[1]
A Curious But Nonsensical Idea
Some time ago somebody wrote me a message telling me how dangerous it would be to do the following while using modules and classes.
Code:
module Some
ONEISTHERE = "Someone is there!"
class Thing
include Some
end
end
OK, I got to say that it is idiotic per se, still, this person wanted me to warn you about it. The reasoning behind it was that it would create a terrible loop that should be avoided at all costs. Interesting conclusion.
Let us test this theory, guys!
Nope, as we can see in the picture above, that is CERTAINLY NOT the case there!
What has happened was that we simply created a "new link" to the Constants already declared in the module above.
The only thing we have achieved was to come up with a redundant way to get to the same old Constant.
It was totally unnecessary for sure.
Happy Bug Causing Nights!
"For God has not destined us for wrath, but for obtaining salvation through our Lord Jesus Christ," 1 Thessalonians 5:9
Maranatha!
The Internet might be either your friend or enemy. It just depends on whether or not she has a bad hair day.
My Original Stories (available in English and Spanish)
List of Compiled Binary Executables I have published...
HiddenChest & Roole
Give me a free copy of your completed game if you include at least 3 of my scripts!
Just some scripts I've already published on the board...
KyoGemBoost XP VX & ACE, RandomEnkounters XP, KSkillShop XP, Kolloseum States XP, KEvents XP, KScenario XP & Gosu, KyoPrizeShop XP Mangostan, Kuests XP, KyoDiscounts XP VX, ACE & MV, KChest XP VX & ACE 2016, KTelePort XP, KSkillMax XP & VX & ACE, Gem Roulette XP VX & VX Ace, KRespawnPoint XP, VX & VX Ace, GiveAway XP VX & ACE, Klearance XP VX & ACE, KUnits XP VX, ACE & Gosu 2017, KLevel XP, KRumors XP & ACE, KMonsterPals XP VX & ACE, KStatsRefill XP VX & ACE, KLotto XP VX & ACE, KItemDesc XP & VX, KPocket XP & VX, OpenChest XP VX & ACE
Maranatha!
The Internet might be either your friend or enemy. It just depends on whether or not she has a bad hair day.
My Original Stories (available in English and Spanish)
List of Compiled Binary Executables I have published...
HiddenChest & Roole
Give me a free copy of your completed game if you include at least 3 of my scripts!
Just some scripts I've already published on the board...
KyoGemBoost XP VX & ACE, RandomEnkounters XP, KSkillShop XP, Kolloseum States XP, KEvents XP, KScenario XP & Gosu, KyoPrizeShop XP Mangostan, Kuests XP, KyoDiscounts XP VX, ACE & MV, KChest XP VX & ACE 2016, KTelePort XP, KSkillMax XP & VX & ACE, Gem Roulette XP VX & VX Ace, KRespawnPoint XP, VX & VX Ace, GiveAway XP VX & ACE, Klearance XP VX & ACE, KUnits XP VX, ACE & Gosu 2017, KLevel XP, KRumors XP & ACE, KMonsterPals XP VX & ACE, KStatsRefill XP VX & ACE, KLotto XP VX & ACE, KItemDesc XP & VX, KPocket XP & VX, OpenChest XP VX & ACE