Search Unity

Decal System

Discussion in 'Assets and Asset Store' started by Dantus, Jun 29, 2012.

  1. Dantus

    Dantus

    Joined:
    Oct 21, 2009
    Posts:
    5,667
    The free version doesn't exist anymore. I am going to get in touch with you via pm and see what I can do for you.
     
  2. NTDC-DEV

    NTDC-DEV

    Joined:
    Jul 22, 2010
    Posts:
    593
    Hello Dantus,

    I hate to be that person but I'm wondering if you've made any progress on this issue?

    Thank you.
     
  3. Dantus

    Dantus

    Joined:
    Oct 21, 2009
    Posts:
    5,667
    Yes, I did. I am far behind my schedule regarding the Decal System. The feature itself is implemented, but there are still some issues in the inspector that need to be resolved to call it production ready. Sorry for the delay.
     
  4. hemik

    hemik

    Joined:
    Jul 31, 2013
    Posts:
    2
    Hey! I've got a quick question (sorry if it has been asked before):
    If we were to purchase a licence for a 3D graphic guy to setup a scene using it, would we also need a second licence for a game developer in order to be able to use the stuff the 3D guy has prepared?
     
  5. Dantus

    Dantus

    Joined:
    Oct 21, 2009
    Posts:
    5,667
    The license conditions can be found here: https://unity3d.com/legal/as_terms
    Hope this helps.
     
  6. hemik

    hemik

    Joined:
    Jul 31, 2013
    Posts:
    2
    Yeah, i totally get that, maybe i didn't make myself clear enough there. I was asking, if once a 3D graphic is done with setting up a scene using your plugin and forwards it to a developer (who is not going to be making any changes to the decals whatsoever) will he be able to open and properly display that scene without the plugin?
     
  7. Dantus

    Dantus

    Joined:
    Oct 21, 2009
    Posts:
    5,667
    Theoretically, you could do that, but it would require a lot of extra work. You would need to remove all the scripts, such that only the meshes remain in the scene. This would certainly mean that if that scene is passed back, all the decal information would be lost.

    I am going to get in touch with you directly, such that we can have a look at your actual situation.
     
  8. FG_dev1

    FG_dev1

    Joined:
    Nov 3, 2014
    Posts:
    44
    How can you change materials on a decal at runtime? I've tried changing the DS_Decals CurrentMaterial and updating the renderers materials but that makes the material inverse it's alpha and use black only?

    I'm using unity 5
     
  9. Dantus

    Dantus

    Joined:
    Oct 21, 2009
    Posts:
    5,667
    It is supposed to be done exactly like that. Could you share a reproduction, such that I can have a look at it?
     
  10. FG_dev1

    FG_dev1

    Joined:
    Nov 3, 2014
    Posts:
    44
    Can do but I'll have to get it to you later, I don't have access to the project atm.

    While I'm here, is there a way to stop z-fighting between decals? I know there is between a decal and the mesh it's placed on but what about between 2 decals?
     
  11. Dantus

    Dantus

    Joined:
    Oct 21, 2009
    Posts:
    5,667
    Do the decals belong to the same DS_Decals?
     
  12. FG_dev1

    FG_dev1

    Joined:
    Nov 3, 2014
    Posts:
    44
    No, at least I don't think so. Each decal is a separate game object.
     
  13. Dantus

    Dantus

    Joined:
    Oct 21, 2009
    Posts:
    5,667
    There is no general solution for that and it is even very hard for special cases. That's just in the nature of the problem.
     
  14. FG_dev1

    FG_dev1

    Joined:
    Nov 3, 2014
    Posts:
    44
    Hi Dantus,

    I'm having a stretching issue when I try to make a decal the wraps around an edge. Below I'm creating a decal at run time on the edge of a cube, using the direction of down. It looks nice ontop but stretches on the other side of the cube.



    Here is the texture/what it's meant to look like:



    What do I have to do so the decal/UV's nicely wrap around a surface instead of stretching?

    Thanks
     
  15. Dantus

    Dantus

    Joined:
    Oct 21, 2009
    Posts:
    5,667
    There is unfortunately no correct way in general to achieve good results. Especially 90 degrees angles are very tough. Getting correct, not stretched unwrapping for decals can technically not be achieved. For the uv projection, you may pick "Project Wrapped" which kind of tries to minimize the stretching, but you shouldn't expect too much.

    When you have extreme angles like in your case, the easiest way is to use a projector per side and to line them up, such that they match.

    Hope this helps.
     
  16. PhobicGunner

    PhobicGunner

    Joined:
    Jun 28, 2011
    Posts:
    1,813
    Dantus likes this.
  17. FG_dev1

    FG_dev1

    Joined:
    Nov 3, 2014
    Posts:
    44
    Damn, that sucks.

    Ok if that's the case, how would I restrict the decal to just 1 surface/side? (Keeping in mind this is done dynamically at runtime and not in editor)

    Thanks
     
  18. Dantus

    Dantus

    Joined:
    Oct 21, 2009
    Posts:
    5,667
    You can lower the culling angle of the projector, e.g. to 80. Like that you are below the 90 degrees.
     
  19. FG_dev1

    FG_dev1

    Joined:
    Nov 3, 2014
    Posts:
    44
    Hi again Dantus,

    I'm getting an error when trying to create a decal on a mesh created with probuilder:

    "ArgumentException: The mesh is not readable! Make sure the mesh can be read in the import settings and no static batching is used for it.
    Edelweiss.DecalSystem.DecalsMesh.Add (UnityEngine.Mesh a_Mesh, Matrix4x4 a_WorldToMeshMatrix, Matrix4x4 a_MeshToWorldMatrix)
    BloodCreator.CreateDecal (.DS_Decals l_DecalsInstance, UnityEngine.Mesh l_Mesh, Vector3 l_ProjectorPosition, Quaternion l_ProjectorRotation, UnityEngine.Transform surface, Single size) (at Assets/Desync_Decals/BloodCreator.cs:236)
    BloodCreator.AttemptInstantBloodDecal (Vector3 projectorPos, Quaternion projectorRot, UnityEngine.Transform meshToPaintOn, Single size) (at Assets/Desync_Decals/BloodCreator.cs:193)"

    Any idea why/what to do?
     
  20. Dantus

    Dantus

    Joined:
    Oct 21, 2009
    Posts:
    5,667
    @FG_dev1, the Decal System makes the computation based on the existing meshes. Those meshes certainly need to be readable to achieve this. It seems that ProBuilder creates not readable meshes by default. I don't know how ProBuilder handles all meshes, but I am sure there is an option to make the meshes readable somewhere.
     
  21. sglindme

    sglindme

    Joined:
    Jun 30, 2015
    Posts:
    18
    Hi,

    I'm trying to use the BulletExampleCS script that you posted in this thread in 2009(The one on the first page of this long thread), but I'm getting an error that I can't figure out.

    I'm using the exact script you gave, but when it gets to line 113 - m_DecalsMesh.AddProjector(l_DecalProjector);
    I get an error - Object reference not set to an instance of an object

    I wish I could provide more info, but I literally just copy pasted your code and everything seems to work until I actually press fire, in which case I get the error at this line.
     
  22. Dantus

    Dantus

    Joined:
    Oct 21, 2009
    Posts:
    5,667
    Welcome to the forum!
    Could you please post the complete script here, just to ensure we are talking about exactly the same.

    As you are new to the forum, please don't forget to use code tags:
    http://forum.unity3d.com/threads/using-code-tags-properly.143875/
     
  23. sglindme

    sglindme

    Joined:
    Jun 30, 2015
    Posts:
    18
    Sure, here ya go - it's line 111 now that I've copy/pasted it.

    Code (CSharp):
    1. //
    2. // Author:
    3. //   Andreas Suter (andy@edelweissinteractive.com)
    4. //
    5. // Copyright (C) 2012 Edelweiss Interactive (http://edelweissinteractive.com)
    6. //
    7. using UnityEngine;
    8. using System.Collections;
    9. using System.Collections.Generic;
    10. using Edelweiss.DecalSystem;
    11. public class BulletExampleCS : MonoBehaviour {
    12.  
    13.         // The prefab which contains the DS_Decals script with already set material and
    14.         // uv rectangles.
    15.     public GameObject decalsPrefab;
    16.  
    17.         // The reference to the instantiated prefab's DS_Decals instance.
    18.     private DS_Decals m_Decals;
    19.     private Matrix4x4 m_WorldToDecalsMatrix;
    20.  
    21.         // All the projectors that were created at runtime.
    22.     private List <DecalProjector> m_DecalProjectors = new List <DecalProjector> ();
    23.  
    24.         // Intermediate mesh data. Mesh data is added to that one for a specific projector
    25.         // in order to perform the cutting.
    26.     private DecalsMesh m_DecalsMesh;
    27.     private DecalsMeshCutter m_DecalsMeshCutter;
    28.  
    29.         // The raycast hits a collider at a certain position. This value indicated how far we need to
    30.         // go back from that hit point along the ray of the raycast to place the new decal projector. Set
    31.         // this value to 0.0f to see why this is needed.
    32.     public float decalProjectorOffset = 0.5f;
    33.  
    34.         // The size of new decal projectors.
    35.     public Vector3 decalProjectorScale = new Vector3 (0.2f, 2.0f, 0.2f);
    36.     public float cullingAngle = 90.0f;
    37.     public float meshOffset = 0.001f;
    38.  
    39.         // We iterate through all the defined uv rectangles. This one indices which index we are using at
    40.         // the moment.
    41.     private int m_UVRectangleIndex;
    42.  
    43.         // Move on to the next uv rectangle index.
    44.     private void NextUVRectangleIndex () {
    45.         m_UVRectangleIndex = m_UVRectangleIndex + 1;
    46.         if (m_UVRectangleIndex >= m_Decals.uvRectangles.Length) {
    47.             m_UVRectangleIndex = 0;
    48.         }
    49.     }
    50.  
    51.     private void Start () {
    52.      
    53.             // Instantiate the prefab and get its decals instance.
    54.         GameObject l_Instance = Instantiate (decalsPrefab) as GameObject;
    55.         m_Decals = l_Instance.GetComponentInChildren <DS_Decals> ();
    56.      
    57.         if (m_Decals == null) {
    58.             Debug.LogError ("The 'decalsPrefab' does not contain a 'DS_Decals' instance!");
    59.         } else {
    60.          
    61.                 // Create the decals mesh (intermediate mesh data) for our decals instance.
    62.                 // Further we need a decals mesh cutter instance and the world to decals matrix.
    63.             m_DecalsMesh = new DecalsMesh (m_Decals);
    64.             m_DecalsMeshCutter = new DecalsMeshCutter ();
    65.             m_WorldToDecalsMatrix = m_Decals.CachedTransform.worldToLocalMatrix;
    66.         }
    67.     }
    68.  
    69.     private void Update () {
    70.         if (Input.GetButtonDown ("Fire1")) {
    71.             Ray l_Ray = Camera.main.ViewportPointToRay (new Vector3 (0.5f, 0.5f, 0.0f));
    72.             RaycastHit l_RaycastHit;
    73.             if (Physics.Raycast (l_Ray, out l_RaycastHit, Mathf.Infinity)) {
    74.              
    75.                     // We hit a collider.
    76.              
    77.              
    78.                     // Make sure there are not too many projectors.
    79.                 if (m_DecalProjectors.Count >= 50) {
    80.                  
    81.                         // If there are more than 50 projectors, we remove the first one from
    82.                         // our list and certainly from the decals mesh (the intermediate mesh
    83.                         // format). All the mesh data that belongs to this projector will
    84.                         // be removed.
    85.                     DecalProjector l_DecalProjector = m_DecalProjectors [0];
    86.                     m_DecalProjectors.RemoveAt (0);
    87.                     m_DecalsMesh.RemoveProjector (l_DecalProjector);
    88.                 }
    89.              
    90.                     // Calculate the position and rotation for the new decal projector.
    91.                 Vector3 l_ProjectorPosition = l_RaycastHit.point - (decalProjectorOffset * l_Ray.direction.normalized);
    92.                 Vector3 l_ForwardDirection = Camera.main.transform.up;
    93.                 Vector3 l_UpDirection = - Camera.main.transform.forward;
    94.                 Quaternion l_ProjectorRotation = Quaternion.LookRotation (l_ForwardDirection, l_UpDirection);
    95.              
    96.                 TerrainCollider l_TerrainCollider = l_RaycastHit.collider as TerrainCollider;
    97.                 if (l_TerrainCollider != null) {
    98.                  
    99.                         // Terrain collider hit.
    100.                  
    101.                     Terrain l_Terrain = l_TerrainCollider.GetComponent <Terrain> ();
    102.                     if (l_Terrain != null) {
    103.                      
    104.                             // Create the decal projector with all the required information.
    105.                         DecalProjector l_DecalProjector = new DecalProjector (l_ProjectorPosition, l_ProjectorRotation, decalProjectorScale, cullingAngle, meshOffset, m_UVRectangleIndex, m_UVRectangleIndex);
    106.                      
    107.                             // Add the projector to our list and the decals mesh, such that both are
    108.                             // synchronized. All the mesh data that is now added to the decals mesh
    109.                             // will belong to this projector.
    110.                         m_DecalProjectors.Add (l_DecalProjector);
    111.                         m_DecalsMesh.AddProjector (l_DecalProjector);
    112.                      
    113.                             // The terrain data has to be converted to the decals instance's space.
    114.                         Matrix4x4 l_TerrainToDecalsMatrix = Matrix4x4.TRS (l_Terrain.transform.position, Quaternion.identity, Vector3.one) * m_WorldToDecalsMatrix;
    115.                      
    116.                             // Pass the terrain data with the corresponding conversion to the decal mesh.
    117.                         m_DecalsMesh.Add (l_Terrain, l_TerrainToDecalsMatrix);
    118.                      
    119.                             // Cut the data in the decals mesh accoring to the size and position of the decal projector. Offset the
    120.                             // vertices afterwards and pass the newly computed mesh to the decals instance, such that it becomes
    121.                             // visible.
    122.                         m_DecalsMeshCutter.CutDecalsPlanes (m_DecalsMesh);
    123.                         m_DecalsMesh.OffsetActiveProjectorVertices ();
    124.                         m_Decals.UpdateDecalsMeshes (m_DecalsMesh);
    125.                      
    126.                             // For the next hit, use a new uv rectangle. Usually, you would select the uv rectangle
    127.                             // based on the surface you have hit.
    128.                         NextUVRectangleIndex ();
    129.                     } else {
    130.                         Debug.Log ("Terrain is null!");
    131.                     }
    132.                  
    133.                 } else {
    134.                  
    135.                         // We hit a collider. Next we have to find the mesh that belongs to the collider.
    136.                         // That step depends on how you set up your mesh filters and collider relative to
    137.                         // each other in the game objects. It is important to have a consistent way in order
    138.                         // to have a simpler implementation.
    139.                  
    140.                     MeshCollider l_MeshCollider = l_RaycastHit.collider.GetComponent <MeshCollider> ();
    141.                     MeshFilter l_MeshFilter = l_RaycastHit.collider.GetComponent <MeshFilter> ();
    142.                  
    143.                     if (l_MeshCollider != null || l_MeshFilter != null) {
    144.                         Mesh l_Mesh = null;
    145.                         if (l_MeshCollider != null) {
    146.                          
    147.                                 // Mesh collider was hit. Just use the mesh data from that one.
    148.                             l_Mesh = l_MeshCollider.sharedMesh;
    149.                         } else if (l_MeshFilter != null) {
    150.                          
    151.                                 // Otherwise take the data from the shared mesh.
    152.                             l_Mesh = l_MeshFilter.sharedMesh;
    153.                         }
    154.                      
    155.                         if (l_Mesh != null) {
    156.                          
    157.                                 // Create the decal projector.
    158.                             DecalProjector l_DecalProjector = new DecalProjector (l_ProjectorPosition, l_ProjectorRotation, decalProjectorScale, cullingAngle, meshOffset, m_UVRectangleIndex, m_UVRectangleIndex);
    159.                          
    160.                                 // Add the projector to our list and the decals mesh, such that both are
    161.                                 // synchronized. All the mesh data that is now added to the decals mesh
    162.                                 // will belong to this projector.
    163.                             m_DecalProjectors.Add (l_DecalProjector);
    164.                             m_DecalsMesh.AddProjector (l_DecalProjector);
    165.                          
    166.                                 // Get the required matrices.
    167.                             Matrix4x4 l_WorldToMeshMatrix = l_RaycastHit.collider.renderer.transform.worldToLocalMatrix;
    168.                             Matrix4x4 l_MeshToWorldMatrix = l_RaycastHit.collider.renderer.transform.localToWorldMatrix;
    169.                          
    170.                                 // Add the mesh data to the decals mesh, cut and offset it before we pass it
    171.                                 // to the decals instance to be displayed.
    172.                             m_DecalsMesh.Add (l_Mesh, l_WorldToMeshMatrix, l_MeshToWorldMatrix);                    
    173.                             m_DecalsMeshCutter.CutDecalsPlanes (m_DecalsMesh);
    174.                             m_DecalsMesh.OffsetActiveProjectorVertices ();
    175.                             m_Decals.UpdateDecalsMeshes (m_DecalsMesh);
    176.                          
    177.                                 // For the next hit, use a new uv rectangle. Usually, you would select the uv rectangle
    178.                                 // based on the surface you have hit.
    179.                             NextUVRectangleIndex ();
    180.                         }
    181.                     }
    182.                 }
    183.             }
    184.         }
    185.     }
    186. }
     
  24. Dantus

    Dantus

    Joined:
    Oct 21, 2009
    Posts:
    5,667
    Do you get more than one error message? And if so, what is the very first one?
     
  25. sglindme

    sglindme

    Joined:
    Jun 30, 2015
    Posts:
    18
    Nope, that's the only error message I get, and then it doesn't go any farther into the function.
     
  26. Dantus

    Dantus

    Joined:
    Oct 21, 2009
    Posts:
    5,667
    Can you share a screenshot? To me, right now, it makes no sense that you only get this message. There are two things involved, the decals and the projector. The projector is created a few lines before that error message, so it must the the decals. And it is checked at the very beginning of the script execution whether it is null and you would get this error message:
     
  27. FG_dev1

    FG_dev1

    Joined:
    Nov 3, 2014
    Posts:
    44
    Just for future reference, ProBuilder creates it's meshes as static batching by default. Have to change that for each mesh to be able to use decals on it (I can't find a global edit in probuilder to change the defaults).
     
  28. Dantus

    Dantus

    Joined:
    Oct 21, 2009
    Posts:
    5,667
    Thanks for the information!
     
  29. sglindme

    sglindme

    Joined:
    Jun 30, 2015
    Posts:
    18
    I am actually getting that error message (The 'decalsPrefab' does not contain a 'DS_Decals' instance!) but I do have a DS_Decals script on it. I just found something that might be an issue though - On the DS_Decals script, it says "Decal Meshes are Not Yet Assets", with the sub message
    . What does this mean?
     
  30. Dantus

    Dantus

    Joined:
    Oct 21, 2009
    Posts:
    5,667
    @sglindme, the empty mesh warning is not relevant here. But the other message means that your prefab doesn't has a DS_Decals in it. It is important that it is directly in the prefab and not in one of its child objects!
    This is a weakness of this script that was resolved later on. In you Decal System, you should have a newer version of this script which makes sure that the DS_Decals is directly in the prefab's game object.
     
  31. sglindme

    sglindme

    Joined:
    Jun 30, 2015
    Posts:
    18
    I only have the old version on my computer and I don't have access to the right unity account anymore.. could you please paste the new resolved script?

    Also I can post a screenshot but I'm not exactly sure what to make a screenshot of that would be useful. What exactly would you like a screen shot of?
     
  32. Dantus

    Dantus

    Joined:
    Oct 21, 2009
    Posts:
    5,667
    I don't know whether the newer version is compatible. So make sure you have a DS_Decals right in the prefab, that should solve the issue.
     
  33. sglindme

    sglindme

    Joined:
    Jun 30, 2015
    Posts:
    18
    I'm not sure what happened, but now that error has gone away. I didn't think I was getting it at first which is why I didn't mention it earlier, but then it started happening again, and now it's gone away again.. in any case, the result was always the same, which is getting the "object reference not set to an instance of an object" error. I've included a screenshot of the project, with the error on the bottom, and the decal prefab is shown in the inspector on the right.
     

    Attached Files:

  34. Dantus

    Dantus

    Joined:
    Oct 21, 2009
    Posts:
    5,667
    @sglindme, could you add some null reference check and add a debug log in order to show what exactly is null?
     
  35. sglindme

    sglindme

    Joined:
    Jun 30, 2015
    Posts:
    18
    I put in

    Code (CSharp):
    1. if (DecalProjector_1.DecalsMesh == null)
    2. {
    3.     Debug.Log("nulll");
    4. }
    5.  
    And this did register as null. Is that what you mean?
     
  36. Dantus

    Dantus

    Joined:
    Oct 21, 2009
    Posts:
    5,667
    You need to test the following just before you get the error:
    - m_Decals
    - m_DecalsMesh
    - l_Projector
     
  37. sglindme

    sglindme

    Joined:
    Jun 30, 2015
    Posts:
    18
    By l_Projector, do you mean 1_DecalProjector?

    If so, I checked those 3.

    m_Decals and m_DecalsMesh are both null, and 1_DecalProjector is NOT null.
     
  38. Dantus

    Dantus

    Joined:
    Oct 21, 2009
    Posts:
    5,667
    In the original code, it is l_DecalProjector.

    If m_Decals and m_DecalsMesh are null, it means that you are still getting the error message:
    Make sure that the prefab you assigned to the Decals Prefab slot contains a DS_Decals script.
     
  39. FG_dev1

    FG_dev1

    Joined:
    Nov 3, 2014
    Posts:
    44
    Hi again Dantus,

    I have a problem that I'm wondering if you've had/heard of.

    Say I have 4 modular meshes placed in a square pattern to be the floor like so:


    And I had only 1 large square collider for the entire floor. Can you think of a way for getting the right mesh(s) to use for creating a decal from just 1 collider?

    Thanks
     
  40. Dantus

    Dantus

    Joined:
    Oct 21, 2009
    Posts:
    5,667
    I have seen comparable cases, indeed.
    The only thing that can be done, is to find the easiest possible way for your use case to find the required meshes. If you have a square pattern, it is definitely a good starting point.
    What helped in the past, was to forget about the y axis at first, meaning have a look at it from the top only and ignore everything else. Like that you "simplified" it into a 2d problem. The projector can also be simplified into a 2d object and now it is possible to find out which tiles might be affected by it.

    I am aware that this doesn't completely solve your problem. Let me know if you need more details.
     
  41. Crazydadz

    Crazydadz

    Joined:
    Mar 29, 2012
    Posts:
    50
    Hi @Dantus, we want to know how your BumpOfTarget mode of your Decal System is working behind. Do you change the tiling and the offset of the normal map for each decal so on start, it is creating an instance of material? If yes, the decal won't be able to batch?
     
  42. Dantus

    Dantus

    Joined:
    Oct 21, 2009
    Posts:
    5,667
    It somehow works like that. You have to create a material with the correct diffuse texture and bump map with the special shader. The Decal System will then compute separate uv coordinates for the diffuse and bump channels. So, no tiling is being used. With that approach you can use any combination of that particular diffuse and bump map. Those ones can be batched, but certainly not in combination with others.
     
  43. Crazydadz

    Crazydadz

    Joined:
    Mar 29, 2012
    Posts:
    50
    Thank you for the information. Nice that the BumpOfTarget mode still batch decals :)
     
  44. TJHeuvel-net

    TJHeuvel-net

    Joined:
    Jul 31, 2012
    Posts:
    838
    Just doublechecking, is it possible to spawn decals in runtime too?
     
  45. Dantus

    Dantus

    Joined:
    Oct 21, 2009
    Posts:
    5,667
    Yes, you can create decals at runtime, but usually you need a decent coder to integrate it. To get an idea how this can be achieved, you may have a look at this post which contains a coding example:
    http://forum.unity3d.com/threads/decal-system.141792/page-11#post-1247584

    There are some coding examples in the project and besides that there are a few more examples in this thread. In the case that you share can share more information about your use case, I could guide you to the best fitting examples, such that you have a good starting point.
     
    TJHeuvel-net likes this.
  46. puppetsUnity

    puppetsUnity

    Joined:
    Jun 29, 2015
    Posts:
    5
    hello,I want to use Decal System Pro in mobile game,but expensive for me if i can't test first,can i have a free version for test? thx.
     
  47. Dantus

    Dantus

    Joined:
    Oct 21, 2009
    Posts:
    5,667
    Please write me a pm with your email. I am going to get in touch with you.
     
  48. puppetsUnity

    puppetsUnity

    Joined:
    Jun 29, 2015
    Posts:
    5
    i have buy .nice decal system!
     
  49. Bas-Smit

    Bas-Smit

    Joined:
    Dec 23, 2012
    Posts:
    274
    Any plans to submit a 5x version? The upgrade fails so there is some manual labour involved to get it to compile.
     
  50. Dantus

    Dantus

    Joined:
    Oct 21, 2009
    Posts:
    5,667
    The plan is to update it next week and to make it available within 2 weeks. Sorry for the inconvenience!