Search Unity

[RELEASED] Complete Physics Platformer Kit

Discussion in 'Assets and Asset Store' started by Greg Sergeant, Oct 2, 2013.

  1. Besus

    Besus

    Joined:
    Mar 9, 2014
    Posts:
    226
  2. Baskyn

    Baskyn

    Joined:
    Feb 17, 2013
    Posts:
    67
    I've looked through recent posts and it doesn't seem to have been discussed yet. The "Zipline" box holder thing doesn't work anymore with the update. I get the error, "Non-convex MeshColliders with non-kinematic Rigidbodies are no longer supported in Unity 5.0.", and it falls through the ground. If I change the collider to convex, the zipline can't go through the hole, so it doesn't work. Has anyone found a solution to this?
     
  3. Besus

    Besus

    Joined:
    Mar 9, 2014
    Posts:
    226
    My workaround for this was to create 4 child objects; empty cubes with box colliders and arrange them to outline the frame.
     
  4. Baskyn

    Baskyn

    Joined:
    Feb 17, 2013
    Posts:
    67
    I did that also after I wrote that post, but it seems like a bit of a messy solution to me, don't you think?
     
  5. EvilEliot17

    EvilEliot17

    Joined:
    Apr 12, 2014
    Posts:
    9
    Awesome Kit, i started this week to play with this kit, i have a question, i´m using unity 5, i replaced the cube character by a more human character, but i'm using mecanim animations instead the default animations, so once i take an object the animation for the arms position does not override the animation for running, so it appears that the object is floating over the character's head, then i create a mask for the arms, but now the arms don't move when running.

    Any advice on how to add mecanim animations??

    thanks
     
  6. EvilEliot17

    EvilEliot17

    Joined:
    Apr 12, 2014
    Posts:
    9
    Solved, sorry my mistake, i didn´t notice trhowing script also needs the animator.
     
  7. tra2002

    tra2002

    Joined:
    May 11, 2011
    Posts:
    140
  8. artician

    artician

    Joined:
    Nov 27, 2009
    Posts:
    334
    Hello,
    I just finished switching my project to use this tool for its character control system. Since I am just starting out, I am encountering a few expected errors, but there are a couple that I'm unable to solve:

    My player is set up with the Player Move and Throwing scripts, and I have cubes and spheres in my scene, all configured with rigidbodies, colliders, and the "Pushable" Tag. At runtime, when the Grab button is pressed next to a Pushable object, the player and the grabbed object will slowly rotate around one another. The player is still very, slightly controllable, but otherwise there seem to be opposing forces between the two linked objects.

    Thank you for any assistance.
     
  9. redchurch

    redchurch

    Joined:
    Jun 24, 2012
    Posts:
    62
    I recently purchased this and it's a great framework to start. I ended up prototyping with Simple People characters and Jean Moreno's Cartoon FX to get closer to the kind of game idea I'm playing around with. You can check it out here:



    Some thoughts after working with the kit for the past week...

    • More code modularity - Would be nice to see inherited classes or something like Interfaces:
    • For example, the health script is shared, but not its connection to dying (or inversely healing). Could refactor to derive from Interface Killable/Healable or Damagable/Repairable, for example.
    • AI/pathing - I was able to get enemies stuck never reaching their patrol points quite easily. For some reason, setting the path points to a Y value of 1 seemed to mysteriously fix this.
    • An example of lack of code modularity related to custom anims and pathing, I had a lot of trouble between MoveToPoints script overriding the EnemyAI script since I wanted patrol to play walking anims, and chase to play run anims. The simplest fix was to create "Patrolling" boolean and then set up a check within the MoveToPoints to see if patrolling is allowed is true. Then in the EnemyAI, I have "chasing mode" flip the boolean to false on the MoveToPoints. It wasn't obvious to me that the MoveToPoints patrolling overrides the chase behavior in EnemyAI... It would be nice to have the behaviors in their own class, separate from "MoveToPoints." Then have patrolling reference MoveToPoints instead of defining that behavior within MoveToPoints.

    If you use the system "as is" or merely a tutorial/example, you will likely not have many problems, but the moment you begin to customize things you're going to hit some code modularity issues.

    It's probably beyond the scope of the kit, but abstracting out the classes into even smaller, less dependent components would be a huge help. I may try to do that just as a learning case, if the results work out maybe I will share them here.
     
    Last edited: May 15, 2015
  10. Besus

    Besus

    Joined:
    Mar 9, 2014
    Posts:
    226
    This is a bug that comes with the physics changes implemented in Unity 5. I had mentioned a workaround (albeit a somewhat ungraceful one) a page or two back, but unfortunately the grabbing functionality may as well be considered broken if using this kit in Unity 5. I just wound-up scrapping it and making a "Large Pickup" group that would significantly slow the player down and squash the model.

    No doubt that a lot of the base code will need to be expanded/modified in order to add functionality but if you have the skills to add functionality, you have the skills to open up what needs to be opened up.

    As for smaller components, I was actually thinking the opposite while working with this kit. For example I see no reason that the throwing script needs to be its own script given the player is likely the only one who will ever have it. Then you wouldn't need the redundant references to the animator and such. I'd still be curious to see what you break it off in to. :)
     
  11. artician

    artician

    Joined:
    Nov 27, 2009
    Posts:
    334
    I am using this in Unity 5. Unfortunately I got this tool specifically for the grab/drag functionality. To confirm:
    > You are saying that Grab/Drag does not work at all in Unity 5, is that right? (not even the ungraceful workaround works?)
    > Will there be a fix forthcoming at some undetermined date?

    Thank you.
     
  12. redchurch

    redchurch

    Joined:
    Jun 24, 2012
    Posts:
    62
    May be just a working preference, but I wouldn't want to preclude enemies from throwing things. It would be nicer to have that be automatically possible than not, and if you don't want it then you just don't call into or use that script.

    As for "redundant references to the animator" that's kind of my point. Those could be abstracted into their own class and exist in one place instead of two. Basically for my purposes the division between "player" and "enemy" or even "npc" should be confined to a very small set of unique behaviors, with it being easy to bolt-on anything easily to one or any of those. I don't see a reason that there should be "player animation code" vs. "enemy animation code," or similarly, "enemy throwing ability" vs. "player throwing ability." It's all "character throwable."

    To be fair, Throwing, Health, and Damage being their own classes is close enough, it's where you have "player animations" vs. "enemy animations" and also have some animation code in MoveToPoints... The modularity seems to have been lost there.

    P.S. I actually would like enemies be able to pick things up, maybe something to try next. :)
     
    Fowi likes this.
  13. Besus

    Besus

    Joined:
    Mar 9, 2014
    Posts:
    226
    Oh no, it does work but as you mentioned, the player keeps slowly rotating around with the box object. I believe the workaround I had found was disabling the player's rigidbody rotation constraints (on all axis) upon grabbing the box and then restoring the constraints again after they let it go.
     
  14. artician

    artician

    Joined:
    Nov 27, 2009
    Posts:
    334
    Is this something I would need to do in code, or are you saying you have code that does that which fixes the problem, which you could share with me?
     
  15. Besus

    Besus

    Joined:
    Mar 9, 2014
    Posts:
    226
    Of course you'll have to code it, but here is what you will want to do. In Throwing.cs for the GrabPushable function, add:
    Code (CSharp):
    1. GetComponent<Rigidbody>().constraints = RigidbodyConstraints.FreezeRotationX | RigidbodyConstraints.FreezeRotationZ;
    And in DropPushable:
    Code (CSharp):
    1. GetComponent<Rigidbody>().constraints = RigidbodyConstraints.FreezeRotation;
     
    nonameu likes this.
  16. Spram

    Spram

    Joined:
    Apr 11, 2015
    Posts:
    4
    I'm looking at everyone's games and noticing that the enemies animate correctly. In my game, all the enemies that have idle and moving animations (they stand still until they chase you) have the walking animation all screwed up: When they walk they animate the idle animation AND the walk animation instead of just the walk animation. Anyone knows why?

    I think it's because the character is always going back to "idle" while moving and then back to moving again (of course, I'm not sure of that.) Anyone has fixed this?

    The player character works alright.


    EDIT: Haha, just after writing this, I went back into unity and changed the "deceleration" public variable to something lower and that fixed the problem! Maybe... I can't believe that in a few minutes I fixed something that was bugging me for months!

    EDIT2: It went back to screwing up the animations once I changed the "deceleration" variable again. But I fixed it. The weird thing is that if only one of my enemies has too much "deceleration" all the enemies will start bugging out. Weird.

    EDIT3: It works sometimes when I test my game, but never when I play the stand-alone version. What is going on?

    Also, I don't know if this is obvious but I read a really old post about the characters sliding too much even in slight slopes. For those having that problem: change the physics material in the character's collider. I changed my "player"'s "Frinctionless PMat" to a duplicate of "New Physics Material" and adjusted the settings to get it working nicely.. of course it may have unintended side effects, but so far nothing.

    Also, again: Has anyone had any luck with using a XBox 360 controller with this kit? I tried but it was too hard to control.

    Besus, I played your demo and it's really good, awesome stuff. Is it too hard to make the camera rotate up and down?
     
    Last edited: May 19, 2015
  17. Besus

    Besus

    Joined:
    Mar 9, 2014
    Posts:
    226
    Thanks for the compliments, and no, it's not really hard to add vertical camera movement. It's just a matter of adjusting the offset values using a Camera Vertical input. Adding 360 controller support is simple, just add the following inputs: http://wiki.unity3d.com/index.php?title=Xbox360Controller

    The other issues that you mentioned I believe have already been discussed in this thread at some point. The "sliding" taking place is the frictionless material, but also due to the gravity being applied. Turning it on and off at the right times resolves this and prevents unwanted drag while moving (or jumping in to walls) from tweaking the physics material values.

    The animations twitching is because of the TriggerParent script toggling between the colliding state. I posted an updated TriggerParent script a few pages back that should fix this as well.
     
  18. tequyla

    tequyla

    Joined:
    Jul 22, 2012
    Posts:
    327
    Hi :)

    anyone has trying to implement rope system with the kit ?

    Best regards,

    +++
     
  19. Alima-Studios

    Alima-Studios

    Joined:
    Nov 12, 2014
    Posts:
    47
  20. Fowi

    Fowi

    Joined:
    Dec 2, 2013
    Posts:
    30
    Very, very interesting thread... I had this bugs too... I learned a lot more of Unity reading this post... And yeah, good idea the need to modularize this kit or a better focus...
     
    Last edited: May 28, 2015
  21. ahandyman

    ahandyman

    Joined:
    May 29, 2015
    Posts:
    2
    Hello

    1. Can I use this asset with all of its features/scripts with my standard first person controller for the Unity asset package?

    If yes, will I have do additional coding for the assets to work?

    Thanks for the information.

    Tony
     
  22. Fowi

    Fowi

    Joined:
    Dec 2, 2013
    Posts:
    30
    My opinion is;

    This is using rigidbody character motor, and not the standard character motor, so the best solution for you, is to replace ONLY the camera system for other (if you wanted only the first person View)
     
    Last edited: Jun 3, 2015
  23. Holt5

    Holt5

    Joined:
    Jun 12, 2015
    Posts:
    6
    Hi. I have a problem: in Unity 5, I cannot pick up a PickUpable box at all. I press/hold down K and nothing occurs. This is really bad for me since the main reason I bought this kit was for the grabbing/dropping boxes functionality. Has anyone else had this problem (the problem isn't I rotate picking up boxes, I can't pick them up at all) or know why it occurs? If nobody knows I guess I'll have to try to rewrite the code, but a lot of the information out there to help must be outdated for Unity 5 physics...
     
  24. dragonstar

    dragonstar

    Joined:
    Sep 27, 2010
    Posts:
    204
    i have the same issue with the game someone knows how to fixed i will give try but my coding is not that good
     
  25. Holt5

    Holt5

    Joined:
    Jun 12, 2015
    Posts:
    6
    Hi dragonstar.

    I managed to the fix the issue; I can now pick up and throw boxes. I simply did the same thing that Besus/Baskyn did to fix the Frame/Zipline thing using the image tra2002 posted on this page. Messy fix, but it works. If you can't figure this out I can help you with it. However, I've now got another problem with this implementation; I cannot walk on boxes. The character instead simply constantly remains in his jump state when on top of a pushable/pickup box. I'm currently trying to fix it.
     
  26. dragonstar

    dragonstar

    Joined:
    Sep 27, 2010
    Posts:
    204
    can you show the link for image tra2002
     
  27. Holt5

    Holt5

    Joined:
    Jun 12, 2015
    Posts:
    6
  28. Gamma42

    Gamma42

    Joined:
    Feb 3, 2015
    Posts:
    7
    Hey Guys... I have read through the last several pages and to those of you members that have been an incredible resource, I say THANK YOU. Besus and DanielSnd especially. I have had this kit since a little before unity 4.6 and I have gone to it several times for example etc... I have decided to use it for a small project I am doing and I am in need of your expertise. As soon as unity 5 dropped I grabbed it and the first thing I did was make a compound collider for the frame... easy peasy, and problem solved... I noticed that After updating to Unity 5.1 last week I could no longer pickup anything. I noticed Holt5 has this same issue and the rotation fix(which I have done before in initial unity 5 release) does not solve the issue. Ive check my inputs and cannot find anything wrong. Just double checked and did a fresh asset import in unity 5.1... no grab at all. Anyone else having this issue???
     
  29. Gamma42

    Gamma42

    Joined:
    Feb 3, 2015
    Posts:
    7
    Holt I am far (FAR) from an expert But I have read through most of these pages. I wanted to let you know that while I cannot pickup anything either I do not have that issue when on top of pushables. I did the rotation freeze fix(and have a few times) since initial unity5 launch, I do not think the "jump state" is caused by the rotation freeze in the throwing script. Can you describe what you mean when you say "jump state"? is he jumping or just in the "fall/rise" animation state? Also... you said you fixed it so that you could pick up objects? I am curious how you got it working?
     
  30. SketchWork

    SketchWork

    Joined:
    Jul 6, 2012
    Posts:
    208
    Loving this kit. Stripped out a lot of my old code and updated with elements of the Complete Physics Platformer Kit. I did have to re-implement the grabbing code and make some changes for Unity 5 to work correctly. All in all very happy indeed.

    Greg is also a really nice and extremely helpful guy.
     
  31. dragonstar

    dragonstar

    Joined:
    Sep 27, 2010
    Posts:
    204
    this my work in progress using platform kit so far
     
  32. Mr.Stein

    Mr.Stein

    Joined:
    Dec 4, 2013
    Posts:
    169
    Look nice @dragonstar but i think you need to fix the camera in some points..

    Regards
     
  33. dragonstar

    dragonstar

    Joined:
    Sep 27, 2010
    Posts:
    204
    thanks i am still working on that this is in iPad mini running iOS 8.3
     
  34. dizzymediainc

    dizzymediainc

    Joined:
    Apr 6, 2014
    Posts:
    102
    Hello everyone! I am encountering 2 issues with this asset, maybe someone has already covered these things and if so could you link me to the answer?

    Here's my issues:

    - Player slides on everything (I don't want the player to slide at all)
    - When climbing a ladder the player will not always face the wall/ladder

    Any suggestions on how to fix these issues or already posted solutions would be really appreciated! Thanks!

    EDIT: Ok so I fixed one issue but am still having trouble with the ladder climbing, here's the fix for player sliding:

    - Player slides

    1. Turn the player's rigidbody gravity off in PlayerMove::OnCollisionStay when we set velocity to zero.
    2. Turn the player's rigidbody gravity on in the PlayerMove::Jump function
    3. In CharacterMotor::MoveTo, I turn the player rigidbody gravity back on when the AddForce is called.

    - Climbing ladder direction

    For climbing I made these changes but when the player starts to climb it rotates and then falls off of the ladder.

    I added this to the bottom of the Update function of ladder climb script:

    Code (CSharp):
    1.          RaycastHit hit;
    2.          if(Physics.Raycast(transform.position, transform.forward, out hit)){
    3.          transform.rotation = Quaternion.FromToRotation (transform.forward,
    4.         -hit.normal) * transform.rotation;
     
    Last edited: Jul 18, 2015
  35. magique

    magique

    Joined:
    May 2, 2014
    Posts:
    3,513
    I'm seeing an issue that whenever the game starts, the player is somehow in a jump state and starts off in the air and then lands on the ground. I know it's a jump because I also hear the jump sound, although slightly chopped off. Is there any way to prevent it from starting in the jump state?
     
  36. magique

    magique

    Joined:
    May 2, 2014
    Posts:
    3,513
    I figured it out. It's a bug in the Jump Leniancy functionality. Here is the check that is made:

    Code (CSharp):
    1. if (Input.GetButtonDown ("Jump") || airPressTime + jumpLeniancy > Time.time)
    As it turns out, the very first time the game runs, Time.time is equal to zero, so airPressTime + jumpLeniancy is greater and so it thinks I am executing another jump in mid-air. This needs to be able to determine if I ever actually pressed jump to begin with, which I haven't in this case. I'm adding a bool to determine if jump was ever pushed and adding it to this logic.
     
  37. SM2013

    SM2013

    Joined:
    Oct 16, 2013
    Posts:
    20
    Anyone know how to make the camera rotate behind the player after a set time interval... say like 2 seconds... then it auto corrects?

    Just curious... Any help would be greatly appreciated!
     
  38. Besus

    Besus

    Joined:
    Mar 9, 2014
    Posts:
    226
    Create a float which ticks down after whatever you wanted to trigger it (in your case likely start it after the player lets go of a CamHorizontal button) and upon reaching zero:
    Code (CSharp):
    1. float angleSnap = transform.eulerAngles.y - playerMove.transform.eulerAngles.y;
    2. followTarget.RotateAround(target.position, Vector3.up, -angleSnap);
     
  39. SM2013

    SM2013

    Joined:
    Oct 16, 2013
    Posts:
    20
    Couldn't you also trigger that lock rotation variable to go on and off if nothing has been pressed? I noticed when I play the game, if I click that boolean it auto corrects... so I'm wondering if thats an option... turn that bool on then off if nothing is pressed after like 2 secs.
     
  40. Besus

    Besus

    Joined:
    Mar 9, 2014
    Posts:
    226
    You could, but then you would also move the camera to match the players rotation (meaning that it will also move up/down to get where it needs to) which would result in some messy angles after unlocking it again. It's hard to explain, but give it a shot and you'll see what I mean. :)
     
  41. SM2013

    SM2013

    Joined:
    Oct 16, 2013
    Posts:
    20
    Having trouble implementing this....

    So, in my CameraFollow.cs script, in my void update, I'm assuming I put this script-

    Code (CSharp):
    1.  
    2.         float angleSnap = transform.eulerAngles.y - PlayerMove.transform.eulerAngles.y;
    3.         followTarget.RotateAround(target.position, Vector3.up, -angleSnap);
    4.  
    I think I'm having trouble with setting up the float.

    Noob coder here.... but any help would be greatly appreciated. This is really helping me learn and figure this out.

    Thanks Dude.
     
    Last edited: Aug 3, 2015
  42. Selzier

    Selzier

    Joined:
    Sep 23, 2014
    Posts:
    611
    Some notes for making "Grab" work in Unity 5.

    I don't know how it even worked in Unity 4. Throwing.cs is using a "OnTriggerStay" to detect when an object in inside of the "GrabBox". Problem is, OnTriggerStay is only responding to the box collider on it's own gameobject- the PLAYER'S box collider (NOT the "GrabBox" box collider!).

    So if you look at Throwing.cs, an OnTriggerStay should actually be checking the child object 'GrabBox''s Collider, not the collider that is on the player himself.

    (So yes, How did this even work in Unity 4??)

    To fix this, I added a script to the GrabBox object:
    void Start(){
    throwingClassOnPlayer = transform.parent.GetComponent<Throwing>();
    }

    void OnTriggerEnter(Collider other){
    throwingClassOnPlayer.objectInGrabbox = other.gameObject;
    }

    void OnTriggerExit(Collider other){
    throwingClassOnPlayer.objectInGrabbox = null;
    }

    So I had to add a ' public GameObject objectInGrabbox ' to throwing.cs, and removed the "public Gameobject GrabBox", that's not needed. Now instead of checking for a TriggerStay, I just check if objectInGrabbox is null or not during update:

    if (objectInGrabbox != null) {
    if(Input.GetButton("Grab")){

    //pickup
    if(objectInGrabbox.tag == "Pickup" && heldObj == null && timeOfThrow + 0.2f < Time.time){
    LiftPickup(objectInGrabbox.GetComponent<Collider>());
    }
     
  43. Besus

    Besus

    Joined:
    Mar 9, 2014
    Posts:
    226
    It works because when there is a Rigidbody component attached to an object, all children of said object register their OnCollision/OnTrigger functions to the object with the Rigidbody component. In other words despite the GrabBox being a child of the Player, when something enters it, the call is sent to the root Player object (which has the Throwing script checking for OnTriggerStay). You could essentially make as many grab boxes around the player as you like and they would all send their OnTrigger/Collision calls to Player root. I have found this to be both a blessing and a curse. :(
     
  44. knight2601

    knight2601

    Joined:
    Dec 12, 2013
    Posts:
    8
    hi, i've run both the 3d and 2d game demos (OSX) and neither pickup (grab), the trigger not getting fired for pickup and pushable objects. nothing in the scene has been changed.

    Any ideas?
     
  45. Selzier

    Selzier

    Joined:
    Sep 23, 2014
    Posts:
    611
    Read my post 3 posts up ^^^^
     
    Last edited: Aug 13, 2015
  46. Besus

    Besus

    Joined:
    Mar 9, 2014
    Posts:
    226
    Like Selzier, I decided to poke in to this a bit and it seems they changed how the CompoundColliders work in 5.1 now (I just upgraded to 5.1 about a week ago), so yes, the OnTriggerStay will no longer work for the Throwing script on the main Player. However this can be easily remedied by creating a new script titled "ThrowingChild" (no hostile intentions) with the following:
    Code (CSharp):
    1. using UnityEngine;
    2. using System.Collections;
    3.  
    4. public class ThrowingChild : MonoBehaviour
    5. {
    6.     private Throwing throwing;
    7.  
    8.     void Awake()
    9.     {
    10.         throwing = GetComponentInParent<Throwing>();
    11.     }
    12.  
    13.     void OnTriggerStay(Collider other)
    14.     {
    15.         if (Input.GetButtonDown("Grab"))
    16.         {
    17.             throwing.PickupGrab(other);
    18.         }
    19.     }
    20. }
    Stick that script on the GrabBox object itself and then open up the Throwing.cs script. Replace the entire OnTriggerStay section:
    Code (CSharp):
    1.     void OnTriggerStay(Collider other)
    2.     {
    3.         //if grab is pressed and an object is inside the players "grabBox" trigger
    4.         if(Input.GetButton("Grab"))
    5.         {
    6.             //pickup
    7.             if(other.tag == "Pickup" && heldObj == null && timeOfThrow + 0.2f < Time.time)
    8.                 LiftPickup(other);
    9.             //grab
    10.             if(other.tag == "Pushable" && heldObj == null && timeOfThrow + 0.2f < Time.time)
    11.                 GrabPushable(other);
    12.         }
    13.     }
    With the following:
    Code (CSharp):
    1.     public void PickupGrab(Collider pObject)
    2.     {
    3.         //pickup
    4.         if (pObject.tag == "Pickup" && heldObj == null && timeOfThrow + 0.2f < Time.time)
    5.             LiftPickup(pObject);
    6.         //grab
    7.         if (pObject.tag == "Pushable" && heldObj == null && timeOfThrow + 0.2f < Time.time)
    8.             GrabPushable(pObject);
    9.     }
    It seems that 5.1 also fixed a lot of the problems I originally experienced with the grabbing functionality as well. The player no longer spins around while holding on to the box and you can actually control them to move it. However the joint always breaks upon grabbing it, so to fix this, in Throwing.cs, under the "private void GrabPushable(Collider other)" function, change:
    Code (CSharp):
    1.         joint.breakForce = holdingBreakForce;
    2.         joint.breakTorque = holdingBreakTorque;
    To:
    Code (CSharp):
    1.         joint.breakForce = Mathf.Infinity;
    2.         joint.breakTorque = Mathf.Infinity;
    It's not graceful and if something "hooks" on to the item the player is grabbing on to, it could throw them across the map. However it does get the job done and restore the kit to the way that it should be.
     
  47. Selzier

    Selzier

    Joined:
    Sep 23, 2014
    Posts:
    611
    Good stuff Besus!

    Here's a preview of my game using this pack:
     
  48. dragonstar

    dragonstar

    Joined:
    Sep 27, 2010
    Posts:
    204
    look really good congratulations
     
  49. Kanaka1047

    Kanaka1047

    Joined:
    Aug 16, 2013
    Posts:
    1
    Hi, I'm working in a personal project for the college, i'm having some problems trying to use my own character, can somebody share with me his model (an Pack's different one)?, I dont know how to change the model and apply the Character controle.

    Thanks and Sorry for my bad English skills. =(.
     
  50. dragonstar

    dragonstar

    Joined:
    Sep 27, 2010
    Posts:
    204
    hey guys a new level test of the game

     
    Selzier likes this.