1. This site uses cookies. By continuing to use this site, you are agreeing to our use of cookies. Learn More.
  2. Hey Guest, If you'd like to instant message with many other users, then join our
    Official Rune-Status Discord Server!
    Dismiss Notice
  3. Got your own Server? Looking for a Server to play right now??
    Make sure you check out the Public Server Directory!
    Dismiss Notice
  4. If you're new to the Rsps Scene and want to jump straight into learning how to Set-up and Customise your own RuneScape Private Sever then check out the Guides and Tutorials for RS2 here.
    Dismiss Notice
Dismiss Notice
Hey Guest,
Are you sure your posting in the Right Sections?
If your unsure which RuneTek version you are working with visit this page to find out.

OSRS How to find any Animation or GFX ID

Discussion in 'Guides & Tutorials' started by Stan, Jul 20, 2017.

  1. As I get many requests to find animations/GFX ids for people, and cba to answer them all, here's a tutorial on how to find any OSRS anim/GFX.
    Let me know if I forgot something ;)

    NOTE: It takes practice to make perfect. Don't expect to find everything within seconds at the beginning. However once you get used to reading the dumps, it will take no time at all as you'll recognize patterns. Tried to explain everything in here as simple as possible, but you simply have to do it yourself to learn it. I can find most ids within seconds now, but some may still take minutes.

    First of all, you'll need Item, NPC, Sequence and Spotanims dumps. I use OpenRS for this. (Here's a link to a #137 or so dump if you cba to set it up: Dropbox - openRS dump #137 or so.zip)
    You'll also need a model viewer, I use RSMV for this.

    Item animations
    Item animations such as woodcutting or mining animations are pretty much the easiest to find.
    Simply get the item ID, add 512 to this number, and search for "HandItem = NUMBER;" in your sequences dump.
    The ID of the Infernal axe is 13241.
    13241 + 512 = 13753.

    Searched for this number in my sequences dump, got this:
    case 2115:
        type.frameIDs = new int[] { 1, 12, 17, 18, 19, 20, 21, 22, 23, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 13, 14, 15, 16 };
        type.frameLengths = new int[] { 4, 6, 8, 9, 6, 4, 3, 4, 4, 7, 7, 6, 7, 6, 7, 6, 6, 7, 8, 7, 7, 6, 6 };
        type.leftHandItem = 0;
        type.rightHandItem = 13753;
    break;
    
    case 2116:
        type.frameIDs = new int[] { 0, 28, 34, 35, 36, 37, 38, 39, 40, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 29, 30, 31, 32, 33 };
        type.frameLengths = new int[] { 7, 7, 7, 7, 3, 3, 4, 7, 5, 5, 4, 9, 10, 5, 9, 2, 4, 7, 5, 6, 6, 6, 6, 6 };
        type.anIntArray2126 = new int[] { 0, 0, 0, 0, 0, 0, 700177, 0, 0, 0, 0, 0, 0, 966417 };
        type.oneSquareAnimation = true;
        type.leftHandItem = 13753;
        type.rightHandItem = 0;
    break;
    
    case 2117:
        type.priority = 1;
        type.frameIDs = new int[] { 384, 385, 386, 387, 388, 389 };
        type.frameLengths = new int[] { 4, 4, 10, 12, 6, 4 };
        type.anIntArray2126 = new int[] { 0, 0, 0, 700177 };
        type.frameStep = 6;
        type.forcedPriority = 0;
        type.leftHandItem = 13753;
        type.anInt2133 = 4;
        type.rightHandItem = 0;
        type.delayType = 1;
        type.resetWhenWalk = 1;
    break;
    
    case 3183:
        type.frameIDs = new int[] { 1, 12, 20, 21, 22, 23, 24, 25, 26, 0, 3, 4, 5, 6, 7, 8, 13, 14, 15, 16, 17, 18, 19, 0, 3, 4, 5, 6, 7, 8, 9, 10, 11 };
        type.frameLengths = new int[] { 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3 };
        type.animationFlowControl = new int[] { 1, 2, 9, 11, 13, 15, 17, 19, 37, 39, 41, 43, 45, 164, 166, 168, 170, 172, 174, 176, 178, 180, 182, 183, 185, 191, 192, 9999999 };
        type.oneSquareAnimation = true;
        type.leftHandItem = 11322;
        type.rightHandItem = 13753;
    break;
    
    case 3184:
        type.frameIDs = new int[] { 542, 549, 531, 537, 530, 533, 541, 538, 546, 536, 545, 535, 544, 543, 551, 547, 540, 550, 529, 534, 548, 532, 539, 552 };
        type.frameLengths = new int[] { 7, 7, 7, 7, 3, 3, 4, 7, 5, 5, 4, 9, 10, 5, 9, 2, 4, 7, 5, 6, 6, 6, 6, 6 };
        type.anIntArray2126 = new int[] { 0, 0, 0, 0, 0, 0, 700177, 0, 0, 0, 0, 0, 0, 966417 };
        type.oneSquareAnimation = true;
        type.leftHandItem = 13753;
        type.rightHandItem = 0;
        type.resetWhenWalk = 1;
    break;
    
    case 4512:
        type.priority = 1;
        type.frameIDs = new int[] { 19, 15, 39, 7, 37, 40, 9, 17, 42, 6, 27, 26, 38, 8, 41, 12, 43, 20, 23, 16, 25 };
        type.frameLengths = new int[] { 3, 3, 3, 3, 3, 3, 3, 3, 3, 6, 2, 2, 2, 6, 2, 2, 2, 2, 2, 2, 3 };
        type.forcedPriority = 6;
        type.leftHandItem = 13745;
        type.rightHandItem = 13753;
        type.resetWhenWalk = 1;
    break;

    The infernal axe has 6 animations. 2115, 2116, 2117, 3183, 3184 and 4512.


    Weapon animations
    Weapon animations are trickier to get. I'll describe three ways I use to get these:

    Method 1: by other anim id
    This explanation works best with an example. In this example i'll be looking for the heavy ballista animation.
    You'll have to find something related to the heavy ballista of which you know the animation. For example the Demonic Gorilla NPC, of which we know the stance animation is 7230.
    Go to case 7230 in the sequences dump, and search/try around this number for the heavy ballista one.
    To make it a bit easier: Item and NPC animations are close to each other. Also weapon animations have a forcedPriority in most cases. In this case I just tried the sequences with a forced priority below 7230, and voila, 7218 was the attack animation.
    Tried a bit around 7218, and found out that 7219 was the special, 7220 the stance and 7221 the running for example.
    case 7218:
        type.priority = 2;
        type.frameIDs = new int[] { 3, 75, 27, 24, 58, 68, 35, 71, 38, 57, 14, 10, 42, 89, 72, 31, 9 };
        type.frameLengths = new int[] { 2, 2, 2, 4, 4, 4, 4, 4, 4, 5, 4, 3, 6, 4, 3, 4, 4 };
        type.forcedPriority = 6;
    break;
    
    case 7219:
        type.priority = 1;
        type.frameIDs = new int[] { 11, 65, 43, 53, 91, 4, 45, 84, 76, 77, 44, 1, 21, 90, 88, 26 };
        type.frameLengths = new int[] { 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 5 };
        type.oneSquareAnimation = true;
    break;
    
    case 7220:
        type.frameIDs = new int[] { 30, 0, 15, 56, 59, 6, 47, 5, 18, 92, 8, 96, 41 };
        type.frameLengths = new int[] { 4, 5, 4, 5, 5, 5, 4, 5, 4, 5, 5, 5, 4 };
    break;
    
    case 7221:
        type.frameIDs = new int[] { 36, 61, 95, 25, 13, 63, 87, 12, 94, 69, 97, 62, 49, 2, 64, 32 };
        type.frameLengths = new int[] { 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2 };
    break;
    
    case 7222:
        type.priority = 1;
        type.frameIDs = new int[] { 29, 52, 48, 23, 46, 51, 19, 74, 16, 33, 93, 70, 81, 28, 66, 22, 34, 82 };
        type.frameLengths = new int[] { 4, 4, 4, 4, 4, 4, 4, 4, 4, 12, 4, 4, 4, 4, 4, 4, 4, 4 };
    break;
    
    case 7223:
        type.frameIDs = new int[] { 50, 86, 78, 60, 85, 79, 80, 7, 67, 83, 20, 54, 37, 73, 17, 55 };
        type.frameLengths = new int[] { 3, 3, 3, 2, 3, 2, 2, 2, 3, 2, 3, 2, 3, 2, 3, 2 };
    break;
    
    case 7224:
        type.frameIDs = new int[] { 103, 176, 125, 78, 17, 201, 85, 37, 216, 259, 171, 121, 31 };
        type.frameLengths = new int[] { 2, 2, 2, 2, 2, 3, 2, 2, 2, 2, 2, 3, 4 };
    break;
    
    case 7225:
        type.frameIDs = new int[] { 193, 0, 165, 59, 71, 178, 132, 172, 35, 69, 169, 128, 229, 200, 32, 120 };
        type.frameLengths = new int[] { 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 3, 3, 3, 3, 4, 4 };
        type.forcedPriority = 6;
    break;
    
    case 7226:
        type.frameIDs = new int[] { 62, 238, 141, 152, 91, 213, 226, 77, 26, 243, 84, 236, 66, 182 };
        type.frameLengths = new int[] { 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, 2, 4, 5, 12 };
        type.forcedPriority = 6;
    break;
    
    case 7227:
        type.frameIDs = new int[] { 219, 22, 28, 94, 63, 123, 136, 114, 149, 151, 130, 40, 248, 217, 124, 104 };
        type.frameLengths = new int[] { 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 5, 6, 3, 1, 1 };
        type.forcedPriority = 6;
    break;
    
    case 7228:
        type.frameIDs = new int[] { 115, 19, 87, 1, 188, 108, 27, 245, 227, 70, 58, 34, 9, 147, 189, 220, 134 };
        type.frameLengths = new int[] { 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 3, 3, 2, 3, 3, 2 };
        type.forcedPriority = 6;
    break;
    
    case 7229:
        type.frameIDs = new int[] { 162, 95, 14, 98, 80, 81, 51, 30, 192, 76, 72, 244, 56, 67 };
        type.frameLengths = new int[] { 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 3 };
        type.frameStep = 1;
        type.forcedPriority = 10;
    break;
    
    case 7230:
        type.frameIDs = new int[] { 113, 49, 36, 24, 184, 60, 7, 218, 145, 20, 199, 82, 214, 65, 143, 194, 75, 13, 186 };
        type.frameLengths = new int[] { 4, 4, 4, 4, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 2 };
    break;

    Method 2: by GFX id
    If a weapon has an unique animation AND gfx bound to it, you'll only have to find one of them.
    So if you already have the GFX id, it's easy to find the animation.
    In your spotanims dump, search for the GFX id, and get the animation ID bound to it. Then in your sequences dump, search for this ID and try the ones around it.
    In this case you know that the GFX id of the Barrelchest anchor is 1027.
    This is the spotanims dump for this ID:
    case 1027:
        type.animationID = 5871;
        type.modelID = 23152;
    break;

    As you can see the animation ID bound to this GFX is 5871.
    Search for this ID in the sequences dump, and look for cases around it and just try them or learn to recognize attack animations.
    In this case, the special attack animation was just 1 animation above it:
    case 5870:
        type.frameIDs = new int[] { 70, 233, 243, 244, 245, 246, 247, 248, 249, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 234, 235, 236, 237, 238, 239, 240, 241, 242 };
        type.frameLengths = new int[] { 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4 };
        type.animationFlowControl = new int[] { 1, 2, 9, 11, 13, 15, 17, 19, 37, 39, 41, 43, 45, 164, 166, 168, 170, 172, 174, 176, 178, 180, 182, 183, 185, 191, 192, 9999999 };
        type.oneSquareAnimation = true;
        type.forcedPriority = 6;
        type.leftHandItem = 0;
        type.rightHandItem = 11399;
    break;

    Method 3: by release date
    As the method title says: look for animations or GFX you can find easily for items, npcs or whatever that was also released in the same or the previous update. (Just take a look at the OSRS update logs)
    Then just apply the other methods with these IDs, or try to find them manually around those IDs by simply trying them out ingame.


    NPC animations
    Released all NPC animations here: All OSRS NPC anims grouped
    Easier than explaining it all :p


    Misc. animations
    For animations like skillcape emotes and other weird animations that can't really be grouped, I use one of the following ways:

    Method 1: by release date
    Find them with help of other animations/gfx ids that can be found easier. Check out method 3 under Weapon animations for more details.

    Method 2: by patterns
    With emotes for example, you'll notice certain patterns in the sequences dumps.
    case 855:
        type.priority = 1;
        type.frameIDs = new int[] { 225, 226, 225, 226, 225, 226, 225, 226 };
        type.frameLengths = new int[] { 10, 10, 10, 10, 10, 10, 10, 10 };
        type.forcedPriority = 2;
        type.leftHandItem = 0;
        type.rightHandItem = 0;
        type.resetWhenWalk = 1;
    break;
    
    case 856:
        type.priority = 1;
        type.frameIDs = new int[] { 258, 259, 260, 261, 258, 259, 260, 261, 258, 259, 260, 261 };
        type.frameLengths = new int[] { 5, 4, 5, 4, 5, 4, 5, 4, 5, 4, 5, 4 };
        type.forcedPriority = 2;
        type.leftHandItem = 0;
        type.rightHandItem = 0;
        type.resetWhenWalk = 1;
    break;
    
    case 857:
        type.priority = 1;
        type.frameIDs = new int[] { 249, 250, 251, 252, 253, 254, 255, 256, 257, 256, 257, 256, 257, 256, 255, 254, 253, 252, 251, 250, 249 };
        type.frameLengths = new int[] { 4, 2, 2, 2, 2, 2, 3, 8, 8, 8, 8, 8, 8, 8, 3, 2, 2, 2, 2, 2, 4 };
        type.forcedPriority = 2;
        type.leftHandItem = 0;
        type.rightHandItem = 0;
        type.resetWhenWalk = 1;
    break;
    As you can see with emotes, resetWhenWalk is 1, the forcedpriority is 2, and for emotes that don't show your weapon both handitems get set to 0.
    These are clear patterns you can look for to find other emotes. For example, I wanted to find the air guitar emote animation.
    I simply searched for those last four lines in the sequence dump file, and found this eventually:
    case 4751:
        type.priority = 1;
        type.frameIDs = new int[] { 446, 442, 450, 426, 433, 448, 454, 424, 451, 434, 427, 452, 453, 428, 425, 444, 430, 443, 449, 431, 428, 425, 444, 443, 449, 431, 428, 425, 443, 444, 449, 431, 428, 425, 443, 449, 449, 431, 428, 443, 441 };
        type.frameLengths = new int[] { 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 3 };
        type.forcedPriority = 2;
        type.leftHandItem = 0;
        type.rightHandItem = 0;
        type.resetWhenWalk = 1;
    break;


    GFX
    I use one of the following four ways to find any GFX id. The fourth method is only if you REALLY can't find it using the other methods (Shouldn't happen very often).
    NOTE: Projectiles will show up as invisible most of the time with the default ::gfx command. Create a ::projectile command for your source, or use method 1/3 if you can to be sure it's the right one.

    Method 1: by Model ID
    In your items or NPC dump, search for items or NPCs that were released in the same, previous or next update.
    Check out their model ID, search for this ID in your model viewer, and simply look around it for the GFX you need.
    Then simply search for this modelID your spotanims dump.

    The inventory model of the Abyssal Bludgeon is 29597.
    I looked around in my model viewer real quick, and found out that the model ID of the GFX is 29475. (Gyazo - 2828730189f8ea2ebe970768b6b2f3ad.gif)
    In the spotanims dump I simply looked for 29475, and found this:
    case 1284:
        type.recolorToReplace = new short[] { -11219, -11207, -11211, -11215 };
        type.animationID = 7115;
        type.recolorToFind = new short[] { 19404, 15143, 15134, 15254 };
        type.modelID = 29475;
    break;

    Method 2: by animation ID (from the same update)
    Check out method 2 at Weapon animations, simply reverse this.
    You can do this with an animation related to the GFX, or simply with an animation from the same update. I mostly just search for the animation ID of a different animation minus the last number in the spotanims dump.
    I wanted to know the GFX for the Abyssal Sire spitting a minion.
    A stance animation for the Abyssal Sire is 4527.

    In the spotanims dump, I simply search for "animationID = 452", "animationID = 453", "animationID = 454", "animationID = 455" etc. Notice how i'm leaving out the last number to find it faster.
    When searching for "animationID = 452", I directly got the following hit:
    case 1274:
        type.animationID = 4526;
        type.modelID = 29474;
    break;
    Tested it, and it was the spitting minion GFX :)

    Method 3: by other GFX
    If the GFX is a recolor of a different GFX, or uses the same animation ID, simply look for the model/animation ID of the other GFX you do know in your spotanims dump.
    For example for the recently released Dragon throwing axe, I looked for the rune throwing axe GFX id that I already had (48) in the spotanims dump, and saw that the bound animationID is 371.
    I searched for this animation ID in the whole dump, and got the following hit at almost the end of the file. Before even checking it, I was already certain this would be the dragon throwingaxe GFX.
    case 1320:
        type.animationID = 371;
        type.modelID = 32778;
    break;

    Method 4: Watch all GFX (Only if really desperate)
    If you double checked, and really still can't find the GFX, you're gonna have a very fun time.
    For myself, I created a command that would spawn 10 test lab rats (:hurr:) which would cycle every 10 GFX every few seconds.
    [​IMG]
    I recorded this, and can watch it back at any time when I need a GFX, pretty neat.

    You can re-create something like this yourself, or download my few months old one (13-11-2016) for around #121 I believe here: Dropbox - All GFX 13-11-2016.mp4
    Haven't updated it since as i've been able to find every single other new one using the other 3 methods. I only use this sometimes for very old GFX like Verac's special attack.


    ENJOY :)
     
    #1 Stan, Jul 20, 2017
    Last edited by a moderator: Jul 21, 2017
    • Like Like x 5
    • Informative Informative x 1
    • List
  2. Very nice tutorial! I appreciate how in depth you went, and I can't see how this won't be super helpful.
     
  3. Really nice tutorial, thanks alot!
     
  4. Excellent guide, thanks for the share.

    Also to others, there are always the latest OSRS revision Sequences and Spotanim dumps contained in the Cache and Dumps resources.
     
  5. Very helpfull tutorial! thanks allot for sharing!
     
  6. thanks for this tut
     
  7. Thank you, used this to find a couple of animations.
     
  8. Great guide! This will be super useful, I know personally I have spent far too long searching for animations in the past.
     
  9. This is great, thanks a lot.
     
Loading...