{"id":202,"date":"2020-09-12T18:52:10","date_gmt":"2020-09-12T18:52:10","guid":{"rendered":"https:\/\/dcmods.unreliable.network\/?p=202"},"modified":"2021-06-13T14:14:17","modified_gmt":"2021-06-13T14:14:17","slug":"you-can-now-make-your-own-sa1-dreamcast-dlc","status":"publish","type":"post","link":"https:\/\/dcmods.unreliable.network\/index.php\/2020\/09\/12\/you-can-now-make-your-own-sa1-dreamcast-dlc\/","title":{"rendered":"You can now make your own SA1 Dreamcast DLC"},"content":{"rendered":"\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"723\" height=\"310\" src=\"https:\/\/dcmods.unreliable.network\/wp-content\/uploads\/2020\/09\/image-6.png\" alt=\"\" class=\"wp-image-206\" srcset=\"https:\/\/dcmods.unreliable.network\/wp-content\/uploads\/2020\/09\/image-6.png 723w, https:\/\/dcmods.unreliable.network\/wp-content\/uploads\/2020\/09\/image-6-300x129.png 300w\" sizes=\"auto, (max-width: 723px) 100vw, 723px\" \/><\/figure>\n\n\n\n<p>I&#8217;ve added my DLC tool to the <a href=\"https:\/\/github.com\/sonicretro\/sa_tools\">SA Tools<\/a> suite, you can find it in the SA1 folder. It&#8217;s a simple command line tool that unpacks VMS files and rebuilds them from source assets and metadata. I want to make a GUI version of it someday, but for now I want to work on something else. The tool and the data should be self explanatory for the most part, and there&#8217;s also plenty of documentation in the readme file.<\/p>\n\n\n\n<p>For those who want some juicy details, here&#8217;s the layout of SA1 DLC files:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code> * VMU HEADER\n * OFFSET\tSIZE\t\tTYPE\t\tDESCRIPTION\n * 0\t\t16\t\tstring\t\tDLC title\n * 10\t\t32\t\tstring\t\tDLC description\n * 30\t\t16\t\tstring\t\tApplication title\n * 40\t\t2\t\tushort\t\tNumber of icons\n * 42\t\t2\t\tushort\t\tAnimation speed\n * 44\t\t2\t\tushort\t\tEyecatch type (unused)\n * 46\t\t2\t\tushort\t\tCRC (unused)\n * 48\t\t4\t\tuint32\t\tSize without the header\n * 4C\t\t20\t\tnull\t\tReserved\n * 60\t\t32\t\tushort\t\tIcon palette, 16 colors\n * 80\t\t512\t\tbyte\t\tIcon graphics\n * \n * SECTIONS HEADER (SIZE 64 BYTES) \n * 280\t\t4\t\tuint32\t\tPointer to item layout table\n * 284\t\t4\t\tuint32\t\tItem count\n * 288\t\t4\t\tuint32\t\tPointer to string table\n * 28C\t\t4\t\tuint32\t\tString item count\n * 290\t\t4\t\tuint32\t\tPointer to PVM\n * 294\t\t4\t\tuint32\t\tNumber of PVMs (always 1)\n * 298\t\t4\t\tuint32\t\tNumber of textures in the PVM\n * 29C\t\t4\t\tuint32\t\tPointer to MLT\n * 2A0\t\t4\t\tuint32\t\tNumber of MLTs (either 0 or 1)\n * 2A4\t\t4\t\tuint32\t\tPointer to PRS\n * 2A8\t\t4\t\tuint32\t\tNumber of PRSes (always 1)\n * 2AC\t\t4\t\tuint32\t\tChecksum\n * 2B0\t\t16\t\tnull\t\tUnused\n * \n * ITEM LAYOUT TABLE HEADER (SIZE 12 BYTES)\n * 2C0\t\t4\t\tuint32\t\tDLC ID (e.g. 504 in SONICADV_504)\n * 2C4\t\t1\t\tbyte\t\tEnable Sonic \/ Enable Tails\n * 2C5\t\t1\t\tbyte\t\tEnable Knuckles \/ Enable Gamma\n * 2C6\t\t1\t\tbyte\t\tEnable Amy \/ Enable Big\n * 2C7\t\t1\t\tbyte\t\tUnknown, probably unused\n * 2C8\t\t4\t\tuint32\t\tRegional lock\n *\n * ITEM LAYOUT TABLE (ARRAY BEGINS AT 0x2CC, ITEM SIZE 30 BYTES)\n *  0\t\t1\t\tuint8\t\tLevel ID\n *  1\t\t1\t\tuint8\t\tAct ID\n *  2\t\t1\t\tuint8\t\tScale X multiplied by 10\n *  3\t\t1\t\tuint8\t\tScale Y multiplied by 10\n *  4\t\t1\t\tuint8\t\tScale Z multiplied by 10\n *  5\t\t1\t\tuint8\t\tRotation speed X\n *  6\t\t1\t\tuint8\t\tRotation speed Y\n *  7\t\t1\t\tuint8\t\tRotation speed Z\n *  8\t\t1\t\tsint8\t\tItem type (0: model, -128: sprite, -1: invisible)\n *  9\t\t1\t\tuint8\t\tTexture ID\n *  A\t\t2\t\tushort\t\tFlags\n *  C\t\t1\t\tuint8\t\tObject ID for collectibles or the number of objects to collect\n *  D\t\t1\t\tbyte\t\tUnknown\n *  E\t\t1\t\tuint8\t\tMessage ID to show when touching the object\n *  F\t\t1\t\tuint8\t\tTrigger distance\n *  10\t\t1\t\tuint8\t\tLevel ID to warp or soundbank ID (8 for MLT, 15 for ADX music)\n *  11\t\t1\t\tuint8\t\tAct ID to warp to or sound\/music ID to play\n *  12\t\t2\t\tushort\t\tRotation X\n *  14\t\t2\t\tushort\t\tRotation Y\n *  16\t\t2\t\tushort\t\tRotation Z\n *  18\t\t2\t\tshort\t\tPosition X\n *  1A\t\t2\t\tshort\t\tPosition Y\n *  1C\t\t2\t\tshort\t\tPosition Z\n *\n * DLC OBJECT FLAGS\n *  BIT_0\tUnknown\n *  BIT_4\tUnknown\n *  BIT_8\tSolid\n *  BIT_9\tPlay sound\n *  BIT_10\tShow message\n *  BIT_11\tHide object and disable everything except collision\n *  BIT_12\tWarp\n *  BIT_13\tCollectible item\n *  BIT_14\tTimer item\n *  BIT_15\tStarts the challenge\n *\n * REGIONAL LOCK BITS\n *  -1\tDisable regional lock\n *   1\tJapan\n *   3\tUS\n *   4\tEurope\n *   7\tAll regions<\/code><\/pre>\n\n\n\n<p><\/p>\n","protected":false},"excerpt":{"rendered":"<p>I&#8217;ve added my DLC tool to the SA Tools suite, you can find it in the SA1 folder. It&#8217;s a simple command line tool that unpacks VMS files and rebuilds them from source assets and metadata. I want to make&hellip;  <\/p>\n<p class=\"more-link\"><a href=\"https:\/\/dcmods.unreliable.network\/index.php\/2020\/09\/12\/you-can-now-make-your-own-sa1-dreamcast-dlc\/\">Continue reading <span class=\"meta-nav\">&rarr;<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1],"tags":[8,9,7],"class_list":["post-202","post","type-post","status-publish","format-standard","hentry","category-blog","tag-release","tag-sa-tools","tag-sa1-research"],"_links":{"self":[{"href":"https:\/\/dcmods.unreliable.network\/index.php\/wp-json\/wp\/v2\/posts\/202","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/dcmods.unreliable.network\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/dcmods.unreliable.network\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/dcmods.unreliable.network\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/dcmods.unreliable.network\/index.php\/wp-json\/wp\/v2\/comments?post=202"}],"version-history":[{"count":11,"href":"https:\/\/dcmods.unreliable.network\/index.php\/wp-json\/wp\/v2\/posts\/202\/revisions"}],"predecessor-version":[{"id":214,"href":"https:\/\/dcmods.unreliable.network\/index.php\/wp-json\/wp\/v2\/posts\/202\/revisions\/214"}],"wp:attachment":[{"href":"https:\/\/dcmods.unreliable.network\/index.php\/wp-json\/wp\/v2\/media?parent=202"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/dcmods.unreliable.network\/index.php\/wp-json\/wp\/v2\/categories?post=202"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/dcmods.unreliable.network\/index.php\/wp-json\/wp\/v2\/tags?post=202"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}