[965] | 1 | @XML_TOOLS Version "2.0"
|
---|
| 2 |
|
---|
| 3 | @CUSTOM_CODE
|
---|
| 4 | <code>
|
---|
| 5 | // |———————————————————————————————————Code best viewed at this width————————————————————————————————————————|
|
---|
| 6 |
|
---|
| 7 | // Load XML data
|
---|
| 8 | var myBuilder = new JSXMLBuilder();
|
---|
| 9 | myBuilder.load($xmlData);
|
---|
| 10 | var elements = myBuilder.elements[0];
|
---|
| 11 |
|
---|
| 12 | // If there are no attacks in this TRAM, ignore it
|
---|
| 13 | if (!elements.childElement("Animation").childElement("Attacks"))
|
---|
| 14 | return;
|
---|
| 15 |
|
---|
| 16 | // Gather all the necessary info
|
---|
| 17 | var particles = elements.childElement("Animation").childElement("Particles");
|
---|
| 18 | var attack = elements.childElement("Animation").childElement("Attacks").childElement("Attack");
|
---|
| 19 | var hit_start = attack.childElement("Start").text;
|
---|
| 20 | var hit_end = attack.childElement("End").text;
|
---|
| 21 | var array_bones = attack.childElement("Bones").text.split(" ");
|
---|
| 22 |
|
---|
| 23 | // Remove glass_break if it is already assigned to any bones, because it's probably not been assigned the
|
---|
| 24 | // way we want it to be
|
---|
| 25 | for (var i = 0; (particles.childElement(i)); i++)
|
---|
| 26 | {
|
---|
| 27 | var particle = particles.childElement(i);
|
---|
| 28 | if (particle.childElement("Name").text == "glass_break")
|
---|
| 29 | myBuilder.removeElement(particle.index);
|
---|
| 30 | }
|
---|
| 31 |
|
---|
| 32 | // Find the outermost bone of each type
|
---|
| 33 | // The "type" in bone_type[] refers to the extremity of the body to which a bone belongs ("mid" counts as
|
---|
| 34 | // as an extremity because the head is part of "mid"); this is a "parallel array" with array_bones[]
|
---|
| 35 | var bone_type = new Array(19);
|
---|
| 36 | // The "ext" in bone_ext[] refers to the "outermostness" of the bone, that is, how far out on the extremity
|
---|
| 37 | // this bone is; this is a parallel array with array_bones[]
|
---|
| 38 | var bone_ext = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0];
|
---|
| 39 | // The extremity_ arrays are parallel arrays which store the highest "outermostness" value found for each
|
---|
| 40 | // extremity, among all the bones in that extremity that are listed in the attack
|
---|
| 41 | var extremity_name = ["mid", "left_arm", "right_arm", "left_leg", "right_leg"];
|
---|
| 42 | var extremity_max = [0, 0, 0, 0, 0];
|
---|
| 43 | for (var i = 0; i < array_bones.length; i++)
|
---|
| 44 | {
|
---|
| 45 | var bone = array_bones[i];
|
---|
| 46 | if (bone == "Head" || bone == "Neck" || bone == "Chest" || bone == "Mid" || bone == "Pelvis")
|
---|
| 47 | {
|
---|
| 48 | bone_type[i] = "mid";
|
---|
| 49 | if (bone == "Neck")
|
---|
| 50 | bone_ext[i] = 1;
|
---|
| 51 | else if (bone == "Head")
|
---|
| 52 | bone_ext[i] = 2;
|
---|
| 53 | // The rest of these bones are extremity '0'
|
---|
| 54 | }
|
---|
| 55 | else if (bone == "LeftShoulder" || bone == "LeftArm" || bone == "LeftWrist" || bone == "LeftFist")
|
---|
| 56 | {
|
---|
| 57 | bone_type[i] = "left_arm";
|
---|
| 58 | if (bone == "LeftShoulder")
|
---|
| 59 | bone_ext[i] = 1;
|
---|
| 60 | else if (bone == "LeftArm")
|
---|
| 61 | bone_ext[i] = 2;
|
---|
| 62 | else if (bone == "LeftWrist")
|
---|
| 63 | bone_ext[i] = 3;
|
---|
| 64 | else if (bone == "LeftFist")
|
---|
| 65 | bone_ext[i] = 4;
|
---|
| 66 | }
|
---|
| 67 | else if (bone == "RightShoulder" || bone == "RightArm" || bone == "RightWrist" || bone == "RightFist")
|
---|
| 68 | {
|
---|
| 69 | bone_type[i] = "right_arm";
|
---|
| 70 | if (bone == "RightShoulder")
|
---|
| 71 | bone_ext[i] = 1;
|
---|
| 72 | else if (bone == "RightArm")
|
---|
| 73 | bone_ext[i] = 2;
|
---|
| 74 | else if (bone == "RightWrist")
|
---|
| 75 | bone_ext[i] = 3;
|
---|
| 76 | else if (bone == "RightFist")
|
---|
| 77 | bone_ext[i] = 4;
|
---|
| 78 | }
|
---|
| 79 | else if (bone == "LeftThigh" || bone == "LeftCalf" || bone == "LeftFoot")
|
---|
| 80 | {
|
---|
| 81 | bone_type[i] = "left_leg";
|
---|
| 82 | if (bone == "LeftThigh")
|
---|
| 83 | bone_ext[i] = 1;
|
---|
| 84 | else if (bone == "LeftCalf")
|
---|
| 85 | bone_ext[i] = 2;
|
---|
| 86 | else if (bone == "LeftFoot")
|
---|
| 87 | bone_ext[i] = 3;
|
---|
| 88 | }
|
---|
| 89 | else if (bone == "RightThigh" || bone == "RightCalf" || bone == "RightFoot")
|
---|
| 90 | {
|
---|
| 91 | bone_type[i] = "right_leg";
|
---|
| 92 | if (bone == "RightThigh")
|
---|
| 93 | bone_ext[i] = 1;
|
---|
| 94 | else if (bone == "RightCalf")
|
---|
| 95 | bone_ext[i] = 2;
|
---|
| 96 | else if (bone == "RightFoot")
|
---|
| 97 | bone_ext[i] = 3;
|
---|
| 98 | }
|
---|
| 99 | }
|
---|
| 100 |
|
---|
| 101 | // Find outermost bone for each extremity, among the bones listed in the Attack
|
---|
| 102 | for (var a = 0; a < array_bones.length; a++)
|
---|
| 103 | {
|
---|
| 104 | for (var b = 0; b < extremity_name.length; b++)
|
---|
| 105 | {
|
---|
| 106 | if (extremity_name[b] == bone_type[a])
|
---|
| 107 | {
|
---|
| 108 | if (bone_ext[a] > extremity_max[b])
|
---|
| 109 | extremity_max[b] = bone_ext[a];
|
---|
| 110 | }
|
---|
| 111 | }
|
---|
| 112 | }
|
---|
| 113 |
|
---|
| 114 | // Add a glass_break particle for every outermost bone in the attack
|
---|
| 115 | for (var a = 0; a < array_bones.length; a++)
|
---|
| 116 | {
|
---|
| 117 | // Move to next bone if this is not the outermost attacking bone on this extremity
|
---|
| 118 | var add_this_bone = false;
|
---|
| 119 | for (var b = 0; b < extremity_name.length; b++)
|
---|
| 120 | {
|
---|
| 121 | if (bone_type[a] == extremity_name[b])
|
---|
| 122 | {
|
---|
| 123 | if (bone_ext[a] == extremity_max[b])
|
---|
| 124 | add_this_bone = true;
|
---|
| 125 | }
|
---|
| 126 | }
|
---|
| 127 | if (!add_this_bone)
|
---|
| 128 | continue;
|
---|
| 129 |
|
---|
| 130 | // Exit if we are past Oni's limit on TRAM particles
|
---|
| 131 | if (particles.length >= 16)
|
---|
| 132 | {
|
---|
| 133 | echo("Reached maximum of 16 particles for this TRAM, exiting…");
|
---|
| 134 | return;
|
---|
| 135 | }
|
---|
| 136 |
|
---|
[976] | 137 | //echo("Adding glass_break to " + array_bones[a]);
|
---|
[965] | 138 | var par_string = "<Start>" + hit_start + "</Start><End>" + hit_end + "</End><Bone>" + array_bones[a] + "</Bone><Name>glass_break</Name>";
|
---|
| 139 |
|
---|
| 140 | // Add glass_break to bone for time period that bone has collision status
|
---|
| 141 | myBuilder.addElementAt("Particle",
|
---|
| 142 | "",
|
---|
| 143 | par_string,
|
---|
| 144 | particles.index + 1,
|
---|
| 145 | particles.level + 1);
|
---|
| 146 | }
|
---|
| 147 |
|
---|
| 148 | // Update the global variable with the new XML
|
---|
| 149 | $xmlData = myBuilder.generateXML();
|
---|
| 150 | </code>
|
---|