Save-Point
Element Tagging for Complex Effects by RPG Advocate - Printable Version

+- Save-Point (https://www.save-point.org)
+-- Forum: Games Development (https://www.save-point.org/forum-4.html)
+--- Forum: Tutorials (https://www.save-point.org/forum-19.html)
+--- Thread: Element Tagging for Complex Effects by RPG Advocate (/thread-2892.html)



Element Tagging for Complex Effects by RPG Advocate - DerVVulfman - 03-11-2009

Element Tagging for Complex Effects
by RPG Advocate
saved from Phylomortis.Com


Introduction
This tutorial will teach you how to streamline the process of creating weapons with complex effects so that the effect doesn't need to be coded in indivually for each weapon. Note that all the code samples are from class Game_Battler.

Here we go
Do you want to create a complex weapon effect that will be used by several weapons, but don't want to code in the effect for every single weapon? If so, this tutorial is for you. First, create an element with a descriptive name. For instance, in the picture at right, I've set up the elements for this tutorial. I want to make weapons that I can give the "Critical+10%" and/or "Critical+20%" properties at will. Now, we need to create some code to return the weapon's critical bonus to the attack resolution method. Code sample 1 illustrates this code.

----Elements----
001: Fire
002: Critical+10%
003: Critical+20%

In this case, I check to see if the attacker passed to the method is a Game_Actor object, since monsters can't use weapons. If it is a Game_Actor object, then I check to see whether the element IDs of the "special" elements are in the weapon's element set, and add the appropriate critical bonus.

Sample 1
CODE
def critical_bonus(attacker)
bonus = 0
unless attacker.is_a?(Game_Actor)
return 0
end
if attacker.element_set.include?(2)
bonus += 10
end
if attacker.element_set.include?(3)
bonus += 20
end
return bonus
end


That's not all we need to do, though. If the code change in Code Sample 2 isn't performed, the engine will count these elements when determining the elemental damage modifier for an attack. Therefore, we must delete the "special" element IDs from the element set array. The relevant lines are highlighted in red.

Sample 2
CODE
def elements_correct(element_set)
elements = element_set.clone
elements.delete(2)
elements.delete(3)

if elements == []
return 100
end
weakest = -100
for i in elements
weakest = [weakest, self.element_rate(i)].max
end
return weakest
end


Now, for this particular effect, I need to make it so that when someone attacks, their critical hit chance will rise if they have an appropriate weapon equipped. I go to the section of code shown in Code Sample 3, where critical hits are determined, and add the snippet of code shown in red. What you do in this step depends on what effect you're coding. You will need to have enough competence to figure out what needs to be done on your own, since I can't cover every situation.

CODE
def attack_effect(attacker)
[...]
self.damage *= elements_correct(attacker.element_set)
self.damage /= 100
if self.damage > 0
if rand(100) < 4 * attacker.dex / self.agi
+ critical_bonus(attacker)
self.damage *= 2
self.critical = true
end
if self.guarding?
self.damage /= 2
end
[...]
end



Element Tagging for Complex Effects by RPG Advocate - Charlie Fleed - 03-12-2009

I remember reading about this technique very long ago. I thought that it was very clever and I realized how much scripts could be used to go beyond the program's limits.
I would say that it was the beginning of me thinking like a scripter lol.