(icon);
+ var bitmap = datIcon.GetBitmap();
+
+ using (MemoryStream memory = new MemoryStream())
+ {
+ bitmap.Save(memory, ImageFormat.Bmp);
+ memory.Position = 0;
+ BitmapImage bitmapImage = new BitmapImage();
+ bitmapImage.BeginInit();
+ bitmapImage.StreamSource = memory;
+ bitmapImage.CacheOption = BitmapCacheOption.OnLoad;
+ bitmapImage.EndInit();
+
+ imgIcon.Source = bitmapImage;
+ }
+ }
+
+ // Find a matching item with this clothing base. May or may not be a valid loot item...
+ try
+ {
+ var match = LootArmorList.Loot.OrderBy(x => x.Key).First(x => x.Value.ClothingBase == ClothingTableList.CurrentClothingItem.Id.ToString("X8"));
+ lblName.Content = match.Value.Name;
+ }catch (Exception ex)
+ {
+ lblName.Content = "";
+ }
+ }
+
+ public class ColorItem
+ {
+ public int slot { get; set; }
+ public string palID { get; set; }
+ public string color { get; set; }
+ public Color swatchColor { get; set; }
+ }
+
+ private void Button_Click(object sender, RoutedEventArgs e)
+ {
+ string lootRule = "ACViewer Color Rule\r\n\r\n0;1";
+
+ var colorInfo = ClothingTableList.GetVirindiColorToolInfo();
+ for (var i = 0; i < colorInfo.Count; i++)
+ {
+ lootRule += ";17";
+ }
+
+ for (var i = 0; i < colorInfo.Count; i++)
+ {
+ lootRule += "\r\n9\r\n" + i.ToString() + "\r\n" + colorInfo[i].PalId.ToString();
+ }
+ Clipboard.SetText(lootRule);
+
+ MessageBox.Show("The loot rule has been copied to your clipboard.");
+ }
+ }
+}
diff --git a/docs/images/Armor.png b/docs/images/Armor.png
new file mode 100644
index 0000000..89621aa
Binary files /dev/null and b/docs/images/Armor.png differ
diff --git a/docs/images/ClothingBase.png b/docs/images/ClothingBase.png
new file mode 100644
index 0000000..c1a5e76
Binary files /dev/null and b/docs/images/ClothingBase.png differ
diff --git a/docs/images/VirindiColorTool.png b/docs/images/VirindiColorTool.png
new file mode 100644
index 0000000..b078050
Binary files /dev/null and b/docs/images/VirindiColorTool.png differ
diff --git a/docs/images/VtankLootEditor.png b/docs/images/VtankLootEditor.png
new file mode 100644
index 0000000..d37363a
Binary files /dev/null and b/docs/images/VtankLootEditor.png differ
diff --git a/docs/index.html b/docs/index.html
index 57d341c..9647da3 100644
--- a/docs/index.html
+++ b/docs/index.html
@@ -1,108 +1,207 @@
-
+
+
ACViewer - Help
-
+
+
- ACViewer - Help
+ ACViewer - Help
Contents:
- Getting Started
- File Types
- World Map
+ - Armor, Virindi Color Tool, and Loot
+
-
+
Getting Started
- Navigate to the ACViewer/bin/x64/Debug/ folder, and double-click the ACViewer.exe file to launch ACViewer.
+ Navigate to where you extracted ACViewer and double-click the ACViewer.exe file to launch ACViewer.
+ Note that if you compiled ACViewer yourself, ACViewer.exe will be either in you
+ `ACViewer/bin/Debug/net6.0-windows` or `ACViewer/bin/Release/net6.0-windows` folder.
+
- The first step is to load the AC folder into the application. In the menu bar at the top of the window, go to File > Open and browse to the folder that contains the AC .DAT files. Select any DAT to load the folder (can take a few seconds)
+ The first step is to load the AC folder into the application. In the menu bar at the top of the window, go to
+ File > Open and browse to the folder that contains the AC .DAT files. Select any DAT to load the folder (can
+ take a few seconds)
-
+
File Types
- On the left side of the window, there is a 'File Type' dropdown selector. This list contains all of the known file types within the DAT files that can be displayed:
+ On the left side of the window, there is a 'File Type' dropdown selector. This list contains all of the known
+ file types within the DAT files that can be displayed:
- For a description of these file types, Optimshi has created an excellent website http://ac.yotesfan.com/ that gives an overview of what all of these files are.
-
+ For a description of these file types, Optimshi has created an excellent website http://ac.yotesfan.com/ that gives an overview of what all of these files
+ are.
+
client_cell_1.dat:
- 0xFFFF - Landblock - These are file IDs within the client_cell.dat that end with 0xFFFF. The world map contains 254x254 landblocks, and clicking on landblock will also bring up a world map in the viewer on the right side.
- 0xFFFE - LandblockInfo - Contains additional info about the landblocks, such as how many buildings they contain, and how many indoor EnvCells are contained within the landblock (for dungeons and interiors).
- 0x100 - EnvCell - These are dungeon and interior cells for each landblock. Clicking on an individual EnvCell will display it in the viewer.
-
+ 0xFFFF - Landblock - These are file IDs within the client_cell.dat that end with 0xFFFF. The world map
+ contains 254x254 landblocks, and clicking on landblock will also bring up a world map in the viewer on the right
+ side.
+ 0xFFFE - LandblockInfo - Contains additional info about the landblocks, such as how many buildings they
+ contain, and how many indoor EnvCells are contained within the landblock (for dungeons and interiors).
+ 0x100 - EnvCell - These are dungeon and interior cells for each landblock. Clicking on an individual
+ EnvCell will display it in the viewer.
+
client_portal.dat
- 0x01 - GfxObj - Graphics Objects are individual pieces of the 3D models. Some things like buildings that don't have any moving parts are just 1 large graphics object, but for moving creatures such as players and monsters, they are composed of multiple graphics object parts, that are linked together in the next file type. Clicking these files will show them in a model viewer.
- 0x02 - Setup - An object that contains multiple GfxObj parts, usually with an associated animation table sent by the server. Clicking on a setup will show the assembled / animated model in the viewer, along with a list of all its animations available. Clicking on the animations to the right will show those in the viewer.
- 0x03 - Animation - These are raw animations describing how an object changes over time. These raw lists of animations need to be linked up to a model to be displayed, which is usually done through a MotionTable sent by the server.
- 0x04 - Palette - For textures which use indexed colors, these are all of the palettes in the game, and the individual colors they contain. Clicking on a palette ID from the list will show it in the image viewer.
- 0x05 - SurfaceTexture - Each texture in the game can be displayed at multiple resolutions, ie. textures in the foreground will be displayed at max resolution, and distance textures will be displayed at half resolution (mipmaps). A SurfaceTexture has the different resolutions for each texture.
+ 0x01 - GfxObj - Graphics Objects are individual pieces of the 3D models. Some things like buildings that
+ don't have any moving parts are just 1 large graphics object, but for moving creatures such as players and
+ monsters, they are composed of multiple graphics object parts, that are linked together in the next file type.
+ Clicking these files will show them in a model viewer.
+ 0x02 - Setup - An object that contains multiple GfxObj parts, usually with an associated animation table
+ sent by the server. Clicking on a setup will show the assembled / animated model in the viewer, along with a
+ list of all its animations available. Clicking on the animations to the right will show those in the viewer.
+ 0x03 - Animation - These are raw animations describing how an object changes over time. These raw lists of
+ animations need to be linked up to a model to be displayed, which is usually done through a MotionTable sent by
+ the server.
+ 0x04 - Palette - For textures which use indexed colors, these are all of the palettes in the game, and the
+ individual colors they contain. Clicking on a palette ID from the list will show it in the image viewer.
+ 0x05 - SurfaceTexture - Each texture in the game can be displayed at multiple resolutions, ie. textures in
+ the foreground will be displayed at max resolution, and distance textures will be displayed at half resolution
+ (mipmaps). A SurfaceTexture has the different resolutions for each texture.
0x06 - Texture - An individual image file. Clicking on these will display them in the image viewer.
- 0x08 - Surface - Surfaces have a lot of additional info for a texture, such as if a clipmap, translucency, luminosity, and diffuse values.
- 0x09 - MotionTable - A motion table links up objects to animations. It describes all of the motions an object can perform, and translates them to the raw animations. It also defines cycles, and which motions can link to other motions (ie. bow combat can perform the reload animation, but other combat stances might not have a reload motion).
+ 0x08 - Surface - Surfaces have a lot of additional info for a texture, such as if a clipmap, translucency,
+ luminosity, and diffuse values.
+ 0x09 - MotionTable - A motion table links up objects to animations. It describes all of the motions an
+ object can perform, and translates them to the raw animations. It also defines cycles, and which motions can
+ link to other motions (ie. bow combat can perform the reload animation, but other combat stances might not have
+ a reload motion).
0x0A - Sounds - All of the sound effects in the game. Click on a sound to hear it!
- 0x0D - Environment - each EnvCell in the cell.dat links to 1 Environment, which contains the vertices and polygons. The EnvCell contains the textures, so 1 environment can be textured differently. Clicking on an environment will show a wireframe view
- 0xE000002 - CharGen - Contains information for character creation, templates, starter stats, starting towns and locations
+ 0x0D - Environment - each EnvCell in the cell.dat links to 1 Environment, which contains the vertices and
+ polygons. The EnvCell contains the textures, so 1 environment can be textured differently. Clicking on an
+ environment will show a wireframe view
+ 0xE000002 - CharGen - Contains information for character creation, templates, starter stats, starting
+ towns and locations
0XE00001A - BadData - Contains a list of expired IDs for game objects (weenies).
- 0x0F - PaletteSet - A group of palettes w/ different shades. ie., this will define the indexed colors at different brightness.
- 0x10 - Clothing - Contains information about the appearance and color shades for various pieces of clothing.
- 0x11 - DegradeInfo - Contains information about the distances to switch to different rendering quality and detail textures for objects.
- 0x12 - Scene - The tables which describe the pseudo-randomized scenery (trees, bushes, rocks) that appear on the landscape.
- 0x13 - Region - One giant record that has a bunch of info describing the game world. Only 1 region was ever defined for AC (Dereth)
- 0x20 - SoundTable - A sound table maps audio cues (such as 'death') to sound files for an object. The server sent the SoundTable IDs for each object.
- 0x22 - Enums - Various lists of information defined in the dats, such as a mapping of character IDs -> character titles
- 0x23 - StringTable - A list of strings of text defined in the dat files. Most of the text was sent by the server, but also a bunch of client-side text stored in here.
+
0x0F - PaletteSet - A group of palettes w/ different shades. ie., this will define the indexed colors at
+ different brightness.
+ 0x10 - Clothing - Contains information about the appearance and color shades for various pieces of
+ clothing.
+ 0x11 - DegradeInfo - Contains information about the distances to switch to different rendering quality and
+ detail textures for objects.
+ 0x12 - Scene - The tables which describe the pseudo-randomized scenery (trees, bushes, rocks) that appear
+ on the landscape.
+ 0x13 - Region - One giant record that has a bunch of info describing the game world. Only 1 region was
+ ever defined for AC (Dereth)
+ 0x20 - SoundTable - A sound table maps audio cues (such as 'death') to sound files for an object. The
+ server sent the SoundTable IDs for each object.
+ 0x22 - Enums - Various lists of information defined in the dats, such as a mapping of character IDs ->
+ character titles
+ 0x23 - StringTable - A list of strings of text defined in the dat files. Most of the text was sent by the
+ server, but also a bunch of client-side text stored in here.
0x25 - DIDs - Links to different data IDs, ie. UI layout, attribute icons, etc.
0x27 - Dual DIDs - Weenies and their W_Class values
- 0x30 - CombatTable - The combat maneuvers table describes which attacks a creature can perform, depending on its current stance / equipped items, along with the probabilities of performing special attacks.
+ 0x30 - CombatTable - The combat maneuvers table describes which attacks a creature can perform, depending
+ on its current stance / equipped items, along with the probabilities of performing special attacks.
0x32 - EmitterInfo - A particle emitter. Click to display the particle system animations.
- 0x33 - PhysicsScript - A script which can trigger different physical effects and actions in the game world.
- 0x34 - PhysicsScriptTable - A mapping of physics script cues (such as BreatheFlame) to the actual PhysicsScript, along with different intensities.
+ 0x33 - PhysicsScript - A script which can trigger different physical effects and actions in the game
+ world.
+ 0x34 - PhysicsScriptTable - A mapping of physics script cues (such as BreatheFlame) to the actual
+ PhysicsScript, along with different intensities.
After selecting a file type, all files in the DAT matching that type will be displayed:
Selecting the individual files will display the raw data in a navigable tree view below:
-
+
World Map
- To access the World Map, go to the 'View' menu at the top of the application, and click 'World Viewer':
+
To access the World Map, go to the 'View' menu at the top of the application, and click 'World Viewer':
- The World Map can also be accessed by select '0xFFFF - Landblock' or '0xFFFE - LandblockInfo' from the FileType selector.
+ The World Map can also be accessed by select '0xFFFF - Landblock' or '0xFFFE - LandblockInfo' from the FileType
+ selector.
To zoom in and out of the world map, use the mouse scrollwheel.
To pan around the world map, click and drag with the RIGHT mouse button. The arrow keys can also be used.
- There is a red square that appears on the mouse cursor. This square is the current landblock the mouse cursor is hovered over.
- To view just 1 landblock, LEFT mouse click to bring up the 3D viewer for the current landblock highlighted by the red square.
+ There is a red square that appears on the mouse cursor. This square is the current landblock the mouse cursor is
+ hovered over.
+ To view just 1 landblock, LEFT mouse click to bring up the 3D viewer for the current landblock highlighted by the
+ red square.
- To view a range of landblocks, click and drag the LEFT mouse button to select the range of landblocks you want to view.
+ To view a range of landblocks, click and drag the LEFT mouse button to select the range of landblocks you want to
+ view.
- A word of caution: viewing more than 1k landblocks at a time may consume significant RAM, and take awhile to load, so try to keep the selection to a reasonable range!
-
+ A word of caution: viewing more than 1k landblocks at a time may consume significant RAM, and take awhile to
+ load, so try to keep the selection to a reasonable range!
+
World Viewer
- To fly around the world viewer, use the WASD keys to move the camera around. To rotate the camera, click and hold the RIGHT mouse button in the world viewer area, and drag the mouse around.
+ To fly around the world viewer, use the WASD keys to move the camera around. To rotate the camera, click and hold
+ the RIGHT mouse button in the world viewer area, and drag the mouse around.
To adjust the speed of the camera in the world viewer, use the mouse wheel.
+
+ Armor & Virindi Color Tool
+
+ Have you ever wanted to find that perfect matching color of armor to finish your suit? Well, you're still at the
+ mercy of the loot generator but at least ACViewer can help you find the exact color you want and help to add
+ it to your loot profile.
+ Search for a piece of armor by viewing the Armor Tool under Tools -> View Armor. Once you have found a piece of
+ armor you want to see, double click on the entry and it will load in the viewer. Note that you must have
+ opened dat files to view the armor.
+ Adjust the Palette Template and Shade options, if available, to find the color of armor you want. Select
+ Virindi Color Tool from the Tools menu and you will be presented with a list of slots and
+ colors and ACViewer will also attempt to identify the style of armor. This menu option is only
+ available when viewing a Clothing Table item.
+
+ If you are using Virindi Tank to manage your looting in
+ game, you can hit the "Copy Loot Rule" button to copy this loot rule to your clipboard. Browse to your Virindi
+ plugins install folder and launch VirindiTankClassicLooter\uTank2 Settings
+ Editor.exe to open the "Virindi Tank Loot Editor". Once here, open your Loot Profile or create a new
+ one. Either use the shortcut "Ctrl + V" to paste your rule or select the menu item "Edit -> Paste Rule". Once in
+ the editor, you can modify the slots/colors as needed and save your profile. Note that you will need to reload
+ your Loot Profile in-game if you are modifying it while active.
+ For more information on Virindi Tank Loot Editor, please visit the official wiki at http://www.virindi.net/wiki/index.php/VTClassic_Tutorial
+
+
+
\ No newline at end of file