Ignore:
Timestamp:
Mar 2, 2014, 2:50:25 AM (11 years ago)
Author:
iritscen
Message:

Latest version of glass-breaking patch (this ONCC patch does not work, though). Removed DangerousGlass as it is now a package on Depot.

Location:
AE/packages/31000GlassBreakingMoves
Files:
3 added
1 deleted
9 edited
1 moved

Legend:

Unmodified
Added
Removed
  • AE/packages/31000GlassBreakingMoves/Mod_Info.cfg

    r959 r965  
    33ModVersion -> 1.1
    44Creator -> Gumby/geyser/s10k/Iritscen
    5 Readme -> Makes all attacks break glass.
     5Readme -> Makes attacks and other colliding animations break glass. Total files patched: 711 (plus any new animations in active mods which conform to the same naming patterns as the vanilla animations). See included file "About this patch" for detailed documentation.
  • AE/packages/31000GlassBreakingMoves/patches/common/level0_Final/ONCC-.oni-patch

    r950 r965  
    11@XML_TOOLS Version "2.0"
    22
    3 @ADD_INSIDE_NODES ElementName "Particles" ParentElementName "ONCP"
    4 <xml>
    5         <ONCPParticle>
    6                 <Name>glass_break</Name>
    7                 <Type>glass_break</Type>
    8                 <BodyPart>None</BodyPart>
    9         </ONCPParticle>
    10 </xml>
     3@CUSTOM_CODE
     4<code>
     5        var myBuilder = new JSXMLBuilder();
     6        myBuilder.load($xmlData);
     7        var elements = myBuilder.elements[0];
     8       
     9        // If there are no attacks in this TRAM, ignore it
     10        if (!elements.childElement("ONCP").childElement("Particles"))
     11                return;
     12                                               
     13        // Check if glass_break is already registered for the character
     14        var particles = elements.childElement("ONCP").childElement("Particles");
     15        for (var i = 0; (particles.childElement(i)); i++)
     16        {
     17                var particle = particles.childElement(i);
     18                if (particle.childElement("Name").text == "glass_break")
     19                        return;
     20        }
     21
     22        // If we're still here, register glass_break
     23        myBuilder.addElementAt("ONCPParticle",
     24                                "",
     25                                "<Name>glass_break</Name>\
     26                                 <Type>glass_break</Type>\
     27                                 <BodyPart>None</BodyPart>",
     28                                particles.index + 1,
     29                                particles.level + 1);
     30</code>
  • AE/packages/31000GlassBreakingMoves/patches/common/level0_Final/TRAM-blownup-.oni-patch

    r959 r965  
    33@CUSTOM_CODE
    44<code>
    5         function contains(fullStringOrArray, subString){
    6                 return fullStringOrArray.indexOf(subString)!=-1;
    7         }
    8        
    9         function removeFromArray(_array, _value){
    10                 _array.splice(_array.indexOf(_value), 1);
    11         }
    12 
    135        var myBuilder = new JSXMLBuilder();
    146        myBuilder.load($xmlData);
    157
    168        var elements = myBuilder.elements[0];
     9        var particles = elements.childElement("Animation").childElement("Particles");
     10        var added_to_head = false, added_to_feet = false;
    1711       
    18         var particles = elements.childElement("Animation").childElement("Particles");
    19                                                
    20         // Check if any of the existing particles contains a head bone
    21         for (var i=0; (particles.childElement(i)); i++){ // the condition is to check if the child element exists (!= undefined)
    22                 var currElement=particles.childElement(i);
    23 
    24                 if(currElement.childElement("Bone").text=="Head"){
    25                         if(currElement.childElement("Name").text=="glass_break"){
    26                                 return; // not necessary to add
    27                         }
    28                         else{
    29                                 // gather all the necessary info
    30                                 var int_start=currElement.childElement("Start").text;
    31                                 var int_end=currElement.childElement("End").text;
    32                                
    33                                 // Insert the new glass particle (for when he touches glass with head
    34                                 myBuilder.addElementAt("Particle","",
    35                                 "<Start>"+int_start+"</Start>\
    36                 <End>"+int_end+"</End>\
    37                 <Bone>Head</Bone>\
    38                 <Name>glass_break</Name>",particles.index+1,particles.level+1);
    39                                 break;
    40                         }
     12        // Check if glass_break is assigned to Head and one of the feet;
     13        // remove it from any other bones if present
     14        for (var i = 0; (particles.childElement(i)); i++)
     15        {
     16                var particle = particles.childElement(i);
     17                var bone = particle.childElement("Bone").text;
     18                var name = particle.childElement("Name").text;
     19                if (name == "glass_break")
     20                {
     21                        if (bone == "Head")
     22                                added_to_head = true;
     23                        else if (bone == "RightFoot")
     24                                added_to_feet = true;
     25                        else
     26                                myBuilder.removeElement(particle.index);
    4127                }
    4228        }
     29
     30        // Exit if we are past Oni's limit on TRAM particles
     31        if (particles.length >= 16)
     32                return;
     33
     34        // Add the glass_break particle to the desired bones if it's not there already
     35        var heights = elements.childElement("Animation").childElement("Heights");
     36        var anim_length;
     37        for (anim_length = 0; (heights.childElement(anim_length)); anim_length++) {;}
     38        if (!added_to_head)
     39                myBuilder.addElementAt("Particle",
     40                                       "",
     41                                       "<Start>0</Start>\
     42                                        <End>" + (anim_length-1) + "</End>\
     43                                        <Bone>Head</Bone>\
     44                                        <Name>glass_break</Name>",
     45                                       particles.index + 1,
     46                                       particles.level + 1);
     47
     48        // Exit if we are past Oni's limit on TRAM particles
     49        if (particles.length >= 16)
     50                return;
     51
     52        if (!added_to_feet)
     53                myBuilder.addElementAt("Particle",
     54                                       "",
     55                                       "<Start>0</Start>\
     56                                        <End>" + (anim_length-1) + "</End>\
     57                                        <Bone>RightFoot</Bone>\
     58                                        <Name>glass_break</Name>",
     59                                       particles.index + 1,
     60                                       particles.level + 1);
    4361 
    44         $xmlData=myBuilder.generateXML(); // update the global variable with the new XML
     62        // Update the global variable with the new XML
     63        $xmlData = myBuilder.generateXML();
    4564</code>
  • AE/packages/31000GlassBreakingMoves/patches/common/level0_Final/TRAM-comb-.oni-patch

    r959 r965  
    33@CUSTOM_CODE
    44<code>
    5         function contains(fullStringOrArray, subString){
    6                 return fullStringOrArray.indexOf(subString)!=-1;
    7         }
     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];
    811       
    9         function removeFromArray(_array, _value){
    10                 _array.splice(_array.indexOf(_value), 1);
     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);
    1130        }
    1231
    13         var myBuilder = new JSXMLBuilder();
    14         myBuilder.load($xmlData);
    15 
    16         var elements = myBuilder.elements[0];
    17        
    18         var particles = elements.childElement("Animation").childElement("Particles");
    19        
    20                        
    21         if(!elements.childElement("Animation").childElement("Attacks")){ // if no attacks found ignore file
    22                 return;
    23         }
    24        
    25         var attackElement = elements.childElement("Animation").childElement("Attacks").childElement("Attack");
    26        
    27         var int_start,int_end,array_bones;
    28        
    29         // gather all the necessary info
    30         int_start=attackElement.childElement("Start").text;
    31         int_end=attackElement.childElement("End").text;
    32         array_bones=attackElement.childElement("Bones").text.split(" ");
    33                                                
    34         // Check if any of the existing particles correspond to the same bone and glass_break
    35         for (var i=0; (particles.childElement(i)); i++){ // the condition is to check if the child element exists (!= undefined)
    36                 var currElement=particles.childElement(i);
    37 
    38                 if(contains(array_bones,currElement.childElement("Bone").text) && currElement.childElement("Name").text=="glass_break"){
    39                         removeFromArray(array_bones,currElement.childElement("Bone").text); // not necessary to add
     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;
    4098                }
    4199        }
    42        
    43         // Insert the new glass particles
    44         for (var i = 0; i < array_bones.length; i++) {
    45                 if( (contains(array_bones[i],"Foot")) && !contains(array_bones[i],"Calf") && !contains(array_bones[i],"Tight")
    46                 ||  (contains(array_bones[i],"Fist")) && !contains(array_bones[i],"Wrist")){
    47                 myBuilder.addElementAt("Particle","",
    48                                 "<Start>"+int_start+"</Start>\
    49                 <End>"+int_end+"</End>\
    50                 <Bone>"+array_bones[i]+"</Bone>\
    51                 <Name>glass_break</Name>",particles.index+1,particles.level+1);
     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                        }
    52111                }
    53112        }
     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
     137                echo("Adding glass_break to " + array_bones[a]);
     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        }
    54147 
    55         $xmlData=myBuilder.generateXML(); // update the global variable with the new XML
     148        // Update the global variable with the new XML
     149        $xmlData = myBuilder.generateXML();
    56150</code>
  • AE/packages/31000GlassBreakingMoves/patches/common/level0_Final/TRAM-getupfront-.oni-patch

    r950 r965  
    33@CUSTOM_CODE
    44<code>
    5         function contains(fullStringOrArray, subString){
    6                 return fullStringOrArray.indexOf(subString)!=-1;
    7         }
     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];
    811       
    9         function removeFromArray(_array, _value){
    10                 _array.splice(_array.indexOf(_value), 1);
     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);
    1130        }
    1231
    13         var myBuilder = new JSXMLBuilder();
    14         myBuilder.load($xmlData);
    15 
    16         var elements = myBuilder.elements[0];
    17        
    18         var particles = elements.childElement("Animation").childElement("Particles");
    19        
    20                        
    21         if(!elements.childElement("Animation").childElement("Attacks")){ // if no attacks found ignore file
    22                 return;
    23         }
    24        
    25         var attackElement = elements.childElement("Animation").childElement("Attacks").childElement("Attack");
    26        
    27         var int_start,int_end,array_bones;
    28        
    29         // gather all the necessary info
    30         int_start=attackElement.childElement("Start").text;
    31         int_end=attackElement.childElement("End").text;
    32         array_bones=attackElement.childElement("Bones").text.split(" ");
    33                                                
    34         // Check if any of the existing particles correspond to the same bone and glass_break
    35         for (var i=0; (particles.childElement(i)); i++){ // the condition is to check if the child element exists (!= undefined)
    36                 var currElement=particles.childElement(i);
    37 
    38                 if(contains(array_bones,currElement.childElement("Bone").text) && currElement.childElement("Name").text=="glass_break"){
    39                         removeFromArray(array_bones,currElement.childElement("Bone").text); // not necessary to add
     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;
    4098                }
    4199        }
    42        
    43         // Insert the new glass particles
    44         for (var i = 0; i < array_bones.length; i++) {
    45                 if(array_bones[i]=="RightFoot" || array_bones[i]=="LeftFoot" || array_bones[i]=="RightFist" || array_bones[i]=="LeftFist"){
    46                 myBuilder.addElementAt("Particle","",
    47                                 "<Start>"+int_start+"</Start>\
    48                 <End>"+int_end+"</End>\
    49                 <Bone>"+array_bones[i]+"</Bone>\
    50                 <Name>glass_break</Name>",particles.index+1,particles.level+1);
     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                        }
    51111                }
    52112        }
     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
     137                echo("Adding glass_break to " + array_bones[a]);
     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        }
    53147 
    54         $xmlData=myBuilder.generateXML(); // update the global variable with the new XML
     148        // Update the global variable with the new XML
     149        $xmlData = myBuilder.generateXML();
    55150</code>
  • AE/packages/31000GlassBreakingMoves/patches/common/level0_Final/TRAM-kick-.oni-patch

    r950 r965  
    33@CUSTOM_CODE
    44<code>
    5         function contains(fullStringOrArray, subString){
    6                 return fullStringOrArray.indexOf(subString)!=-1;
    7         }
     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];
    811       
    9         function removeFromArray(_array, _value){
    10                 _array.splice(_array.indexOf(_value), 1);
     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);
    1130        }
    1231
    13         var myBuilder = new JSXMLBuilder();
    14         myBuilder.load($xmlData);
    15 
    16         var elements = myBuilder.elements[0];
    17        
    18         var particles = elements.childElement("Animation").childElement("Particles");
    19        
    20                        
    21         if(!elements.childElement("Animation").childElement("Attacks")){ // if no attacks found ignore file
    22                 return;
    23         }
    24        
    25         var attackElement = elements.childElement("Animation").childElement("Attacks").childElement("Attack");
    26        
    27         var int_start,int_end,array_bones;
    28        
    29         // gather all the necessary info
    30         int_start=attackElement.childElement("Start").text;
    31         int_end=attackElement.childElement("End").text;
    32         array_bones=attackElement.childElement("Bones").text.split(" ");
    33                                                
    34         // Check if any of the existing particles correspond to the same bone and glass_break
    35         for (var i=0; (particles.childElement(i)); i++){ // the condition is to check if the child element exists (!= undefined)
    36                 var currElement=particles.childElement(i);
    37 
    38                 if(contains(array_bones,currElement.childElement("Bone").text) && currElement.childElement("Name").text=="glass_break"){
    39                         removeFromArray(array_bones,currElement.childElement("Bone").text); // not necessary to add
     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;
    4098                }
    4199        }
    42        
    43         // Insert the new glass particles
    44         for (var i = 0; i < array_bones.length; i++) {
    45                 if(array_bones[i]=="RightFoot" || array_bones[i]=="LeftFoot" || array_bones[i]=="RightFist" || array_bones[i]=="LeftFist"){
    46                 myBuilder.addElementAt("Particle","",
    47                                 "<Start>"+int_start+"</Start>\
    48                 <End>"+int_end+"</End>\
    49                 <Bone>"+array_bones[i]+"</Bone>\
    50                 <Name>glass_break</Name>",particles.index+1,particles.level+1);
     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                        }
    51111                }
    52112        }
     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
     137                echo("Adding glass_break to " + array_bones[a]);
     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        }
    53147 
    54         $xmlData=myBuilder.generateXML(); // update the global variable with the new XML
     148        // Update the global variable with the new XML
     149        $xmlData = myBuilder.generateXML();
    55150</code>
  • AE/packages/31000GlassBreakingMoves/patches/common/level0_Final/TRAM-knockdown-.oni-patch

    r959 r965  
    33@CUSTOM_CODE
    44<code>
    5         function contains(fullStringOrArray, subString){
    6                 return fullStringOrArray.indexOf(subString)!=-1;
    7         }
    8        
    9         function removeFromArray(_array, _value){
    10                 _array.splice(_array.indexOf(_value), 1);
    11         }
    12 
    135        var myBuilder = new JSXMLBuilder();
    146        myBuilder.load($xmlData);
    157
    168        var elements = myBuilder.elements[0];
    17        
    189        var particles = elements.childElement("Animation").childElement("Particles");
    1910                                               
    20         // Check if any of the existing particles contains a head bone
    21         for (var i=0; (particles.childElement(i)); i++){ // the condition is to check if the child element exists (!= undefined)
    22                 var currElement=particles.childElement(i);
     11        // Check to see if glass_break is already added to Head
     12        for (var i = 0; (particles.childElement(i)); i++)
     13        {
     14                var particle = particles.childElement(i);
     15                if (particle.childElement("Bone").text == "Head" &&
     16                    particle.childElement("Name").text == "glass_break")
     17                        return;
     18        }
    2319
    24                 if(currElement.childElement("Bone").text=="Head"){
    25                         if(currElement.childElement("Name").text=="glass_break"){
    26                                 return; // not necessary to add
    27                         }
    28                         else{
    29                                 // gather all the necessary info
    30                                 var int_start=currElement.childElement("Start").text;
    31                                 var int_end=currElement.childElement("End").text;
     20        // Exit if we are past Oni's limit on TRAM particles
     21        if (particles.length >= 16)
     22                return;
    3223                               
    33                                 // Insert the new glass particle (for when he touches glass with head
    34                                 myBuilder.addElementAt("Particle","",
    35                                 "<Start>"+int_start+"</Start>\
    36                 <End>"+int_end+"</End>\
    37                 <Bone>Head</Bone>\
    38                 <Name>glass_break</Name>",particles.index+1,particles.level+1);
    39                                 break;
    40                         }
    41                 }
    42         }
     24        // Add the glass_break particle to Head for duration of animation
     25        var heights = elements.childElement("Animation").childElement("Heights");
     26        var anim_length;
     27        for (anim_length = 0; (heights.childElement(anim_length)); anim_length++) {;}
     28        myBuilder.addElementAt("Particle",
     29                               "",
     30                               "<Start>0</Start>\
     31                                <End>" + (anim_length-1) + "</End>\
     32                                <Bone>Head</Bone>\
     33                                <Name>glass_break</Name>",
     34                               particles.index + 1,
     35                               particles.level + 1);
    4336 
    44         $xmlData=myBuilder.generateXML(); // update the global variable with the new XML
     37        // Update the global variable with the new XML
     38        $xmlData = myBuilder.generateXML();
    4539</code>
  • AE/packages/31000GlassBreakingMoves/patches/common/level0_Final/TRAM-punch-.oni-patch

    r950 r965  
    33@CUSTOM_CODE
    44<code>
    5         function contains(fullStringOrArray, subString){
    6                 return fullStringOrArray.indexOf(subString)!=-1;
    7         }
     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];
    811       
    9         function removeFromArray(_array, _value){
    10                 _array.splice(_array.indexOf(_value), 1);
     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);
    1130        }
    1231
    13         var myBuilder = new JSXMLBuilder();
    14         myBuilder.load($xmlData);
    15 
    16         var elements = myBuilder.elements[0];
    17        
    18         var particles = elements.childElement("Animation").childElement("Particles");
    19        
    20                        
    21         if(!elements.childElement("Animation").childElement("Attacks")){ // if no attacks found ignore file
    22                 return;
    23         }
    24        
    25         var attackElement = elements.childElement("Animation").childElement("Attacks").childElement("Attack");
    26        
    27         var int_start,int_end,array_bones;
    28        
    29         // gather all the necessary info
    30         int_start=attackElement.childElement("Start").text;
    31         int_end=attackElement.childElement("End").text;
    32         array_bones=attackElement.childElement("Bones").text.split(" ");
    33                                                
    34         // Check if any of the existing particles correspond to the same bone and glass_break
    35         for (var i=0; (particles.childElement(i)); i++){ // the condition is to check if the child element exists (!= undefined)
    36                 var currElement=particles.childElement(i);
    37 
    38                 if(contains(array_bones,currElement.childElement("Bone").text) && currElement.childElement("Name").text=="glass_break"){
    39                         removeFromArray(array_bones,currElement.childElement("Bone").text); // not necessary to add
     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;
    4098                }
    4199        }
    42        
    43         // Insert the new glass particles
    44         for (var i = 0; i < array_bones.length; i++) {
    45                 if(array_bones[i]=="RightFoot" || array_bones[i]=="LeftFoot" || array_bones[i]=="RightFist" || array_bones[i]=="LeftFist"){
    46                 myBuilder.addElementAt("Particle","",
    47                                 "<Start>"+int_start+"</Start>\
    48                 <End>"+int_end+"</End>\
    49                 <Bone>"+array_bones[i]+"</Bone>\
    50                 <Name>glass_break</Name>",particles.index+1,particles.level+1);
     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                        }
    51111                }
    52112        }
     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
     137                echo("Adding glass_break to " + array_bones[a]);
     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        }
    53147 
    54         $xmlData=myBuilder.generateXML(); // update the global variable with the new XML
     148        // Update the global variable with the new XML
     149        $xmlData = myBuilder.generateXML();
    55150</code>
  • AE/packages/31000GlassBreakingMoves/patches/common/level0_Final/TRAM-slide-.oni-patch

    r950 r965  
    33@CUSTOM_CODE
    44<code>
    5         function contains(fullStringOrArray, subString){
    6                 return fullStringOrArray.indexOf(subString)!=-1;
    7         }
     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];
    811       
    9         function removeFromArray(_array, _value){
    10                 _array.splice(_array.indexOf(_value), 1);
     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);
    1130        }
    1231
    13         var myBuilder = new JSXMLBuilder();
    14         myBuilder.load($xmlData);
    15 
    16         var elements = myBuilder.elements[0];
    17        
    18         var particles = elements.childElement("Animation").childElement("Particles");
    19        
    20                        
    21         if(!elements.childElement("Animation").childElement("Attacks")){ // if no attacks found ignore file
    22                 return;
    23         }
    24        
    25         var attackElement = elements.childElement("Animation").childElement("Attacks").childElement("Attack");
    26        
    27         var int_start,int_end,array_bones;
    28        
    29         // gather all the necessary info
    30         int_start=attackElement.childElement("Start").text;
    31         int_end=attackElement.childElement("End").text;
    32         array_bones=attackElement.childElement("Bones").text.split(" ");
    33                                                
    34         // Check if any of the existing particles correspond to the same bone and glass_break
    35         for (var i=0; (particles.childElement(i)); i++){ // the condition is to check if the child element exists (!= undefined)
    36                 var currElement=particles.childElement(i);
    37 
    38                 if(contains(array_bones,currElement.childElement("Bone").text) && currElement.childElement("Name").text=="glass_break"){
    39                         removeFromArray(array_bones,currElement.childElement("Bone").text); // not necessary to add
     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;
    4098                }
    4199        }
    42        
    43         // Insert the new glass particles
    44         for (var i = 0; i < array_bones.length; i++) {
    45                 if(array_bones[i]=="RightFoot" || array_bones[i]=="LeftFoot" || array_bones[i]=="RightFist" || array_bones[i]=="LeftFist"){
    46                 myBuilder.addElementAt("Particle","",
    47                                 "<Start>"+int_start+"</Start>\
    48                 <End>"+int_end+"</End>\
    49                 <Bone>"+array_bones[i]+"</Bone>\
    50                 <Name>glass_break</Name>",particles.index+1,particles.level+1);
     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                        }
    51111                }
    52112        }
     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
     137                echo("Adding glass_break to " + array_bones[a]);
     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        }
    53147 
    54         $xmlData=myBuilder.generateXML(); // update the global variable with the new XML
     148        // Update the global variable with the new XML
     149        $xmlData = myBuilder.generateXML();
    55150</code>
  • AE/packages/31000GlassBreakingMoves/patches/common/level0_Final/TRAMKONCOMrun_throw_fw.oni-patch

    r959 r965  
    11@XML_TOOLS Version "2.0"
    22
    3 @CUSTOM_CODE
    4 <code>
    5         function contains(fullStringOrArray, subString){
    6                 return fullStringOrArray.indexOf(subString)!=-1;
    7         }
    8        
    9         function removeFromArray(_array, _value){
    10                 _array.splice(_array.indexOf(_value), 1);
    11         }
    12 
    13         var myBuilder = new JSXMLBuilder();
    14         myBuilder.load($xmlData);
    15 
    16         var elements = myBuilder.elements[0];
    17        
    18         var particles = elements.childElement("Animation").childElement("Particles");
    19        
    20                        
    21         if(!elements.childElement("Animation").childElement("Attacks")){ // if no attacks found ignore file
    22                 return;
    23         }
    24        
    25         var attackElement = elements.childElement("Animation").childElement("Attacks").childElement("Attack");
    26        
    27         var int_start,int_end,array_bones;
    28        
    29         // gather all the necessary info
    30         int_start=attackElement.childElement("Start").text;
    31         int_end=attackElement.childElement("End").text;
    32         array_bones=attackElement.childElement("Bones").text.split(" ");
    33                                                
    34         // Check if any of the existing particles correspond to the same bone and glass_break
    35         for (var i=0; (particles.childElement(i)); i++){ // the condition is to check if the child element exists (!= undefined)
    36                 var currElement=particles.childElement(i);
    37 
    38                 if(contains(array_bones,currElement.childElement("Bone").text) && currElement.childElement("Name").text=="glass_break"){
    39                         removeFromArray(array_bones,currElement.childElement("Bone").text); // not necessary to add
    40                 }
    41         }
    42        
    43         // Insert the new glass particles
    44         for (var i = 0; i < array_bones.length; i++) {
    45                 if(array_bones[i]=="RightFoot" || array_bones[i]=="LeftFoot" || array_bones[i]=="RightFist" || array_bones[i]=="LeftFist"){
    46                 myBuilder.addElementAt("Particle","",
    47                                 "<Start>"+int_start+"</Start>\
    48                 <End>"+int_end+"</End>\
    49                 <Bone>"+array_bones[i]+"</Bone>\
    50                 <Name>glass_break</Name>",particles.index+1,particles.level+1);
    51                 }
    52         }
    53  
    54         $xmlData=myBuilder.generateXML(); // update the global variable with the new XML
    55 </code>
     3@ADD_INSIDE_NODES ElementName "Particles"
     4<xml>
     5    <Particle>
     6        <Start>29</Start>
     7        <End>39</End>
     8        <Bone>LeftFoot</Bone>
     9        <Name>glass_break</Name>
     10    </Particle>
     11</xml>
Note: See TracChangeset for help on using the changeset viewer.