UPSB v3

General Discussion / Combo Generator

  1. Fresh
    Date: Sun, Jun 22 2008 09:07:25

    The breakdown generator gave me an idea... A combo generator, that generates a combo from scratch, using giving parameters. For instance, one could have tricks that 'must' be included in the generation, tricks that 'must' be excluded and a length for the combo in number of tricks. It would take a program that 'knew' the possible starting and ending positions for tricks and that could be forced to include wanted tricks or exclude tricks that the user does not want. It would then essentially just have to randomly generate a combo that is linkable[1].

    Are there any programmers on here who could do this? Does anyone have anything to add in terms of ideas or programming tips for anyone who might want to make this? Contraversal idea? Would it prevent people inventing their own combos? Would people just begin using the computer generator too much?

    Edit: An interesting aspect of this combo would be that, if it was random, each trick (except that on force include or exclude) would have an equal chance of being picked. This would probably lead to combos with much greater variety in terms of tricks that one usually sees.

    [1] Just how linkable that combo will be is questionable. It might be good if you can keep sections of a combo and re-generate others. For instance, 'keep tricks 1-9 & 15-21'. The generator then keeps these tricks and generates again the tricks 10-14.

  2. Missle_Z
    Date: Sun, Jun 22 2008 09:10:29

    This is a ool idea but if I'm understanding right...there would be SOOOO many possibilities for the generator. And if everyone did that then it would take out the creativity in combo factor of pen spinning

  3. Fresh
    Date: Sun, Jun 22 2008 09:23:16

    QUOTE (Missle_Z @ Jun 22 2008, 05:10 AM) <{POST_SNAPBACK}>
    This is a ool idea but if I'm understanding right...there would be SOOOO many possibilities for the generator. And if everyone did that then it would take out the creativity in combo factor of pen spinning


    There are a huge number of possibilities for the generator. Combos generated by it will probably be unique each time due to this huge number of possiblities.

    Also, I don't know if everyone would use this to generate a combo from scratch. Some pen spinners may use it as a tool. For instance, they have a combo, however, they do not know how to get from one trick to another in the combo. They could enter the tricks into the generator as tricks 1 and 4, keep tricks 1 & 4 and the generator will place two tricks inbetween that will allow the spinner to get from one trick to the other.

    Will it take the creativity out? If a generator randomly generating tricks that are linkable makes a combo as beautiful as a human pen spinner can, then it will...

  4. Zombo
    Date: Sun, Jun 22 2008 15:53:51

    the possibility of a generator has been discussed in the RD.

    someone on FPSB also already made one, a long time ago.

    take a look: http://benjaminter.net.free.fr/penspinning...enspinning.html

    info: http://thefpsb.free.fr/viewtopic.php?t=4851

  5. Shadowserpant
    Date: Sun, Jun 22 2008 20:12:37

    i dont think people would replace their own originally created combos with generated ones, so i dont think there's any harm to it. It would be more of a cool practice tool, creating combos you wouldn't normally, and seeing how well you could do it

    EDIT: That generator makes some unlinkable combos, or at least combos that don't link smoothly at all

  6. Fresh
    Date: Sun, Jun 22 2008 21:04:04

    QUOTE (Shadowserpant @ Jun 22 2008, 04:12 PM) <{POST_SNAPBACK}>
    i dont think people would replace their own originally created combos with generated ones, so i dont think there's any harm to it. It would be more of a cool practice tool, creating combos you wouldn't normally, and seeing how well you could do it

    EDIT: That generator makes some unlinkable combos, or at least combos that don't link smoothly at all


    The problem of a generator generating unlinkable combos would probably be very hard to solve. That is one reason why I thought it would be nice if it were possible to keep some tricks in the combo and replace only some of them with other randomly generated tricks.

    This generator works, sure and it has used the idea of probability of a trick being used, which is a nice feature. However, it lacks enough tricks and uses old naming convention. It's definately an excellent start and NooBenjy deserves a lot of credit. It can however, be improved upon further.

  7. iMatt
    Date: Sun, Jun 22 2008 21:08:52

    as much as this is a cool idea, coming from the programmers P.O.V. This is alot of programming work. I'm talking, first you need to make a bit of universal code which include all the tricks. Then you need to frame the entire program so each trick can be can be linked. Generating tricks is one, but there's just a fuckload of coding it would take to decypher which trick can be linked with what. Not to mention tackling our hybrid name system. This is a serious project

  8. nateiskewl
    Date: Sun, Jun 22 2008 21:36:18

    Wow, I'd rather create my own combos instead of having a computer doing it for me. Thank you.

  9. ArchAngel2
    Date: Sun, Jun 22 2008 21:41:02

    Interesting idea....but it takes a lot of work... dry.gif

  10. ehntoo
    Date: Mon, Jun 23 2008 01:35:45

    Well, for deciding which trick could be linked to what, you could just give each trick a tag of 0 or 1, where 0 is if it spins clockwise, and 1 if counterclockwise. So for creating a combo you could do a bunch of 0 tricks and it would sort of flow smoothly.

  11. Awesome
    Date: Mon, Jun 23 2008 01:39:14

    ^If you want to go ahead

    I might use one, just to get practice on combos I wouldn't come up with myself. It would be neat if we had one, but if you want combos you can always find a break down of one some where.

    Without a doubt I would use combos I came up with myself for any videos.

  12. Fresh
    Date: Mon, Jun 23 2008 02:12:51

    QUOTE (ehntoo @ Jun 22 2008, 09:35 PM) <{POST_SNAPBACK}>
    Well, for deciding which trick could be linked to what, you could just give each trick a tag of 0 or 1, where 0 is if it spins clockwise, and 1 if counterclockwise. So for creating a combo you could do a bunch of 0 tricks and it would sort of flow smoothly.


    Also, one has to make sure the next trick starts in the slot that the last trick finished in. Some crazy linkages might be created too, such as Thumbspin > Sonic normal 23-34 > Ringaround reverse. I do not think there is a way to prevent that. Perhaps that need not be prevented however, some spinners *cough*Erirornal*cough* need a challenge.

    I'm not sure about that 0 & 1 idea too, it would mean no harmonics, no direction changes. A totally clockwise or anti-clockwise combo everytime. Combos are very rarely entirely clockwise or anti-clockwise.

  13. Shadowserpant
    Date: Mon, Jun 23 2008 02:52:01

    yes, and then there would be palm orientations to consider. this would be a pretty huge project

  14. Zombo
    Date: Mon, Jun 23 2008 03:00:07

    well, if you want to make a good combo generation,

    I'd make it using machine learning.

    each trick would have in memory two lists: one of tricks it links well from and one of tricks it links well to.

    to populate that database, you would input a lot of existing combos. That way, the system knows what can be linked to what. The more combos you feed to the machine, the more valid the combos it generate.

  15. Shadowserpant
    Date: Mon, Jun 23 2008 03:02:13

    ...like google translator oO

  16. 000zero0000
    Date: Mon, Jun 23 2008 07:49:44

    so is upsb gonna make its own generator? english one?

  17. jabss/Psycho Spinner
    Date: Mon, Jun 23 2008 07:56:03

    yeah, this one's kind of french...

    i like the idea for beginners but nothing beats starting from scratch yourself

  18. minche
    Date: Mon, Jun 23 2008 10:49:52

    QUOTE (Zombo @ Jun 23 2008, 05:00 AM) <{POST_SNAPBACK}>
    well, if you want to make a good combo generation,

    I'd make it using machine learning.

    each trick would have in memory two lists: one of tricks it links well from and one of tricks it links well to.

    to populate that database, you would input a lot of existing combos. That way, the system knows what can be linked to what. The more combos you feed to the machine, the more valid the combos it generate.



    that, and also try to keep it visualy appealing.
    that would just be too hard to program considering that we can always come up with combos or ask someone to help us smile.gif
    maybe just to make something for beginners, but that would probably generate almost the same combos :/

  19. Tim
    Date: Mon, Jun 23 2008 12:33:39

    It would be really hard to make something to generate a random combo using all the tricks. If you used maybe just the fundamentals then that would be a little bit easier, but only noobs could use it. It's possible but a lot of work.

    I'm not great at programming but I do know that much.

  20. CudOfCow
    Date: Mon, Jun 23 2008 14:13:28

    QUOTE (Tim @ Jun 23 2008, 08:33 AM) <{POST_SNAPBACK}>
    It would be really hard to make something to generate a random combo using all the tricks. If you used maybe just the fundamentals then that would be a little bit easier, but only noobs could use it. It's possible but a lot of work.

    I'm not great at programming but I do know that much.


    I checked out the french combo generator, i wonder if someone cant just get intouch with NooBenjy, the person who created that and get it translated into english. I like the idea, if not just for the purpose of randomly generated excercises.

  21. 000zero0000
    Date: Mon, Jun 23 2008 20:50:02

    or we could ask him if we can copy his source/coding etc and someone whos good at coding (eso? zombo?) could just change the names and translations a bit.

  22. ehntoo
    Date: Mon, Jun 23 2008 23:37:11

    I got a basic one working in python. It generates a combo of 3 tricks from a database of like 10 (i should add more...) all spinning in the same direction and correct slots. I might finish it up later if I get time. But the only problem is that its not web based.

  23. Fresh
    Date: Mon, Jun 23 2008 23:59:34

    QUOTE (ehntoo @ Jun 23 2008, 07:37 PM) <{POST_SNAPBACK}>
    I got a basic one working in python. It generates a combo of 3 tricks from a database of like 10 (i should add more...) all spinning in the same direction and correct slots. I might finish it up later if I get time. But the only problem is that its not web based.


    Why is that a problem? It could be uploaded for download.

  24. ehntoo
    Date: Tue, Jun 24 2008 00:09:08

    It could be a hassle for people who don't know how to run python scripts.

    But otherwise, I guess so.

    I made a better version than my previous. It creates a 2 move combo from a list of a couple moves. Its not hard to change the combo length, and of course I need to add all the tricks (which will take a long time.)

    CODE
    from random import *
    trickNames = ["Sonic 34-23","Sonic 23-12","Neosonic 12-T1","Thumbaround Rev (Catch 23)"]
    trickDirection = [0,0,0,0] # For trick direciton, 0 indicates clockwise and 1 indicates anti-clockwise
    trickStartingSlot = [3,2,1,0]
    trickEndingSlot = [2,1,0,2]

    x = randint(0,len(trickNames))-1
    print trickNames[x]
    lastTrick = trickNames[x]

    for i in range(0,len(trickNames)):
    if trickNames[i] != lastTrick:
    if trickDirection[i] == trickDirection[x]:
    if trickEndingSlot[x] == trickStartingSlot[i]:
    print trickNames[i]
    lastTrick = trickNames[i]

  25. Shadowserpant
    Date: Wed, Jun 25 2008 03:01:12

    yea.. idk wtf python is, which is probably why i dont know wtf that thing is
    also, since a full combo of tricks going the same direction isnt that desireable either, what if you could input a probablility for when the combo changes direction?

  26. toast
    Date: Wed, Jun 25 2008 05:13:19

    This is a very cool idea, but in my opinion it is very deeply flawed.

    Combos generated by this program would not be able to understand handrotations and tilts.

    For example, twisted sonic and reverse twisted sonic obviously travel in different directions. However, with utilization of handtilting, the two tricks flow together very smoothly.

    How can you implement this element of pen spinning into such a computerized generator? How is a computer suppose to know when handtilting would be utilized between the linking of two tricks? Repetitions of tricks?

    no matter how brilliant the program is, no computer can ever sense the flow of a combo like the pen spinner itself can.

    Our opposable thumbs are another problem. The tricks here (rotation wise) function very differently from other tricks. linking into these fingers would require a ton of thought, and i have a feeling a lot of combos linking into them would not be possible.

    A superhuman program in theory can actually encompass all of this, but the question remains...why? A freestyle and a combo should come naturally, and you can link a bunch of tricks together with a program, but it might not look good. I suppose something to generate ideas from is appropriate, but even then, isn't it better to rely on your own sense of creativity?

  27. Zombo
    Date: Wed, Jun 25 2008 05:27:26

    QUOTE (toast @ Jun 25 2008, 01:13 AM) <{POST_SNAPBACK}>
    How can you implement this element of pen spinning into such a computerized generator? How is a computer suppose to know when handtilting would be utilized between the linking of two tricks? Repetitions of tricks?


    QUOTE (zombo)
    well, if you want to make a good combo generation,

    I'd make it using machine learning.

    each trick would have in memory two lists: one of tricks it links well from and one of tricks it links well to.

    to populate that database, you would input a lot of existing combos. That way, the system knows what can be linked to what. The more combos you feed to the machine, the more valid the combos it generate.


    computer doesn't know care. If a user inputs a combo which uses handtilting or whatever, it tells the computer "this linkage is possible". The computer doesn't care how the linkage is done, all it needs to know is that it can be done, something which is input by the user. When it's randomly generating a combo, it searches for the next trick it can link to. It's reasoning is that "since a user has told me this trick can go after that one, I can generate a combo where those tricks are linked to each other". That's all it needs to know.

    in that sense the computer is "dumb". it has no appreciation for PS whatsoever. It doesn't know why a combo looks good. all it cares if it's possible and "follows the rules".

  28. Fresh
    Date: Wed, Jun 25 2008 14:15:17

    This is what I just came up with. It is simple, but lengthy: (the bulk of the post content is after the code quote)

    CODE
    #include
    #include

    using namespace std;

    void generate();
    void slot();

    char number;
    int length, m, t[50], s[51];
    short int x;

    int main()
    {
                cout << "Number tricks? Y/N:";    //Numbering of tricks is optional and not needed yet.
                cin >> number;                    //Will try to add feature which will allow some
                if(number == 'Y' || number == 'y')//tricks to be kept while others are regenerated
                {                                 //so the user has some control over the combo.
                    cout << "Tricks will be numbered." << endl;
                }
                else
                {
                    cout << "Tricks will not be numbered." << endl;
                }
        x  = 0;
        m = 0; //Reset numbers.
        cout << "Enter combo length (range 1-50" << endl;
        cin >> length;
        while(x < 51)
        {
                s[x] = rand() % 4; // These shall be the random numbers for the slots.
                ++x;
        }
        x = 0; //Reset x as it is used again in the next statement.
        while(x < 50)
         {
                 t[x] = rand() % 30; //Generate array of random numbers.
                 ++x;
         }
         x = 0; //Reset x as this value will be used later.
         cout << "Combo: " << endl << endl;
        while(length > x)
        {
                generate(); //Function that generates the tricks.
                slot(); //Function that generate the slots.
                ++x;
                //cout << length << "  " << x << endl; //This line is just for helping find bugs.
        }
        cout << endl << endl << endl; //Just to keep things tidy(ish).
        main(); //Recall main so one can keep on generating combos.
        return 0;
    }

    void generate() //Basically a huge list of tricks from which a random one shall be selected.
    {
         if(number == 'y' || number == 'Y')
         {
             x = x + 1;
             cout << x << ": ";
             --x;
         }
         if(t[x] == 0) // Each number represents a trick and this outputs the corresponding trick.
         {
              cout << "Thumbaround";
         }
         else if(t[x] == 1)
         {
              cout << "Indexaround";
         }
         else if(t[x] == 2)
         {
              cout << "Middlearound";
         }
         else if(t[x] == 3)
         {
              cout << "Ringaround";
         }
         else if(t[x] == 4)
         {
              cout << "Pinkyaround";
         }
         else if(t[x] == 5)
         {
              cout << "Thumbaround Reverse";
         }
         else if(t[x] == 6)
         {
              cout << "Indexaround Reverse";
         }
         else if(t[x] == 7)
         {
              cout << "Middlearound Reverse";
         }
         else if(t[x] == 8)
         {
              cout << "Ringaround Reverse";
         }
         else if(t[x] == 9)
         {
              cout << "Pinkyaround Reverse";
         }
         else if(t[x] == 10)
         {
              cout << "Fingerless Thumbaround";
         }
         else if(t[x] == 11)
         {
              cout << "Fingerless Indexaround";
         }
         else if(t[x] == 12)
         {
              cout << "Fingerless Middlearound";
         }
         else if(t[x] == 13)
         {
              cout << "Fingerless Ringaround";
         }
         else if(t[x] == 14)
         {
              cout << "Fingerless Pinkyaround";
         }
         else if(t[x] == 15)
         {
              cout << "Fingerless Thumbaround Reverse";
         }
         else if(t[x] == 16)
         {
              cout << "Fingerless Indexaround Reverse";
         }
         else if(t[x] == 17)
         {
              cout << "Fingerless Middlearound Reverse";
         }
         else if(t[x] == 18)
         {
              cout << "Fingerless Ringaround Reverse";
         }
         else if(t[x] == 19)
         {
              cout << "Fingerless Pinkyaround Reverse";
         }
         else if(t[x] == 20)
         {
              cout << "Sonic";
         }
         else if(t[x] == 21)
         {
              cout << "Inverse Sonic";
         }
         else if(t[x] == 22)
         {
              cout << "Twisted Sonic";
         }
         else if(t[x] == 23)
         {
              cout << "Sonic Reverse";
         }
         else if(t[x] == 24)
         {
              cout << "Shadow";
         }
          else if(t[x] == 25)
         {
              cout << "Inverse Shadow";
         }
         else if(t[x] == 26)
         {
              cout << "Shadow Reverse";
         }
         else if(t[x] == 27)
         {
              cout << "Inverse Shadow Reverse";
         }
         else if(t[x] == 28)
         {
              cout << "Backaround";
         }
         else if(t[x] == 29)
         {
              cout << "MiddleBackaround";
         }
         else if(t[x] == 30)
         {
              cout << "RingBackaround";
         }
         else if(t[x] == 31)
         {
              cout << "PinkyBackaround";
         }
         else if(t[x] == 32)
         {
              cout << "Backaround Reverse";
         }
           else if(t[x] == 33)
         {
              cout << "MiddleBackaround Reverse";
         }
         else if(t[x] == 34)
         {
              cout << "RingBackaround Reverse";
         }
         else if(t[x] == 35)
         {
              cout << "PinkyBackaround Reverse";
         }
         else if(t[x] == 36)
         {
              cout << "Backspin 1.5";
         }
           else if(t[x] == 37)
         {
              cout << "MiddleBackspin 1.5";
         }
         else if(t[x] == 38)
         {
              cout << "RingBackspin 1.5";
         }
         else if(t[x] == 39)
         {
              cout << "PinkyBackspin 1.5";
         }
         else if(t[x] == 40)
         {
              cout << "Backspin Reverse 1.5";
         }
           else if(t[x] == 41)
         {
              cout << "MiddleBackspin Reverse 1.5";
         }
         else if(t[x] == 42)
         {
              cout << "RingBackspin Reverse 1.5";
         }
         else if(t[x] == 43)
         {
              cout << "PinkyBackspin Reverse 1.5";
         }
         else if(t[x] == 44)
         {
              cout << "Palmspin 1.5";
         }
           else if(t[x] == 45)
         {
              cout << "Backhandspin 1.5";
         }
         else if(t[x] == 46)
         {
              cout << "Halftap";
         }
         else if(t[x] == 47)
         {
              cout << "Halftap Reverse";
         }
         else if(t[x] == 46)
         {
              cout << "Fulltap";
         }
         else if(t[x] == 47)
         {
              cout << "Fulltap Reverse";
         }
         else if(t[x] == 46)
         {
              cout << "Charge";
         }
         else if(t[x] == 47)
         {
              cout << "Pass";
         }
          else if(t[x] == 47)
         {
              cout << "Levitator";
         }
         else if(t[x] == 46)
         {
              cout << "Levitator Reverse";
         }
         else if(t[x] == 47)
         {
              cout << "Backriser";
         }
         else
         {
             cout << "Number out of range" << endl;
         }
    }

    void slot() //Chooses pseudo random slots for tricks to finish in.
    {
         if(x == 0)
         {
                 switch(s[51])
                 {
                             case 0:
                                  cout << " 12-";
                                  break;
                             case 1:
                                  cout << " 23-";
                                  break;
                             case 2:
                                  cout << " 34-";
                                  break;
                             case 3:
                                  cout << " T1-";
                                  break;
                 }
                 switch(s[x])
                 {
                              case 0:
                                  cout << "12";
                                  break;
                             case 1:
                                  cout << "23";
                                  break;
                             case 2:
                                  cout << "34";
                                  break;
                             case 3:
                                  cout << "T1";
                                  break;
                 }
         }
         else
         {
             switch(s[x - 1])
             {
                         case 0:
                                  cout << " 12";
                                  break;
                             case 1:
                                  cout << " 23";
                                  break;
                             case 2:
                                  cout << " 34";
                                  break;
                             case 3:
                                  cout << " T1";
                                  break;
             }
             switch(s[(x)])
             {
                         case 0:
                                  cout << "-12";
                                  break;
                             case 1:
                                  cout << "-23";
                                  break;
                             case 2:
                                  cout << "-34";
                                  break;
                             case 3:
                                  cout << "-T1";
                                  break;
             }
         }
              if((length - 1) != x)
         {
             cout << " > ";
         }
         else
         {
             cout << endl;
         }
         }


    Program download

    Basically thus far it allows you to generate a combo a given number of tricks long that theoretically works.

    Probable future features:

    - Add option that some tricks can be 'kept' while others are replaced by newly generated tricks (that is what the number tricks option is there for)
    - Allow users to input two tricks and then get the generator to 'fill in' the middle
    - Allow users to choose to have some tricks that won't be used in the generation (exclude ringaround for example)
    - Allow users to select a trick or tricks that must be in the combo
    - Allow user to generate random combo or to use 'odds' (i.e. more common tricks such as Sonic and Thumbaround are more likely to come up than say, RingBackarounds or Fingerspins)

    Possible future features:
    - GUI
    - Machine learning??? (very unlikely - Seems too difficult)

    - Any other ideas are welcomed as is constructive critique.

    I thought that by having the tricks in a numbered list, at some point they could be sorted and put into categories. For instance, numbers 0-499 are all the arounds tricks, 500-999 are all the sonic tricks etc. In this way one could also add an option to 'exclude sonics' or 'must include x number of around tricks' or 'increase probability of air tricks'.

    I know everyone is going to complain about there being no GUI, however, I would rather get the program itself working first and then look at making a GUI. Also, I haven't ever attempted to make a GUI so I would have to learn that if it were to be implimented. I'll probably only look into making a GUI if this project has some interest in it.

    And machine learning Zombo, do you know much about this and how it might be implimented?

  29. toast
    Date: Wed, Jun 25 2008 17:10:06

    @Zombo
    Yes, i think that would be the best way to go, instead of listing all of the fingerings and expecting the computer to generate. but realize that would be more then two times the work needed.

    @fresh
    I wish I could code as well as you ohmy.gif

    My ability in programming is limited to one high school course, so I am unable to comment on the code. However, a major thing I noticed you missed in your list of possible features is a "difficulty" sorter. Take a look at this.



    Now perhaps I just got an unlucky run, but this program seems to have a pinkyaround fetish-a trick that has never been seen done. (I think levi did it with a giant pen) To avoid stuff like this, a difficulty sorter is needed.

    Not to be demanding, but I believe you are on the wrong track by instantly adding a 50 trick library with pseudo fingerings. I believe it is best to start with 10 (or even 5) tricks that are well known and easy, and expand from there. (these 10 or so tricks would have their fingerings/what links to them fleshed out) The main meat of the program IS the fingering connections after all.

    A good start, but I still say it is flawed without Zombo's idea. And even after doing so, a computer can never detect "flow".

  30. Zombo
    Date: Wed, Jun 25 2008 17:43:32

    i can write my program,

    i just need a long long list of combo breakdowns (at least 50-100) which is NEATLY written / properly formatted.

    by neatly written i mean, no typo, all tricks written in full, with slot positions.

    and trick notation must be consistent across all breakdowns.

    ------

    the cool thing with machine learning is that the combo generator will generates combos based on what it has received.

    my guess is that if you, for instance, only feed it Eriror's combos, the generator will give you combos that are "eriror style". Likewise if you only feed it korean, etc... But if you feed it from a variety of sources, you might get style-neutral combos.

    the other thing is that a combo is much more than a breakdown. There are things that define a combo which cannot be put on a piece of paper. This is the "intangible", the "feelings", the "emotions". This is why two spinners can make the same combo and look different.

    Therefore even if you get a generated combo, it is up to you to "interpret" it the way you see fit.

  31. 000zero0000
    Date: Wed, Jun 25 2008 17:53:20

    so are we making this into a huge project?

  32. Zombo
    Date: Wed, Jun 25 2008 17:55:25

    QUOTE (000zero0000 @ Jun 25 2008, 01:53 PM) <{POST_SNAPBACK}>
    so are we making this into a huge project?


    programming this would be best done individually.

    but if you want to help me, grab me some breakdowns and format them neatly.

  33. 000zero0000
    Date: Wed, Jun 25 2008 17:56:34

    QUOTE (Zombo @ Jun 25 2008, 12:55 PM) <{POST_SNAPBACK}>
    programming this would be best done individually.

    but if you want to help me, grab me some breakdowns and format them neatly.



    sure. im pretty sure there are a couple lying around upsb somewhere...

  34. Fresh
    Date: Wed, Jun 25 2008 18:07:56

    Hey Zombo,

    I took this combo from breakdown requests and tidied it up:

    Continuous Middlebakaround 23-23 x4 -> Pass 23-34 -> RingBak 34-34 -> Pinkybak 34-34 -> Sonic 34-23 -> Twisted Sonic 23-12 -> IndexAround 12-12 -> Pass 12-23 -> Charge 23 -> Charge Reverse 23 -> Warped Sonic Reverse 23-12 -> Pass Reverse 12-23 -> Pass Reverse 23-34 -> Demons Sonic 34-12 -> Pass 12-23 -> Twisted Sonic 23-12 -> Neosonic 12-T1 -> Charge Reverse T1-12 -> Fingerless Reverse Thumbaround -> Pass 12-23 -> Twisted Sonic 23-12 -> Pass 12-T1 -> Tipped Sonic T1-12 -> Pass T2-23 -> Pass Reverse 23-12 -> Pass Reverse 12-23 -> Pass Reverse 23-34 -> Demons Sonic 34-12 -> Pass Reverse 12-23 -> Charge Rev 23 -> Inverse Twisted Sonic 23-12 -> Inverse Warped Sonic 12-23 -> Charge Reverse 23 -> Twisted Sonic 23-12 -> Pass Reverse 12-T1

    Is that suitable? If so, I'll give you a lot more in the same format.

    Also, what exactly will your program be doing? Will it be a complete generator? Or will it just be the machine learning part of it? (it pains me to say 'just' when machine learning seems to be the most complex part of this project).

  35. Zombo
    Date: Wed, Jun 25 2008 18:13:50

    QUOTE (Fresh @ Jun 25 2008, 02:07 PM) <{POST_SNAPBACK}>
    Hey Zombo,

    I took this combo from breakdown requests and tidied it up:

    MiddleBak 23-23 -> Middlebak 23-23 -> Middlebak 23-23 -> Middlebak 23-23 -> Pass 23-34 -> RingBak 34-34 -> Pinkybak 34-34 -> Sonic 34-23 -> Twisted Sonic 23-12 -> IndexAround 12-12 -> Pass 12-23 -> Charge 23 -> Charge Reverse 23 -> Warped Sonic Reverse 23-12 -> Pass Reverse 12-23 -> Pass Reverse 23-34 -> Demons Sonic 34-12 -> Pass 12-23 -> Twisted Sonic 23-12 -> Neosonic 12-T1 -> Charge Reverse T1-12 -> Fingerless Reverse Thumbaround -> Pass 12-23 -> Twisted Sonic 23-12 -> Pass 12-T1 -> Tipped Sonic T1-12 -> Pass T2-23 -> Pass Reverse 23-12 -> Pass Reverse 12-23 -> Pass Reverse 23-34 -> Demons Sonic 34-12 -> Pass Reverse 12-23 -> Charge Rev 23 -> Inverse Twisted Sonic 23-12 -> Inverse Warped Sonic 12-23 -> Charge Reverse 23 -> Twisted Sonic 23-12 -> Pass Reverse 12-T1

    Is that suitable? If so, I'll give you a lot more in the same format.

    Also, what exactly will your program be doing? Will it be a complete generator? Or will it just be the machine learning part of it? (it pains me to say 'just' when machine learning seems to be the most complex part of this project).


    breakdowns have to be as verbose as possible, also you ahve to be consistent, if you write "Pinkybak", then you should also write "Middlebak". Also I plan for the generator to support interrupted notation. Using hybrids is fine, but then you have to be consistent and ALWAYS use hybrid notation whenever possible, or it might skew the results. Some tricks, such as FL Rev TA, do not have slot indication, so either it must be marked down or the generator will manually ask for clarifications.

  36. NaDa
    Date: Wed, Jun 25 2008 18:21:07

    Does this work?

    Sonic Normal 34-23 ~> Pass Normal 24-13 -> Pass Reverse 13-T1 -> Tipped Sonic Reverse T1-T3 -> Ringaround Normal 0.5 T3-34 -> Sonic Normal 34-23 ~> Pass Normal 24-13 -> Twisted Sonic Reverse 12-23 -> Twisted Sonic Reverse 23-34 -> Pass Normal 34-23 -> Twisted Sonic Normal 23-T2 -> Thumbaround Normal T2-T1 -> Thumbaround Reverse T1-23 -> Thumbaround Normal 23-T1 -> Pass Reverse T1-12 -> Pass Reverse 12-23 -> Thumbaround 23-T1 -> Pass Reverse T1-12 -> Pass Reverse 12-23 -> Thumbaround 23-T1 -> Pass Reverse T1-12 -> Pass Reverse 12-23 -> Thumbaround 23-T1 -> Pass Reverse T1-12 -> Twisted Sonic Reverse 12-23 -> Twisted Sonic Reverse 23-34 -> Pass Normal 34-23 -> Twisted Sonic Normal 23-12 -> Pass Reverse 12-T1 -> Charge Normal T1 -> Pass Reverse T1-12 -> Twisted Sonic Reverse 12-23 -> Twisted Sonic Reverse 23-34 -> Pass Normal 34-23 -> Twisted Sonic Normal 23-12 -> Thumbaround Normal 12-T1 ~> Shadow 2.5 12-12

  37. Zombo
    Date: Wed, Jun 25 2008 18:22:36

    I also want to add that the breakdowns do not have to be complete combos.


    THey could also be examples of:

    - Common "mini-combos"
    - Common finishers
    - Common hybrids
    - Common linkages

    even that information will yield decent combos.

    etc.

    QUOTE (NaDa @ Jun 25 2008, 02:21 PM) <{POST_SNAPBACK}>
    Does this work?

    Sonic Normal 34-23 ~> Pass Normal 24-13 -> Pass Reverse 13-T1 -> Tipped Sonic Reverse T1-T3 -> Ringaround Normal 0.5 T3-34 -> Sonic Normal 34-23 ~> Pass Normal 24-13 -> Twisted Sonic Reverse 12-23 -> Twisted Sonic Reverse 23-34 -> Pass Normal 34-23 -> Twisted Sonic Normal 23-T2 -> Thumbaround Normal T2-T1 -> Thumbaround Reverse T1-23 -> Thumbaround Normal 23-T1 -> Pass Reverse T1-12 -> Pass Reverse 12-23 -> Thumbaround Normal 23-T1 -> Pass Reverse T1-12 -> Pass Reverse 12-23 -> Thumbaround Normal 23-T1 -> Pass Reverse T1-12 -> Pass Reverse 12-23 -> Thumbaround Normal 23-T1 -> Pass Reverse T1-12 -> Twisted Sonic Reverse 12-23 -> Twisted Sonic Reverse 23-34 -> Pass Normal 34-23 -> Twisted Sonic Normal 23-12 -> Pass Reverse 12-T1 -> Charge Normal T1 -> Pass Reverse T1-12 -> Twisted Sonic Reverse 12-23 -> Twisted Sonic Reverse 23-34 -> Pass Normal 34-23 -> Twisted Sonic Normal 23-12 -> Thumbaround Normal 12-T1 ~> Shadow Normal 2.5 12-12


    again, you have to consistent. Either you always mention Normal, or you don't.

  38. Fresh
    Date: Wed, Jun 25 2008 18:27:28

    I see what you want Zombo... Expect a PM shortly.

  39. yoonkwun
    Date: Tue, Dec 30 2008 02:43:57

    I got bored so I made a simple combo generator in C++, it randomly picks from 10 generally easy tricks and you can control the length of the combo. The combos are possible but most of the times not very smooth.

    http://www.mediafire.com/download.php?zwmkmgzymkj

    Update: added backaround so now its 11 tricks:

    Around

    Sonic

    Charge

    Pass

    Around Reverse

    Sonic Reverse

    Charge Reverse

    Pass Reverse

    Twisted Sonic

    Twisted Sonic Reverse

    Backaround


    Spoiler:
    CODE
    #include
    using namespace std;

        char x[256];
        int currentTrick=0, trickNumber, trickCount, pos, slot;
        string file;

    void tricks (string& a, string& b);

    int main ()
    {
        
        printf ("Combo Generator v1.1\n");
        printf ("Programmed by yoonkwun www.upsb.info\n");
        printf ("---------------------\n");

    for (;;){

        for (;;)
        {
            printf ("Number of tricks: ");
            fgets (x,256,stdin);
            if (isdigit(x[0]))
            {
               trickCount = atoi (x);
               break;
            }
            else
               printf ("Please try again.\n");
            
        }

        struct trick {
          string posNot;
          string name;
    } trick[trickCount];

        printf ("Generating combo...\n");
        srand ( time(NULL) );
        slot = (rand() % 4) + 1;
        pos = (rand() % 2) + 1;

        for (;currentTrick    {
            trickNumber = (rand() % 11) + 1;
            tricks(trick[currentTrick].posNot, trick[currentTrick].name);  
        }
        
        currentTrick = 0;
        
        for (int printTrick=0;printTrick    {
            cout << trick[printTrick].name << " " << trick[printTrick].posNot;
            if (printTrick < trickCount-1)
               cout << " -> ";
        }
        cout << endl;
        
    }
        return 0;
    }





    void tricks (string& a, string& b)
    {
        if (trickNumber == 1){ //Around
           if (pos == 1){
              pos = 2;
              if (slot == 1){
                 a = "t1-t1";
                 b = "Thumbaround";}
              else if (slot == 2){
                 a = "12-12";
                 b = "Indexaround";}
              else if (slot == 3){
                 a = "23-23";
                 b = "Middlearound";}
              else if (slot == 4){
                 a = "34-34";
                 b = "Ringaround";}  
              currentTrick++;
              }
              }
        else if (trickNumber == 2){ //Sonic
           if (slot == 1)
            ;
           else{
              if (slot == 2)
                 a = "12-t1";
              else if (slot == 3)
                 a = "23-12";
              else if (slot == 4)
                 a = "34-23";
              b = "Sonic";
              slot--;
              currentTrick++;
              }
              }
        else if (trickNumber == 5){ //Charge
              if (slot == 1)
                 a = "t1";
              else if (slot == 2)
                 a = "12";
              else if (slot == 3)
                 a = "23";
              else if (slot == 4)
                 a = "34";
              b = "Charge";
              currentTrick++;
              }
        else if (trickNumber == 4){ // Pass Down
           if (slot == 4)
            ;
           else{
              if (pos==1)
                 pos = 2;
              else
                  pos = 1;
              if (slot == 1)
                 a = "t1-12";
              else if (slot == 2)
                 a = "12-23";
              else if (slot == 3)
                 a = "23-34";
              slot++;
              b = "Pass";
              currentTrick++;
              }
              }
        else if (trickNumber == 3){ // Around Reverse
           if (pos == 2){
              pos = 1;
              if (slot == 1){
                 a = "t1-t1";
                 b = "Thumbaround Reverse";}
              else if (slot == 2){
                 a = "12-12";
                 b = "Indexaround Reverse";}
              else if (slot == 3){
                 a = "23-23";
                 b = "Middlearound Reverse";}
              else if (slot == 4){
                 a = "34-34";
                 b = "Ringaround Reverse";}
              currentTrick++;
              }
           else
            ;
           }
        else if (trickNumber == 6){ // Sonic Reverse
           if (slot == 4)
            ;
           else{
               if (slot ==1)
                  a = "t1-12";
               else if (slot == 2)
                  a = "12-23";
               else if (slot == 3)
                  a = "23-34";
               b = "Sonic Reverse";
               slot++;
               currentTrick++;
               }
               }
        else if (trickNumber == 7){ // Charge Reverse
             if (slot == 1)
                a = "t1";
             else if (slot == 2)
                a = "12";
             else if (slot == 3)
                a = "23";
             else if (slot == 4)
                a = "34";
             b = "Charge Reverse";
             currentTrick++;
             }
        else if (trickNumber == 8){ // Pass Reverse Down
           if (slot == 4)
            ;
           else{
               if (slot == 1)
                  a = "t1-12";
               else if (slot == 2)
                  a = "12-23";
               else if (slot == 3)
                  a = "23-34";
               if (pos == 1)
                  pos = 2;
               else
                  pos = 1;
               slot++;
               b = "Pass Reverse";
               currentTrick++;
               }
           }
        else if (trickNumber == 9){ // Twisted Sonic
            if (slot == 1)
             ;
            else{
               if (pos == 1)
                  pos = 2;
               else
                   pos = 1;
               if (slot == 2)
                  a = "12-t1";
               else if (slot == 3)
                  a= "23-12";
               else if (slot == 4)
                  a = "34-23";
               slot--;
               b = "Twisted Sonic";
               currentTrick++;
               }
               }
        else if (trickNumber == 10){ // Twisted Sonic Reverse
             if (slot == 4)
              ;
             else{
                 if (slot == 1)
                    a = "t1-12";
                 else if (slot == 2)
                    a = "12-23";
                 else if (slot == 3)
                    a = "23-34";
                 if (pos == 1)
                    pos = 2;
                 else
                     pos = 1;
                 slot++;
                 b = "Twisted Sonic Reverse";
                 currentTrick++;
                 }
                 }
        else if (trickNumber == 11){ //Backaround
             if (slot == 1 && pos == 2)
              ;
             else{
                  if (slot == 1 && pos == 1){
                     a = "t1-t1";
                     b = "Indexbackaround";
                     pos = 2;}
                  else if (slot == 2 && pos == 1){
                     a = "12-12";
                     b = "Middlebackaround";
                     pos = 2;}
                  else if (slot == 2 && pos == 2){
                     a = "12-t1";
                     b = "Indexbackaround";
                     slot--;}
                  else if (slot == 3 && pos == 1){
                     a = "23-23";
                     b = "Ringbackaround";
                     pos = 2;}
                  else if (slot == 3 && pos == 2){
                     a = "23-12";
                     b = "Middlebackaround";
                     slot--;}
                  else if (slot == 4 && pos == 1){
                     a = "34-34";
                     b = "Pinkybackaround";
                     pos = 2;}
                  else if (slot == 4 && pos == 2){
                     a = "34-23";
                     b = "Ringbackaround";
                     slot--;}
                  currentTrick++;
                  }
                  }
    }

  40. Zombo
    Date: Tue, Dec 30 2008 15:16:58

    your code is OK except everything is hardcoded.

  41. Santa
    Date: Tue, Dec 30 2008 15:45:08

    QUOTE (Fresh @ Jun 22 2008, 03:07 AM) <{POST_SNAPBACK}>
    The breakdown generator gave me an idea...

    Where is this Breakdown generator?

  42. Glamouraz
    Date: Tue, Dec 30 2008 15:47:15

    Um.. about the computer not knowing when to tilt your palm etc.. that could be your own for your own creativity and style to come up whether the tricks should be done palm down, palm side etc..