Thread: Scape Editor [Pre-400 Cache Editor]

Page 1 of 8 123 ... LastLast
Results 1 to 10 of 73
  1. #1 Scape Editor [Pre-400 Cache Editor] 
    Ex Rune-Scaper

    Join Date
    Jun 2008
    Posts
    3,534
    Thanks given
    457
    Thanks received
    1,257
    Rep Power
    990
    Scape Editor - Is a cache editor for the pre-400 era before the major "engine overhaul"

    Latest Release: 3.0.0
    Scape Editor is a cache editor developed to be easy-to-use and fix problems in the 317 community. Scape Editor is a complete rewrite of my previous tool rsam found here. Scape Editor is highly extensible in which you can create plugins to read your own formats.

    Purchase: $19.99
    https://sellfy.com/p/l9bz/

    What you get
    • 1-time purchase with free updates (There's a lot I have planned for this)
    • Includes 13 plugins
    • scape-editor.jar the GUI
    • The source code for the main program, osdc-plugin and 317-plugin


    Plugins included: (Need a plugin that will work with your format? I will create it for you, for $20)
    • osdc-plugin (reads osdc format)
    • 317-plugin (reads a vanilla 317 cache)



    Roadmap



    Features
    Too many to list, view spoiler below

    Spoiler for Plugins:


    Spoiler for 317 Texture Packer:

    Features
    • Add/Remove/Replace/Export textures
    • Modify texture properties (resizeWidth, resizeHeight and encodingType)
    • Search textures
      Attached image

      Attached image

      Attached image



    Spoiler for 317 Sprite Editor:

    Features
    • Pack sprites into 317 cache
    • Change sprite properties such as (offsetX, offsetY, and encodingType)
    • Export sprites
    • Create new image archives
    • Remove image archives
    • Add/Remove/Replace sprites
    • Search an image archive by its name
    • Has validation so you can't corrupt your cache (Will prevent you from adding sprites if the sprites you're trying to add have too many colors or the image archive exceeds color capacity)
      Attached image



    Spoiler for 317 Interface Editor:

    Features
    • Only renders type sprite, dialog, text, rectangles, and containers. Does not currently render... models, item list, inventory, scrollbar, or content types.
    • You can navigate to all interfaces packed into your cache
      Attached image
    • You can click on child interfaces and a yellow border will popup that shows you where the component is located on the container interface.
      Attached image
    • You can also view the properties of all interfaces
    • Only shows interfaces that are packed into your cache.
    • Does not support custom sprites.
    • It's fairly simple so there's still a lot of features to come.



    Spoiler for 317/OSRS Model Viewer:

    • Z-buffering
    • Shading
    • Wireframes
    • Supports OSRS and 317 models
    • Pitch, yaw, roll, scale, translate transforms
    • Shows colors on models
    • View vertices
    • Move around model using mouse
    • Scale model
    • Add files from a directory or by selecting the files you want (Either gzipped or not)


    Attached image

    Attached image

    Attached image


    Spoiler for Store/Index Editor:

    Features
    • Add/Remove/Replace files
    • Create/Remove indexes
    • Export files
    • Search stores/indexes
    • Search files

    Attached image


    Spoiler for 317 Archive Editor:

    Features
    • Add/Remove/Replace/Export archive entries
    • Create/Remove/Export archives
    • Name archives
    • Identify hashes
    • Search archives
    • Search archive entries

    Attached image


    Spoiler for Npc Definition Editor:

    Features
    • Read any format (as long as you have a plugin that can read it)
    • Search definitions
    • View all properties

    Attached image


    Spoiler for Item Definition Editor:

    Features
    • Read any format (as long as you have a plugin that can read it)
    • Search definitions
    • View all properties

    Attached image


    Spoiler for Object Definition Editor:

    Features
    • Read any format (as long as you have a plugin that can read it)
    • Search definitions
    • View all properties

    Attached image




    Spoiler for Older media:

    Attached image

    Attached image

    Attached image

    Viewing configs



    Packing configs



    Scape Editor - Packing Models, Animations, Music and Maps



    Scape Editor - Creating New Indexes


    Scape Editor - Renaming File Stores


    Scape Editor - Identifying hashes




    Spoiler for How to create a Config Plugin:

    1. Create a new project
    2. Add scape-editor.jar as a library to that project
    3. Define a class like this

    Code:
    package plugin;
    
    import scape.editor.api.io.RSBuffer;
    import scape.editor.gui.plugin.Plugin;
    import scape.editor.gui.plugin.extension.config.NpcDefinitionExtension;
    
    @Plugin(name="OSDC Npc Definition Plugin", authors = "Nshusa", version = 1.0)
    public class NpcDefinitionPlugin extends NpcDefinitionExtension {
    
        @Override
        protected String fileName() {
            return "npc.dat";
        }
    
        @Override
        protected void decode(int currentIndex, RSBuffer buffer) {
            id = currentIndex;
            while(true) {
                int opcode = buffer.readUByte();
                if (opcode == 0) {
                    return;
                } else if (opcode == 1) {
                    int len = buffer.readUByte();
                    modelId = new int[len];
                    for (int i = 0; i < len; i++) {
                        modelId[i] = buffer.readUShort();
                    }
                } else if (opcode == 2) {
                    name = buffer.readString();
                } else if (opcode == 12) {
                    size = buffer.readUByte();
                } else if (opcode == 13) {
                    standingAnimation = buffer.readUShort();
                } else if (opcode == 14) {
                    walkingAnimation = buffer.readUShort();
                } else if (opcode == 15) {
                    buffer.readUShort();
                } else if (opcode == 16) {
                    buffer.readUShort();
                } else if (opcode == 17) {
                    walkingAnimation = buffer.readUShort();
                    halfTurnAnimation = buffer.readUShort();
                    quarterClockwiseTurnAnimation = buffer.readUShort();
                    quarterAnticlockwiseTurnAnimation = buffer.readUShort();
                    if (halfTurnAnimation == 65535) {
                        halfTurnAnimation = walkingAnimation;
                    }
                    if (quarterClockwiseTurnAnimation == 65535) {
                        quarterClockwiseTurnAnimation = walkingAnimation;
                    }
                    if (quarterAnticlockwiseTurnAnimation == 65535) {
                        quarterAnticlockwiseTurnAnimation = walkingAnimation;
                    }
                } else if (opcode >= 30 && opcode < 35) {
                    if (actions == null) {
                        actions = new String[5];
                    }
    
                    actions[opcode - 30] = buffer.readString();
    
                    if (actions[opcode - 30].equalsIgnoreCase("Hidden")) {
                        actions[opcode - 30] = null;
                    }
                } else if (opcode == 40) {
                    int len = buffer.readUByte();
                    recolorOriginal = new int[len];
                    recolorTarget = new int[len];
                    for (int i = 0; i < len; i++) {
                        recolorOriginal[i] = buffer.readUShort();
                        recolorTarget[i] = buffer.readUShort();
                    }
    
                } else if (opcode == 41) {
                    int len = buffer.readUByte();
    
                    for (int i = 0; i < len; i++) {
                        buffer.readUShort(); // textures
                        buffer.readUShort();
                    }
                } else if (opcode == 60) {
                    int len = buffer.readUByte();
                    additionalModels = new int[len];
                    for (int i = 0; i < len; i++) {
                        additionalModels[i] = buffer.readUShort();
                    }
                } else if (opcode == 93) {
                    aBoolean87 = false;
                } else if (opcode == 95)
                    combatLevel = buffer.readUShort();
                else if (opcode == 97)
                    scaleXZ = buffer.readUShort();
                else if (opcode == 98)
                    scaleY = buffer.readUShort();
                else if (opcode == 99)
                    aBoolean93 = true;
                else if (opcode == 100)
                    lightModifier = buffer.readByte();
                else if (opcode == 101)
                    shadowModifier = buffer.readByte();
                else if (opcode == 102)
                    headIcon = buffer.readUShort();
                else if (opcode == 103)
                    rotation = buffer.readUShort();
                else if (opcode == 106 || opcode == 118) {
                    varbit = buffer.readUShort();
    
                    if (varbit == 65535) {
                        varbit = -1;
                    }
    
                    varp = buffer.readUShort();
    
                    if (varp == 65535) {
                        varp = -1;
                    }
    
                    int value = -1;
    
                    if (opcode == 118) {
                        value = buffer.readUShort();
                    }
    
                    int len = buffer.readUByte();
                    morphisms = new int[len + 2];
                    for (int i = 0; i <= len; i++) {
                        morphisms[i] = buffer.readUShort();
                        if (morphisms[i] == 65535) {
                            morphisms[i] = -1;
                        }
                    }
                    morphisms[len + 1] = value;
                } else if (opcode == 109) {
                    aBoolean84 = false;
                } else if (opcode == 107 || opcode == 111) {
    
                } else {
                    System.out.println(String.format("npc def invalid opcode: %d", opcode));
                }
            }
        }
    
        public int id = -1;
        public int quarterAnticlockwiseTurnAnimation = -1;
        public int varbit = -1;
        public int halfTurnAnimation = -1;
        public int varp = -1;
        public int combatLevel = -1;
        public final int anInt64 = 1834;
        public String name;
        public String actions[];
        public int walkingAnimation = -1;
        public int size = 1;
        public int[] recolorTarget;
        public int[] additionalModels;
        public int headIcon = -1;
        public int[] recolorOriginal;
        public int standingAnimation = -1;
        public long interfaceType = -1L;
        public int rotation = 32;
        public int quarterClockwiseTurnAnimation = -1;
        public boolean aBoolean84 = true;
        public int lightModifier;
        public int scaleY = 128;
        public boolean aBoolean87 = true;
        public int morphisms[];
        public int scaleXZ = 128;
        public int shadowModifier;
        public boolean aBoolean93;
        public int[] modelId;
        public int interfaceZoom = 0;
    
    }
    4. Export this project as a jar and add it to the folder at user.home/Scape-Editor/Plugins
    Attached image

    5. That's it! It's that simple. Now just run scape-editor.jar and you can view your configs!
    Last edited by CrazyPanda; 03-09-2019 at 03:29 AM. Reason: title change
    Attached image
    Reply With Quote  
     


  2. #2  
    Registered Member Beershake's Avatar
    Join Date
    Mar 2011
    Age
    28
    Posts
    287
    Thanks given
    49
    Thanks received
    25
    Rep Power
    2
    I've been looking for something that would handle my custom needs, and the new features of this are convincing me.
    I'm buying it right now!
    Reply With Quote  
     

  3. #3  
    Registered Member
    Join Date
    May 2018
    Posts
    28
    Thanks given
    0
    Thanks received
    7
    Rep Power
    38
    Looks nice, although I don't know much about cache editors.
    The Exiled Project Thread - become the boss.
    Reply With Quote  
     

  4. #4  
    Ex Rune-Scaper

    Join Date
    Jun 2008
    Posts
    3,534
    Thanks given
    457
    Thanks received
    1,257
    Rep Power
    990
    Yesterday I did lowered the price from $29.99 to $14.99.

    Quote Originally Posted by The C Word View Post
    Looks nice, although I don't know much about cache editors.
    Well the nice thing about this tool is you really don't have to know much about the cache to use it. It should be fairly straight forward.

    Quote Originally Posted by Beershake View Post
    I've been looking for something that would handle my custom needs, and the new features of this are convincing me.
    I'm buying it right now!
    Yeah I use this tool for my cache which is very custom. I have like 8 indexes.
    Attached image
    Reply With Quote  
     

  5. #5  
    Ex Rune-Scaper

    Join Date
    Jun 2008
    Posts
    3,534
    Thanks given
    457
    Thanks received
    1,257
    Rep Power
    990
    Now has config plugin support! (No encoding yet, but you can view and search all properties)

    • Plugin system allows you to read your own formats (This format also allows you to use your own naming on fields)
    • Item Def Editor
    • Object Def Editor
    • Npc Def Editor
    • Varbit Editor


    I include 2 plugins
    • osdc-plugin (reads osdc format)
    • 317-plugin (reads vanilla 317 format)




    Attached image

    Attached image

    Attached image

    Attached image

    Attached image

    To add plugins

    1. Create a new project
    2. Add scape-editor.jar as a library to that project
    3. Define a class like this

    Code:
    package plugin;
    
    import scape.editor.api.io.RSBuffer;
    import scape.editor.gui.config.RSNpcDefPlugin;
    import scape.editor.gui.plugin.Plugin;
    
    @Plugin(name="Npc Definition Plugin", authors = "Nshusa", version = 1.0)
    public class NpcDefinitionPlugin extends RSNpcDefPlugin {
    
        @Override
        protected String fileName() {
            return "npc.dat";
        }
    
        @Override
        protected void decode(int currentIndex, RSBuffer buffer) {
            id = currentIndex;
            while(true) {
                int opcode = buffer.readUByte();
                if (opcode == 0) {
                    return;
                } else if (opcode == 1) {
                    int len = buffer.readUByte();
                    modelId = new int[len];
                    for (int i = 0; i < len; i++) {
                        modelId[i] = buffer.readUShort();
                    }
                } else if (opcode == 2) {
                    name = buffer.readString();
                } else if (opcode == 12) {
                    size = buffer.readUByte();
                } else if (opcode == 13) {
                    standingAnimation = buffer.readUShort();
                } else if (opcode == 14) {
                    walkingAnimation = buffer.readUShort();
                } else if (opcode == 15) {
                    buffer.readUShort();
                } else if (opcode == 16) {
                    buffer.readUShort();
                } else if (opcode == 17) {
                    walkingAnimation = buffer.readUShort();
                    halfTurnAnimation = buffer.readUShort();
                    quarterClockwiseTurnAnimation = buffer.readUShort();
                    quarterAnticlockwiseTurnAnimation = buffer.readUShort();
                    if (halfTurnAnimation == 65535) {
                        halfTurnAnimation = walkingAnimation;
                    }
                    if (quarterClockwiseTurnAnimation == 65535) {
                        quarterClockwiseTurnAnimation = walkingAnimation;
                    }
                    if (quarterAnticlockwiseTurnAnimation == 65535) {
                        quarterAnticlockwiseTurnAnimation = walkingAnimation;
                    }
                } else if (opcode >= 30 && opcode < 35) {
                    if (actions == null) {
                        actions = new String[5];
                    }
    
                    actions[opcode - 30] = buffer.readString();
    
                    if (actions[opcode - 30].equalsIgnoreCase("Hidden")) {
                        actions[opcode - 30] = null;
                    }
                } else if (opcode == 40) {
                    int len = buffer.readUByte();
                    recolorOriginal = new int[len];
                    recolorTarget = new int[len];
                    for (int i = 0; i < len; i++) {
                        recolorOriginal[i] = buffer.readUShort();
                        recolorTarget[i] = buffer.readUShort();
                    }
    
                } else if (opcode == 41) {
                    int len = buffer.readUByte();
    
                    for (int i = 0; i < len; i++) {
                        buffer.readUShort(); // textures
                        buffer.readUShort();
                    }
                } else if (opcode == 60) {
                    int len = buffer.readUByte();
                    additionalModels = new int[len];
                    for (int i = 0; i < len; i++) {
                        additionalModels[i] = buffer.readUShort();
                    }
                } else if (opcode == 93) {
                    aBoolean87 = false;
                } else if (opcode == 95)
                    combatLevel = buffer.readUShort();
                else if (opcode == 97)
                    scaleXZ = buffer.readUShort();
                else if (opcode == 98)
                    scaleY = buffer.readUShort();
                else if (opcode == 99)
                    aBoolean93 = true;
                else if (opcode == 100)
                    lightModifier = buffer.readSignedByte();
                else if (opcode == 101)
                    shadowModifier = buffer.readSignedByte();
                else if (opcode == 102)
                    headIcon = buffer.readUShort();
                else if (opcode == 103)
                    rotation = buffer.readUShort();
                else if (opcode == 106 || opcode == 118) {
                    varbit = buffer.readUShort();
    
                    if (varbit == 65535) {
                        varbit = -1;
                    }
    
                    varp = buffer.readUShort();
    
                    if (varp == 65535) {
                        varp = -1;
                    }
    
                    int value = -1;
    
                    if (opcode == 118) {
                        value = buffer.readUShort();
                    }
    
                    int len = buffer.readUByte();
                    morphisms = new int[len + 2];
                    for (int i = 0; i <= len; i++) {
                        morphisms[i] = buffer.readUShort();
                        if (morphisms[i] == 65535) {
                            morphisms[i] = -1;
                        }
                    }
                    morphisms[len + 1] = value;
                } else if (opcode == 109) {
                    aBoolean84 = false;
                } else if (opcode == 107 || opcode == 111) {
    
                } else {
                    System.out.println(String.format("npc def invalid opcode: %d", opcode));
                }
            }
        }
    
        public int id = -1;
        public int quarterAnticlockwiseTurnAnimation = -1;
        public int varbit = -1;
        public int halfTurnAnimation = -1;
        public int varp = -1;
        public int combatLevel = -1;
        public final int anInt64 = 1834;
        public String name;
        public String actions[];
        public int walkingAnimation = -1;
        public int size = 1;
        public int[] recolorTarget;
        public int[] additionalModels;
        public int headIcon = -1;
        public int[] recolorOriginal;
        public int standingAnimation = -1;
        public long interfaceType = -1L;
        public int rotation = 32;
        public int quarterClockwiseTurnAnimation = -1;
        public boolean aBoolean84 = true;
        public int lightModifier;
        public int scaleY = 128;
        public boolean aBoolean87 = true;
        public int morphisms[];
        public int scaleXZ = 128;
        public int shadowModifier;
        public boolean aBoolean93;
        public int[] modelId;
        public int interfaceZoom = 0;
    }
    4. Export this project as a jar and add it to the folder at user.home/Scape-Editor/Plugins
    Attached image

    5. That's it! It's that simple. Now just run scape-editor.jar and you can view your configs!
    Last edited by CrazyPanda; 06-04-2018 at 06:42 AM.
    Attached image
    Reply With Quote  
     

  6. #6  
    Banned
    Join Date
    Dec 2017
    Posts
    47
    Thanks given
    47
    Thanks received
    30
    Rep Power
    0
    Yet Another great tool worth every Penney
    Reply With Quote  
     

  7. Thankful user:


  8. #7  
    Registered Member
    Join Date
    Jun 2018
    Posts
    42
    Thanks given
    8
    Thanks received
    3
    Rep Power
    15
    Does this work on ruse base servers?
    Reply With Quote  
     

  9. #8  
    Banned
    Join Date
    Dec 2017
    Posts
    47
    Thanks given
    47
    Thanks received
    30
    Rep Power
    0
    Quote Originally Posted by Eliwood View Post
    Does this work on ruse base servers?
    Yes it will do
    Reply With Quote  
     

  10. #9  
    Registered Member
    Join Date
    Jun 2018
    Posts
    42
    Thanks given
    8
    Thanks received
    3
    Rep Power
    15
    Quote Originally Posted by _Naitsirhc View Post
    Yes it will do
    How do you know?
    Reply With Quote  
     

  11. #10  
    Banned
    Join Date
    Dec 2017
    Posts
    47
    Thanks given
    47
    Thanks received
    30
    Rep Power
    0
    Quote Originally Posted by Eliwood View Post
    How do you know?
    Because it's for a 317 cache and ruse is a 317 cache the only thing you may have to do is rename it from "ruse.idx" to "main_file_cache" since ruse renames the cache different for some stupid but it is ruse lol or you coudl edit the code you get to auto load it using the ruse name and ive just double checked for you it works
    Reply With Quote  
     

Page 1 of 8 123 ... LastLast

Thread Information
Users Browsing this Thread

There are currently 1 users browsing this thread. (0 members and 1 guests)


User Tag List

Similar Threads

  1. [req] cache editor 317+ pi
    By AlphaX in forum Requests
    Replies: 1
    Last Post: 08-03-2013, 06:21 PM
  2. RSConfig - 317/377 Configuration Editor
    By Galkon in forum Projects
    Replies: 58
    Last Post: 07-07-2011, 08:23 AM
  3. Peter's map editor load 377 Cache
    By Oxygen in forum Tools
    Replies: 15
    Last Post: 12-28-2010, 05:36 AM
  4. Peter's map editor load 377 Cache
    By Oxygen in forum Downloads
    Replies: 8
    Last Post: 07-23-2009, 02:28 PM
  5. Peterjbornx's map editor loading 377 cache.
    By Oxygen in forum Show-off
    Replies: 16
    Last Post: 07-22-2009, 02:54 AM
Posting Permissions
  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •