0
0
mirror of https://github.com/marcrobledo/savegame-editors.git synced 2025-04-28 09:05:10 +00:00

new UI and features for botw editor

This commit is contained in:
Marc Robledo 2017-05-21 20:42:30 +02:00
parent beffa16bc3
commit a24af45765
35 changed files with 5392 additions and 6979 deletions

Binary file not shown.

After

Width:  |  Height:  |  Size: 143 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 170 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 213 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 11 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 188 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 55 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 16 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 15 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 25 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 16 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 14 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 15 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 48 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 13 KiB

BIN
zelda-botw/assets/Other.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 64 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 32 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 42 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 49 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 34 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 46 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 456 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 54 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 19 KiB

BIN
zelda-botw/assets/logo.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.1 KiB

View File

@ -7,11 +7,11 @@
<meta name="keywords" content="html5, savegame, save, editor, hack, exploit, wii u, zelda, breath of the wild, botw, weapon, durability, modifier, horse, epona, korok, unlocker, dlc, amiibo"/>
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=0"/>
<link rel="shortcut icon" href="./favicon.png"/>
<link type="text/css" rel="stylesheet" href="../savegame-editor.css" media="all"/>
<link type="text/css" rel="stylesheet" href="./zelda-botw.css" media="all"/>
<script type="text/javascript" src="../savegame-editor.js"></script>
<script type="text/javascript" src="./zelda-botw.js"></script>
<script type="text/javascript" src="./zelda-botw.data.js"></script>
<script type="text/javascript" src="./zelda-botw.completionism.js"></script>
<script type="text/javascript" src="./zelda-botw.icons.js"></script>
<!-- <script type="text/javascript" src="./zelda-botw.hashes.js"></script> -->
</head>
<body>
@ -20,7 +20,8 @@
<div id="header">
<div id="header-top">
<div class="row wrapper padding-vertical">
<h1 class="six columns text-left"><img src="./favicon.png" /> Savegame Editor <small>for The legend of Zelda: BOTW</small></h1>
<h1>Savegame Editor for The legend of Zelda: BOTW</h1>
<div class="six columns text-left"><img src="./assets/logo.png" style="max-width:90%"/></div>
<div class="six columns text-right header-buttons">
by <a href="/" class="author">Marc Robledo</a>
<a href="https://github.com/marcrobledo/savegame-editors/tree/master/zelda-botw" target="_blank" class="button"><span class="sprite github"></span> See on GitHub</a>
@ -46,20 +47,40 @@
<div id="debug"></div>
<!-- RUPEES -->
<h3 class="border-red">Rupees</h3>
<div id="card-rupees">
<div class="row">
<div class="ten columns"><label for="number-rupees">Rupees</label></div>
<div class="two columns"><input id="number-rupees" class="full-width" type="text" /></div>
</div>
<div class="row">
<div class="ten columns"><label for="number-mons">Mons</label></div>
<div class="two columns"><input id="number-mons" class="full-width" type="text" /></div>
</div>
<h3 class="border-red">Stats</h3>
<div class="row">
<div class="ten columns"><label for="number-rupees">Rupees</label></div>
<div class="two columns"><input id="number-rupees" class="full-width" type="text" /></div>
</div>
<div class="row">
<div class="ten columns"><label for="number-mons">Mons</label></div>
<div class="two columns"><input id="number-mons" class="full-width" type="text" /></div>
</div>
<div class="row">
<div class="ten columns"><label for="number-relic-gerudo">Gerudo relic remaining uses</label></div>
<div class="two columns text-right"><input id="number-relic-gerudo" class="small" type="text" /></div>
</div>
<div class="row">
<div class="ten columns"><label for="number-relic-goron">Goron relic remaining uses</label></div>
<div class="two columns text-right"><input id="number-relic-goron" class="small" type="text" /></div>
</div>
<div class="row">
<div class="ten columns"><label for="number-relic-rito">Rito relic remaining uses</label></div>
<div class="two columns text-right"><input id="number-relic-rito" class="small" type="text" /></div>
</div>
<div class="row">
<div class="ten columns"><label for="number-playtime">Playtime</label></div>
<div class="two columns"><input type="text" id="number-playtime" class="text-right full-width" disabled /></div>
</div>
<!-- ITEMS -->
<div id="card-items"></div>
<h3>Weapons</h3><div id="container-weapons"></div>
<h3>Bows</h3><div id="container-bows"></div>
<h3>Shields</h3><div id="container-shields"></div>
<h3>Clothes</h3><div id="container-clothes"></div>
<h3>Materials</h3><div id="container-materials"></div>
<h3>Food</h3><div id="container-food"></div>
<h3>Other</h3><div id="container-other"></div>
<!-- HORSES -->
<h3 class="border-blue">Horses</h3>
@ -73,17 +94,45 @@
<!-- COMPLETIONISM -->
<h3 class="border-green">Completionism</h3>
<div class="row">
<div class="nine columns"><label for="number-koroks">Korok counter</label></div>
<div class="three columns">
<input type="text" id="number-koroks" disabled />
<button onclick="unlockKoroks()">Unlock all</button>
<div class="nine columns"><label for="number-koroks">Korok seeds</label></div>
<div class="three columns text-right">
<input type="text" id="number-koroks" style="width:50px" disabled />
<button onclick="unlockKoroks()">Get all</button>
</div>
</div>
<div class="row">
<div class="nine columns"><label for="number-defeated-hinox">Defeated Hinox</label></div>
<div class="three columns text-right">
<input type="text" id="number-defeated-hinox" style="width:50px" disabled />
<button onclick="defeatAllHinox()">Defeat all</button>
</div>
</div>
<div class="row">
<div class="nine columns">Missing locations</div>
<div class="three columns"><button onclick="searchMissingLocations()">See</button></div>
<div class="nine columns"><label for="number-defeated-talus">Defeated Talus</label></div>
<div class="three columns text-right">
<input type="text" id="number-defeated-talus" style="width:50px" disabled />
<button onclick="defeatAllTalus()">Defeat all</button>
</div>
</div>
<div class="row">
<div class="nine columns"><label for="number-defeated-molduga">Defeated Molduga</label></div>
<div class="three columns text-right">
<input type="text" id="number-defeated-molduga" style="width:50px" disabled />
<button onclick="defeatAllMolduga()">Defeat all</button>
</div>
</div>
<div class="row">
<div class="nine columns"><label for="number-defeated-molduga">Hyrule Compendium</label></div>
<div class="three columns text-right">
<button onclick="setCompendiumToStock()">Set to stock</button>
</div>
</div>
<div class="row">
<div class="nine columns">Known locations</div>
<div class="three columns text-right"><button onclick="visitAllLocations()">Visit all</button></div>
</div>
<ul id="ul-locations"></ul>
</div>
@ -93,19 +142,8 @@
<div class="text-center">
<select id="select-item"></select>
</div>
<div id="row-modifier">
<hr/>
<div class="row">
<div class="four columns"><label for="select-modifier">Modifier flag</label></div>
<div class="eight columns"><select id="select-modifier"></select></div>
</div>
<div class="row">
<div class="four columns"><label for="number-modifier-value">Value</label></div>
<div class="eight columns"><input type="text" id="number-modifier-value" /></div>
</div>
</div>
<div class="buttons">
<button onclick="SavegameEditor.editItem2(currentEditingItem, getValue('item'));if(currentEditingItem2)SavegameEditor.editModifier2(currentEditingItem2.type, currentEditingItem2.order, getValue('modifier'), getValue('modifier-value'));MarcDialogs.close();">Save chages</button>
<button onclick="SavegameEditor.editItem2(currentEditingItem, getValue('item'));MarcDialogs.close();">Save chages</button>
</div>
</div>
@ -133,5 +171,7 @@
</div>
</div>
<ul id="caca">
</ul>
</body>
</html>

View File

@ -1,14 +1,22 @@
CACHE MANIFEST
# last update 2017-05-14
# last update 2017-05-21
#CACHE:
index.html
zelda-botw.css
zelda-botw.js
zelda-botw.data.js
zelda-botw.completionism.js
zelda-botw.icons.js
favicon.png
../savegame-editor.css
assets/_blank.png
assets/logo.png
assets/bg_black.jpg
assets/bg_white.jpg
../savegame-editor.js
# force these files to be loaded in network
NETWORK:
*
game_data.sav
assets/*
FALLBACK:
assets/* _blank.png

View File

@ -1,384 +0,0 @@
/*
The legend of Zelda: Breath of the wild Savegame Editor - Completionism Module - v20170514
by Marc Robledo 2017
data datamined by MrCheeze:
https://raw.githubusercontent.com/MrCheeze/botw-tools/master/gamedata.json
https://github.com/MrCheeze/botw-waypoint-map/blob/gh-pages/map_locations.js
*/
var HASHES_KOROKS=[ /* TYPE: boolean - IDS: Npc_HiddenKorokGround, Npc_HiddenKorokFly */
0x002c5b5d,0x0059aae8,0x0066ded0,0x00753066,0x0105ef12,0x01a77626,0x022e0e12,0x02621e0d,
0x030bd873,0x032d8700,0x03443957,0x037dfc51,0x03924391,0x03d6015e,0x042c6214,0x04774091,
0x04b6719b,0x04bcb461,0x05388d71,0x05828e12,0x05a246a2,0x060b5dd9,0x0664971e,0x07518cd7,
0x07975126,0x07edf88b,0x07f53fae,0x08546066,0x093d1f93,0x09533a19,0x095d5540,0x09af9809,
0x0a467aec,0x0aab98c9,0x0b03cec2,0x0b19b851,0x0b358ef9,0x0b727016,0x0bdebc55,0x0bfa2096,
0x0c1a9b21,0x0c66c8aa,0x0c91457e,0x0d62d541,0x0d90eabf,0x0de05681,0x0e1bab2b,0x0e2d38d1,
0x0e6aa63d,0x0e6e49e6,0x0ea24f4c,0x0f42e520,0x0f9242ec,0x10ff5446,0x11e0cf95,0x12915bc4,
0x12a50513,0x12c054b3,0x13025056,0x1317a6a4,0x134475fc,0x138ac4c9,0x139f0bdc,0x13fe59ca,
0x140f447d,0x141b4dec,0x144479ea,0x14a7d3b8,0x1536edde,0x15905a70,0x15c3415d,0x17277806,
0x17558872,0x17620397,0x17997994,0x181364a8,0x18c5e539,0x1911ba9b,0x19b169e1,0x19e1da3a,
0x1a51b775,0x1af5fbf1,0x1b44308f,0x1b50b160,0x1b9c14c4,0x1be2b3ed,0x1c2cebb5,0x1d26bfc6,
0x1e37b9d3,0x1e5870f3,0x1e92767b,0x1ed6d88c,0x1f7e6066,0x1f9d7be0,0x1ffc5f3f,0x2067839b,
0x21049e6d,0x2172b5da,0x219f8191,0x21fa3907,0x22008f4a,0x22374558,0x224c2d20,0x23166cb2,
0x2435519f,0x245527c7,0x2482e3e2,0x24d7197c,0x26743533,0x2685f3a7,0x26acfebb,0x26bfbead,
0x273b4962,0x2761df77,0x27729224,0x2789911a,0x279bcc46,0x27d9e48f,0x27ee227b,0x285be209,
0x286b87c1,0x28c6a403,0x293f9601,0x29531d38,0x297ac38f,0x2a134c17,0x2a685c1e,0x2a6e88c5,
0x2a7115b9,0x2a956d11,0x2ad0d275,0x2adc59a7,0x2b2674ca,0x2b306b21,0x2b617218,0x2ba19d1e,
0x2bb51da0,0x2bcf5168,0x2bdafa92,0x2bf2bfa3,0x2c016340,0x2c596e0b,0x2c758cd9,0x2c8c2594,
0x2cc21c7d,0x2d7d823c,0x2da020a7,0x2e04bfa8,0x2e2b3cc3,0x2e36e82b,0x2e72c9b2,0x2ef650ea,
0x2f3c2ea2,0x2fe77b9a,0x30abfb13,0x31776e42,0x31893753,0x31a00e68,0x31c92a64,0x31ed5300,
0x32441ef9,0x325137af,0x32594185,0x32cd82e1,0x32db0e32,0x33d12189,0x3432070d,0x349f93b4,
0x34b9ea2d,0x34e7350a,0x350236a8,0x35833d5f,0x35d2e144,0x35d44e1e,0x35da7e79,0x35ddecf1,
0x35ff3af3,0x36919813,0x3814a1ea,0x38f48417,0x397c7666,0x399ffe15,0x3a031153,0x3a627ebc,
0x3aaaf546,0x3b1391d4,0x3b3f009f,0x3b48064c,0x3b7ce629,0x3b854d84,0x3b8acb25,0x3bb376d3,
0x3c5e4ee6,0x3c716aa0,0x3cd4b5f0,0x3dc85c5a,0x3e1546e4,0x3e4f52e6,0x3e7a2c72,0x3ed4373c,
0x3ef6c241,0x3efdd10b,0x3f8cebc3,0x3fe2d9ba,0x40041a33,0x4083454e,0x40c903b6,0x417748c0,
0x421ccbdc,0x424fc160,0x42baf164,0x42cf300d,0x437626cf,0x44260d03,0x4437570a,0x44760b6f,
0x44bae869,0x44e4d73d,0x450b9f2b,0x450bc0fc,0x458327c7,0x45c63ebb,0x45cafb59,0x45e64655,
0x45f2d306,0x467ee8b3,0x46ef8e1d,0x47079416,0x470abbf6,0x471abe01,0x475ded63,0x4784fd6b,
0x478bf467,0x47f4c0e2,0x485ae219,0x48eb753e,0x48faa931,0x492c8b33,0x49305266,0x4963817f,
0x497b3aa1,0x49cb2b7f,0x4a0d4d30,0x4a1b0c3e,0x4a278879,0x4a4be4b2,0x4a68f549,0x4a9fe113,
0x4add63de,0x4ae88291,0x4b1622c8,0x4b225629,0x4b864ab7,0x4ba7a2f7,0x4bf81bb3,0x4c34123f,
0x4c435209,0x4c624fdd,0x4c676609,0x4c71cd7d,0x4cbf31a5,0x4cf9af7a,0x4d57c17f,0x4d7068c2,
0x4dcf791e,0x4ddac174,0x4df49e60,0x4e05dfc4,0x4e1bec8d,0x4e86f173,0x4ea8552b,0x506472d9,
0x50ab1278,0x5205d39d,0x520b5971,0x526ee929,0x52d18fa9,0x52e200aa,0x52eabbf9,0x53449f3a,
0x535989d9,0x53bf9a40,0x542ca5dd,0x5498e0e8,0x55d95f2b,0x5603fd19,0x56323b35,0x564f942b,
0x567c4331,0x56a7b9b9,0x5700b68a,0x578f3784,0x57ebd46f,0x581282c5,0x583a94ae,0x5848c075,
0x58932cbd,0x5893c1cd,0x58ed79fc,0x5911354c,0x5947fa66,0x595194e8,0x59613b7f,0x5987853d,
0x59ab55bb,0x59e0685e,0x59e4f211,0x5a432e0e,0x5a4a3917,0x5ae18d84,0x5af84790,0x5b2750bd,
0x5b374fba,0x5bc2358d,0x5ced9ad3,0x5d4170ff,0x5d8f46c1,0x5e2633fd,0x5ec0d1ab,0x5ef432e2,
0x5f208f59,0x5f622fdc,0x5fcdbd75,0x5fdb248a,0x5ff70e36,0x6044b661,0x604688d4,0x604e6f4c,
0x6071fa85,0x60c729d3,0x60ebf61e,0x610076d6,0x6115ec62,0x6134dc7d,0x61895378,0x621d08df,
0x62939b45,0x62cd12c3,0x62ef4882,0x63643f49,0x63a4612c,0x63fbbcc0,0x64406b98,0x645bf0a5,
0x649e315a,0x655a0c0f,0x655ac3b3,0x655e5c8b,0x667c2c2c,0x66a49116,0x670c85ff,0x6720557f,
0x6789cfcd,0x67e0b113,0x6801dca3,0x68de4eed,0x69c59d49,0x69c884cb,0x6a047ec0,0x6b93ced0,
0x6c199e80,0x6c4af732,0x6c88172d,0x6cd70d96,0x6ce27815,0x6d337dd5,0x6d65fa2a,0x6d9a328b,
0x6e05e450,0x6e425edd,0x6e4b275d,0x6e998846,0x6e9bbc97,0x6f884090,0x6fc72def,0x7012ae43,
0x7017c7d1,0x70665f74,0x707072d3,0x70799bef,0x70b00c66,0x70b4b53c,0x70e63ec6,0x712b0ea5,
0x7166a639,0x7169f507,0x7186e8b8,0x71afefbb,0x71d5d765,0x71e86829,0x71e8a107,0x71f54da2,
0x721f1852,0x72d01780,0x731a1644,0x7489ba85,0x74d76fb9,0x74e51faa,0x751e528f,0x754daf9f,
0x75910bc5,0x75e0dfc6,0x76caf587,0x7733f2b8,0x778f207d,0x77efae60,0x7815fb3a,0x782c2165,
0x787bd471,0x789ebea5,0x78ca3e57,0x78fbe96b,0x7901258d,0x79333e04,0x794f242d,0x79c7e150,
0x79fdfdf9,0x7b10dfc2,0x7b7ba39e,0x7bb7d834,0x7bfe2497,0x7c0867ac,0x7ca4ffb4,0x7d12a804,
0x7d787c89,0x7dd35902,0x7dd43b3d,0x7de6bf97,0x7e4d566b,0x7f7d12eb,0x7f8291b4,0x7fc87ad6,
0x80826056,0x80cfe359,0x80d58d7e,0x80e46a95,0x80ec4d12,0x81f28000,0x8292f970,0x82ac968e,
0x82ea3f2d,0x82fad086,0x830f1ec0,0x836fa5ed,0x83bf0a9b,0x83dd4e76,0x847d126e,0x8490d920,
0x84c082c4,0x853ee307,0x8583858c,0x85fd0726,0x86b9cf34,0x86ceb585,0x86d7be5a,0x86e964bc,
0x86f2438b,0x879574c2,0x87c85b50,0x881390d3,0x8818e264,0x881a3647,0x883875aa,0x88cc839d,
0x88e54d6b,0x89ca3c5d,0x89e19447,0x89facd12,0x8a07fb55,0x8a1c1396,0x8a3b5037,0x8a4b420c,
0x8a6c5698,0x8ac957d4,0x8ad9e8a7,0x8b14d443,0x8b47a5fb,0x8b8a196a,0x8bfd9414,0x8c119354,
0x8c2a33fa,0x8c323e3b,0x8c3a4e37,0x8c5a8b69,0x8c5bda77,0x8c6caeff,0x8c750182,0x8cb6e831,
0x8d17595f,0x8d908351,0x8dec90ea,0x8df0c4a7,0x8df41fab,0x8e40d3ee,0x8e4adad4,0x8e6ff49f,
0x8eb3216e,0x8ebae5b4,0x8ec92e81,0x8ee513d1,0x8ef728de,0x8f03405e,0x8f2a30e1,0x8f3ab788,
0x8f633554,0x8f706bf5,0x900525b6,0x907adc44,0x90931b5a,0x909ff681,0x90aea807,0x90da6b48,
0x911bcd90,0x914e5c8b,0x919a1346,0x91d09be7,0x921c662a,0x9295df6c,0x92ae480a,0x92ccabab,
0x93269172,0x938cdf69,0x93dbf4f8,0x93ea4614,0x944bb152,0x945bd1cd,0x947bb87d,0x94875ae7,
0x956be08e,0x9596e203,0x95cdfa70,0x9615d0d6,0x963411fc,0x9696539d,0x96c02c14,0x975b52db,
0x97b2deb4,0x97c9c11b,0x97e79802,0x9812135c,0x98143e94,0x985f3beb,0x98753d6c,0x98e17eee,
0x992cf785,0x9966d589,0x9969542a,0x99736b62,0x9988d511,0x99996f7e,0x999c8205,0x9a2a7ab3,
0x9ad72bfb,0x9b3310be,0x9b5dda92,0x9b7cd7b0,0x9b7f8797,0x9b88be59,0x9bebaec0,0x9c1bfb39,
0x9c75e5f8,0x9c77f87c,0x9db69b95,0x9ebdaa4c,0x9f0488fe,0x9f5bf5e7,0x9f8b8360,0x9f8c6f32,
0x9fadacb6,0x9fbac800,0x9ffb6db1,0x9ffc1594,0xa0d80366,0xa1300acf,0xa169ce01,0xa1a2edef,
0xa206700f,0xa2217391,0xa26bf7c8,0xa2b4a213,0xa394e375,0xa3c26a27,0xa3cecb89,0xa44b516c,
0xa4e8182d,0xa5235679,0xa5b0ddd5,0xa5f5aed7,0xa63ff4cc,0xa664790a,0xa6a81087,0xa6f93c08,
0xa79e3be3,0xa7cbccfa,0xa8810dca,0xa89818b7,0xa91201aa,0xa92b45ef,0xa956dc79,0xa9bb8861,
0xaaf7b209,0xab116079,0xab4471a0,0xab7ee389,0xac952baa,0xacfc460d,0xad58d3ce,0xad635dca,
0xae2177a0,0xaeaa31fe,0xaed4da21,0xaf068a5a,0xaf1381a7,0xaf46339e,0xafd6ac26,0xb092991a,
0xb0978dc0,0xb0a896f6,0xb0d722c0,0xb1ae7c07,0xb2972d36,0xb29ba230,0xb29d5968,0xb2c7a150,
0xb30d16ad,0xb38f3294,0xb3d00fa3,0xb3fa9939,0xb42b2abb,0xb50397e3,0xb50f57b1,0xb52de9f9,
0xb539c88a,0xb5f30638,0xb6514b9c,0xb690acc0,0xb692e371,0xb6a4fe6e,0xb6f62fe4,0xb77452ca,
0xb88a8351,0xb92bcf9a,0xb93698b0,0xb97c0a67,0xba2cee6a,0xba424efe,0xba58f3fc,0xbaba4538,
0xbad8620b,0xbb03c92f,0xbb45ccb7,0xbb4bfa62,0xbbb11045,0xbbba17c1,0xbc7389bd,0xbcbec70f,
0xbcf9ae6f,0xbd828e2c,0xbde42185,0xbde4dc1c,0xbdf2209a,0xbe4a5e9b,0xbe8daba7,0xbeceb922,
0xbf572908,0xbf74ae6d,0xbfbebf6e,0xc0514ef5,0xc0547b5f,0xc0851403,0xc0c5b569,0xc0cd8a7f,
0xc12bdd2b,0xc1d550bc,0xc22ceff6,0xc232a5db,0xc239ed48,0xc2cb5826,0xc2e1762c,0xc30ec0c8,
0xc31f0b04,0xc32c01ee,0xc3ae20b1,0xc3b32918,0xc4a46604,0xc4c62b2c,0xc5001ffb,0xc54c483d,
0xc55a580a,0xc57a665c,0xc5b90c80,0xc5e9f609,0xc61db84f,0xc6a34951,0xc6fe441e,0xc74e2a27,
0xc7b919e2,0xc826318a,0xc8679196,0xc88964c5,0xc88dcc27,0xc8ba33c8,0xc919c75f,0xc996c2e9,
0xc9ef2e6c,0xc9f260d3,0xc9fb4ba8,0xca074b9f,0xca1474b6,0xca31bdfa,0xca4be8f1,0xca72f256,
0xcaa658ea,0xcacc2df3,0xcb09ff3f,0xcb637a36,0xcb8bdf6e,0xcbf505e2,0xcc29f2e1,0xcc2f05cf,
0xcc35335a,0xcc5c6d8c,0xcd93538a,0xce90cbd2,0xced040d3,0xcef4746e,0xcf43cc73,0xcf4a869e,
0xcf58e63d,0xcf88b5d2,0xcf8c8a6b,0xcf9d7c89,0xcfd54587,0xd00a5f8c,0xd022178b,0xd0cd4001,
0xd0fd5dce,0xd122eec3,0xd186c389,0xd1f96d16,0xd24e7a25,0xd2ac12eb,0xd2ba8c37,0xd2fb91a3,
0xd3d6c91c,0xd3eb5666,0xd4031665,0xd40caa6e,0xd5210e5e,0xd5d14cc9,0xd60dddfc,0xd61e3051,
0xd62e065c,0xd652c264,0xd656293a,0xd6db8c19,0xd6e38e1e,0xd71066f2,0xd7a55949,0xd7c86b91,
0xd8927c64,0xd89c4741,0xd8c72da7,0xd910c140,0xd93aea04,0xd97128ce,0xd9852d2a,0xd9957080,
0xd9d7b018,0xd9f18bf9,0xda11e11a,0xdad9a49f,0xdae8ff9a,0xdaea9644,0xdb42b09c,0xdb4d9121,
0xdc0848c2,0xdc2dd997,0xdcc8ba61,0xdd4e2b38,0xdd512e1b,0xdd5a8ff0,0xdd777485,0xdd836be1,
0xdd8e3d43,0xdeb178e3,0xdec72884,0xdf2a8fb0,0xdf2fbf5f,0xdf664163,0xdfabfc2e,0xdfbafa88,
0xdfbd654f,0xdfc6edc1,0xdfc9ba84,0xdfda0f23,0xe02da94d,0xe06124cb,0xe0ec0587,0xe0ec0c23,
0xe1091dcc,0xe11fff55,0xe195562e,0xe1edbaea,0xe1f3f35a,0xe23f09b9,0xe27c26e0,0xe2810b71,
0xe340e086,0xe4dfc1c0,0xe5293f22,0xe73804b3,0xe7538675,0xe7bd6e0d,0xe7d81530,0xe80a9eda,
0xe973a2c6,0xea312f16,0xeac72197,0xeadbf30c,0xeafbc191,0xeb323cb8,0xebf2367a,0xec46d3c7,
0xec65fd0e,0xec69ed31,0xec777d7c,0xec9bb374,0xece1fa6a,0xece4af29,0xed01da5f,0xed7f50ce,
0xed80c7a5,0xee425e1d,0xee48aa58,0xeed4a595,0xef0a866a,0xef6dfdb7,0xef9ceab3,0xf0274e1a,
0xf036238f,0xf04e0c73,0xf0988858,0xf0b1e9b3,0xf1888b2f,0xf1aa8b46,0xf22a43d9,0xf26db476,
0xf29f26c9,0xf32bd5d4,0xf349734f,0xf3610321,0xf366a0bd,0xf443fae0,0xf450426c,0xf5163503,
0xf58b5c80,0xf5b246cc,0xf6099a1a,0xf6264d79,0xf634a5b7,0xf6853f20,0xf691cf9e,0xf7812399,
0xf7bfdb93,0xf7fb7294,0xf80d5e7e,0xf8497c57,0xf8d0c224,0xf8d0d057,0xf90a90fd,0xf9342a29,
0xf93afc9a,0xf9531c7b,0xf99b49af,0xf9d1d011,0xf9e10545,0xf9e81bfa,0xf9eb79ab,0xfa2ecee2,
0xfa2f3eec,0xfa3e6133,0xfa5c61d9,0xfa7b263f,0xfb1f386a,0xfb765fbc,0xfbee67d4,0xfc5b8f9f,
0xfca2f664,0xfd72c546,0xfd840f72,0xfdd548dc,0xfe3efb1d,0xfe508967,0xfe750c11,0xfea08520,
0xff6a74af,0xff7758a0,0xffa754fa,0xfffbdf04
];
var LOCATIONS=[
0xbd432e2b,"Deya Village Ruins",
0x4c2a4c64,"Akkala Span",
0xc982b698,"Akkala Parade Ground Ruins",
0xceec3555,"Akkala Citadel Ruins",
0x5ccee1d1,"Akkala Bridge Ruins",
0xe03f8aa7,"Akkala Ancient Tech Lab",
0xba8fa3ec,"Yiga Clan Hideout",
0xab69ff8d,"Big Twin Bridge",
0x852308c6,"Ancient Tree Stump",
0x1855d45c,"Spring of Courage",
0x7b7427f3,"Warbler's Nest",
0x73fcf871,"Sacred Ground Ruins",
0xf4b71776,"Exchange Ruins",
0xd9393ccd,"Goponga Village Ruins",
0x95db306c,"Eventide Island",
0x629dcd44,"Korok Forest",
0xf70a4075,"Coliseum Ruins",
0x237a4d8a,"Foothill Stable",
0xba52d9e9,"Maw of Death Mountain",
0x2a87cd61,"Luto's Crossing",
0x1e4224f7,"Dragon Bone Mire",
0xd3d4fe4d,"East Reservoir Lake",
0x4edc4932,"East Gerudo Ruins",
0x90efa510,"East Post Ruins",
0x93c23bdf,"Castle Town Prison",
0x3dee43cc,"Eagus Bridge",
0xda0163d5,"Dueling Peaks Stable",
0xad065343,"Lakeside Stable",
0x340f02f9,"Highland Stable",
0x382af36e,"Faron Woods",
0x8d8982b9,"Goflam's Secret Hot Spring",
0xdbe04653,"Floria Bridge",
0x5b3d301c,"Floret Sandbar",
0x42d8f1bb,"Woodland Stable",
0x3046920f,"Gatepost Town Ruins",
0xc17f8588,"Pondo's Lodge",
0xdcbf49ee,"Tanagar Canyon Course",
0x37d054d1,"Gut Check Rock",
0xede11b4b,"Footrace Check-In",
0x13df032f,"Selmie's Spot",
0xb444af7f,"Mounted Archery Camp",
0xb07ff371,"Sand-Seal Rally",
0x86377b7e,"Shadow Hamlet Ruins",
0xc7d9e847,"Kolomo Garrison Ruins",
0x7e6ac510,"Gerudo Town",
0x11ca12b8,"Gerudo Canyon Pass",
0x3cb06c8d,"Gerudo Desert Gateway",
0x8470bba5,"Gerudo Great Skeleton",
0x84b55727,"Gerudo Canyon Stable",
0xeb962ee5,"Goron City",
0x6b3090c4,"Stolock Bridge",
0xf105fc93,"Guchini Plain Barrows",
0x61ecf5d8,"Owlan Bridge",
0xb91ec523,"Hateno Village",
0x5b065726,"Fort Hateno",
0x704a8cee,"Hateno Ancient Tech Lab",
0x3ba1e6cd,"Hebra Great Skeleton",
0xb46d4340,"Hebra Trailhead Lodge",
0xa4e25e17,"Great Plateau",
0x506d96b6,"Bridge of Hylia",
0xcb844395,"Hyrule Castle",
0x47cf0ce2,"Hyrule Castle Town Ruins",
0xf579c518,"Sanctum",
0x827ef58e,"Second Gatehouse",
0x1b77a434,"First Gatehouse",
0xfb739f5d,"Observation Room",
0x8c74afcb,"Dining Hall",
0xf8e1b0b6,"East Passage",
0x8fe68020,"West Passage",
0x157dfe71,"Guards' Chamber",
0x627acee7,"Library",
0x8b196bd2,"Lockup",
0x12103a68,"Princess Zelda's Room",
0x65170afe,"Docks",
0xf5a8176f,"Princess Zelda's Study",
0x82af27f9,"King's Study",
0xefc46622,"Central Square",
0x30dce738,"Outskirt Stable",
0x05768b36,"Hyrule Garrison Ruins",
0x29693cd5,"Hyrule Kingdom",
0xc19b4064,"Royal Ancient Lab Ruins",
0x96fb7e0b,"Hyrule Forest Park",
0x5c4d1750,"Military Training Camp",
0x97185f06,"Hyrule Cathedral",
0x765ae3fd,"Castle Town Watchtower",
0xd3635047,"Water Reservoir",
0xcab23d6f,"Serenne Stable",
0x2e573fa2,"Northern Icehouse",
0x0ea2f805,"Rebonae Bridge",
0x9aa32eca,"Proxim Bridge",
0xd8b7a1e2,"Kakariko Village",
0x384fc3a6,"Sage Temple Ruins",
0x1e278d65,"Forgotten Temple",
0xc1d8c92c,"Sherfin's Secret Hot Spring",
0xb58d951c,"Kakariko Bridge",
0x94e41520,"Sturnida Secret Hot Spring",
0xcb7f8efb,"Aquame Bridge",
0x64556cdf,"Lanayru Road - East Gate",
0x34af6c3e,"Lanayru Road - West Gate",
0xd3acb37d,"Jeddo Bridge",
0x658ed94c,"Thundra Plateau",
0x791c7d90,"Little Twin Bridge",
0x9f1ff60d,"Lomei Labyrinth Island",
0x5fb1238c,"Lost Woods",
0x40f556e8,"Hebra Tower",
0xd9fc0752,"Tabantha Tower",
0xaefb37c4,"Gerudo Tower",
0x309fa267,"Wasteland Tower",
0x479892f1,"Woodland Tower",
0xde91c34b,"Central Tower",
0xa996f3dd,"Great Plateau Tower",
0x3929ee4c,"Dueling Peaks Tower",
0x4e2ededa,"Lake Tower",
0x2ee9573f,"Eldin Tower",
0x59ee67a9,"Akkala Tower",
0xc0e73613,"Lanayru Tower",
0xb7e00685,"Hateno Tower",
0x29849326,"Faron Tower",
0x5e83a3b0,"Ridgeland Tower",
0x9510e305,"Malanya Spring",
0x7cf7d4ad,"Maritta Exchange Ruins",
0xa89c3e9d,"Moat Bridge",
0x33dedaf1,"Sokkala Bridge",
0x894e01b7,"East Sokkala Bridge",
0x7457367f,"West Sokkala Bridge",
0xfae08218,"Abandoned North Mine",
0x8367f7f5,"South Lomei Labyrinth",
0x7939d480,"Gleeok Bridge",
0x5c907154,"Wetland Stable",
0x0fa7b37f,"Kara Kara Bazaar",
0x1a1649a5,"Bridge of Eldin",
0xd865cfa4,"Eldin Great Skeleton",
0xf1cab1a7,"Helmhead Bridge",
0x6360e32f,"Outpost Ruins",
0x1cc23004,"Spring of Power",
0x18f92f82,"Divine Beast Vah Naboris",
0x8ad5ef4a,"Divine Beast Vah Rudania",
0x66336893,"Divine Beast Vah Ruta",
0xf300b27b,"Divine Beast Vah Medoh",
0xd451777c,"Oren Bridge",
0xa262d614,"Rito Village",
0x79431cd8,"Rito Stable",
0xa313005e,"Riverside Stable",
0x8f067283,"Mabe Village Ruins",
0x80f9fd06,"North Lomei Labyrinth",
0x71a002e7,"Sarjon Bridge",
0xe12f0afe,"Horwell Bridge",
0x4e798832,"Lanayru Promenade",
0x57c1e588,"Orsedd Bridge",
0x40060961,"Rauru Settlement Ruins",
0xa31a50aa,"Statue of the Eighth Heroine",
0x8ae6edd7,"Sanidin Park Ruins",
0x46f6e384,"Manhala Bridge",
0xd8e21026,"Arbiter's Grounds",
0xd8f19a2a,"Southern Mine",
0xc409b5e2,"Shrine of Resurrection",
0x0fe7e6ab,"Ancient Columns",
0x94ddf95c,"Inogo Bridge",
0x2fa52b7e,"Tabantha Great Bridge",
0x62fffa64,"Tabantha Bridge Stable",
0x8c8e9401,"Gisa Crater",
0xed1341fd,"Snowfield Stable",
0x99277060,"Tabantha Village Ruins",
0x16b9c598,"East Akkala Stable",
0xe4171cbe,"South Akkala Stable",
0x1a2cadf2,"Thims Bridge",
0x4695d38c,"Lurelin Village",
0x095288b6,"Temple of Time",
0x6c034b60,"Boneyard Bridge",
0x8b62694a,"Carok Bridge",
0xd78f2eac,"Horse God Bridge",
0x26daeef2,"Tarrey Town",
0x3187bba5,"UMiiVillageShopBougu",
0x3b930e2c,"UMiiVillageShopJewel",
0xd2180ce8,"UMiiVillageShopYadoya",
0x29ad3d74,"UMiiVillageShopYorozu",
0x1f4bc09c,"Flight Range",
0xbfdd2802,"Great Fairy Fountain",
0x298b03fe,"Great Fairy Fountain",
0x5e8c3368,"Great Fairy Fountain",
0xc0e8a6cb,"Great Fairy Fountain",
0x3f3d559e,"Moor Garrison Ruins",
0xff6f7ae4,"Zora's Domain",
0xea6e852b,"Spring of Wisdom",
0x2cd6f581,"Digdogg Suspension Bridge",
0x5c7246c7,"Palmorae Ruins",
0x4a46741a,"Zonai Ruins",
/* unused? */
/*0x01459d59,"*unused?* AnoleTunnel",
0x763a58d2,"*unused?* BlindForest",
0xa8c3e430,"*unused?* DragonAltar",
0x25c12f63,"*unused?* DungeonMush",
0xe27ea0e4,"*unused?* FirstColony",
0x8a36f4dd,"*unused?* FrozenCave",
0xb5bacc44,"*unused?* Hatago001",
0xfaab284d,"*unused?* HebraBottomRemains",
0xe66f047b,"*unused?* HebraRemains",
0xfc1e5b44,"*unused?* HyruleCastle_Room_4",
0x493163ed,"*unused?* IceLake",
0xd8ce1bad,"*unused?* LakeFloria",
0xb106e3d2,"*unused?* LakeHylia",*/
];
function searchMissingLocations(){
empty('ul-locations');
var missingLocations=0;
for(var i=0;i<LOCATIONS.length; i+=2){
var offset=SavegameEditor._searchHash(LOCATIONS[i]);
if(offset && !tempFile.readInt(offset+4)){
var li=document.createElement('li');
li.innerHTML+=(LOCATIONS[i+1]);
get('ul-locations').appendChild(li);
missingLocations++;
}
}
var li=document.createElement('li');
li.innerHTML+='<hr/>missing locations: '+missingLocations;
if(missingLocations){
li.innerHTML+='<br/><a href=\"http://www.zeldadungeon.net/breath-of-the-wild-interactive-map/\" target=\"_blank\">search locations</a>';
get('ul-locations').appendChild(li);
}else{
MarcDialogs.alert('You have discovered all locations.');
}
}
function unlockKoroks(){
var unlockedKoroks=0;
for(var i=0;i<HASHES_KOROKS.length; i++){
var offset=SavegameEditor._searchHash(HASHES_KOROKS[i]);
if(offset && !tempFile.readInt(offset+4)){
tempFile.writeInt(offset+4, 1);
unlockedKoroks++;
}
}
setValue('koroks', 900);
var offset=SavegameEditor._searchHash(0x64622a86); //HiddenKorok_Complete
tempFile.writeInt(offset+4, 1);
//search korok seeds in inventory
for(var i=0; i<SavegameEditor.Constants.MAX_ITEMS; i++){
if(SavegameEditor._loadItemName(i)==='Obj_KorokNuts'){
setValue('item'+i, parseInt(getValue('item'+i))+unlockedKoroks);
break;
}
}
MarcDialogs.alert(unlockedKoroks+' korok seeds were added');
}

621
zelda-botw/zelda-botw.css Normal file
View File

@ -0,0 +1,621 @@
/* Zelda BOTW Savegame editor by Marc Robledo v20170521 */
/* minify at https://cssminifier.com/ + https://www.base64-image.de/ (sprites */
/* @FONT-FACES */
@import url('https://fonts.googleapis.com/css?family=Open+Sans:400,400i,700,800');
body{
font:15px 'Open Sans',sans-serif;
cursor:default;
margin:180px 0 80px;
background-color:#160c0c;
color:#f9f5da;
background-image:url(assets/bg_black.jpg);
}
/* flex box */
.row{
display:flex;
flex-flow:row wrap; /* this is the same as flex-direction:row;flex-wrap:wrap; */
align-items:center; /* vertical align */
justify-content:space-between
}
.columns.c1,.columns.one{width:7.33333%}
.columns.c2,.columns.two{width:15.66667%}
.columns.c3,.columns.three{width:24%}
.columns.c4,.columns.four{width:32.33333%}
.columns.c5,.columns.five{width:40.66667%}
.columns.c6,.columns.six{width:49%}
.columns.c7,.columns.seven{width:57.33333%}
.columns.c8,.columns.eight{width:65.66667%}
.columns.c9,.columns.nine{width:74%}
.columns.c10,.columns.ten{width:82.33333%}
.columns.c11,.columns.eleven{width:90.66667%}
.columns.c12,.columns.twelve{width:99%}
/* grid box */
.row-items{
background-color:rgba(0,0,0,.4);
position:relative;
margin-bottom:4px;
padding:10px;
}
.row-items img{max-width:100%}
.row-items img:hover{background-color:#222}
.item-number{position:absolute;top:0;left:0; color:#444;font-family:monospace;font-size:80%}
.tiles span{display:block}
/* useful classes */
.help:hover{cursor:help}
.hidden{display:none}
.mono{}
.clickable{cursor:pointer} /* also Safari iOS fix for clickable elements */
.text-ellipsis{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.text-left{text-align:left}
.text-right{text-align:right}
.text-center{text-align:center}
.text-justify{text-align:justify}
.padding-vertical{padding:20px 0}
.round{border-radius:3px}
/* colors */
.bg-light-gray{background-color:rgba(216,216,216,.99)}
.bg-mid-gray{background-color:rgba(144,144,144,.99);color:white}
.bg-dark-gray{background-color:rgba(72,72,72,.99);color:white}
.bg-red{background-color:#e74c3c}
.bg-orange{background-color:#f39c12}
.bg-blue{background-color:#3498db}
.bg-green{background-color:#25ba84}
.fnt-white{color:white}
.fnt-light-gray{color:#d8d8d8}
.fnt-mid-gray{color:#909090}
.fnt-dark-gray{color:#48484}
.fnt-red{color:#e74c3c}
/*.fnt-red{color:#fe5d05}*/
.fnt-orange{color:#f39c12}
/*.fnt-orange{color:#feb806}*/
.fnt-blue{color:#3498db}
.fnt-green{color:#25ba84}
/*.fnt-green{color:#9ac430}*/
.border-white{border-color:white}
.border-light-gray{border-color:#d8d8d8}
.border-mid-gray{border-color:#909090}
.border-dark-gray{border-color:#48484}
.border-red{border-color:#e74c3c}
.border-orange{border-color:#f39c12}
.border-blue{border-color:#3498db}
.border-green{border-color:#25ba84}
/* Icons */
span.sprite,span.icon,button.with-icon:before{
background-image: url('data:image/png;base64,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');
background-position:0px 0px;
display:inline-block;
vertical-align:middle
}
span.sprite{width:24px;height:24px}
span.icon,button.with-icon:before{
width:16px;height:16px;
margin-right:4px;
content:""
}
button.with-icon.icon0:before{background-position:-0px -16px}
button.with-icon.icon1:before{background-position:-16px -16px}
button.with-icon.icon2:before{background-position:-32px -16px}
button.with-icon.icon3:before{background-position:-48px -16px}
button.with-icon.icon4:before{background-position:-64px -16px}
button.with-icon.icon5:before{background-position:-80px -16px}
button.with-icon.icon6:before{background-position:-96px -16px}
button.with-icon.icon7:before{background-position:-112px -16px}
button.with-icon.icon8:before{background-position:-128px -16px}
button.with-icon.icon9:before{background-position:-144px -16px}
button.with-icon.icon10:before{background-position:-160px -16px}
button.with-icon.colored.icon0:before{background-position:-0px -32px}
button.with-icon.colored.icon1:before{background-position:-16px -32px}
button.with-icon.colored.icon2:before{background-position:-32px -32px}
button.with-icon.colored.icon3:before{background-position:-48px -32px}
button.with-icon.colored.icon4:before{background-position:-64px -32px}
button.with-icon.colored.icon5:before{background-position:-80px -32px}
button.with-icon.colored.icon6:before{background-position:-96px -32px}
button.with-icon.colored.icon7:before{background-position:-112px -32px}
button.with-icon.colored.icon8:before{background-position:-128px -32px}
button.with-icon.colored.icon9:before{background-position:-144px -32px}
button.with-icon.colored.icon10:before{background-position:-160px -32px}
span.icon.icon0,button.with-icon.transparent.icon0:before{background-position:-0px 0px}
span.icon.icon1,button.with-icon.transparent.icon1:before{background-position:-16px 0px}
span.icon.icon2,button.with-icon.transparent.icon2:before{background-position:-32px 0px}
span.icon.icon3,button.with-icon.transparent.icon3:before{background-position:-48px 0px}
span.icon.icon4,button.with-icon.transparent.icon4:before{background-position:-64px 0px}
span.icon.icon5,button.with-icon.transparent.icon5:before{background-position:-80px 0px}
span.icon.icon6,button.with-icon.transparent.icon6:before{background-position:-96px 0px}
span.icon.icon7,button.with-icon.transparent.icon7:before{background-position:-112px 0px}
span.icon.icon8,button.with-icon.transparent.icon8:before{background-position:-128px 0px}
span.icon.icon9,button.with-icon.transparent.icon9:before{background-position:-144px 0px}
span.icon.icon10,button.with-icon.transparent.icon10:before{background-position:-160px 0px}
span.sprite{width:24px;height:24px}
span.sprite.github{background-position:0px -48px;width:16px;height:16px; margin-right:5px}
span.sprite.heart{background-position:-16px -48px;width:16px;height:16px; margin-right:5px}
button.with-icon.file-load:before{background-position:-32px -48px;width:20px;height:20px; margin-right:8px}
/* header+toolbar+footer */
#header{
color:#333;
position:absolute;
top:0;left:0;
width:100%;
z-index:100;
background-color:#faf8f7;
background-image:url(assets/bg_white.jpg);
}
#header:after{
display:block;
position:absolute;
bottom:-3px;
left:0;
width:100%;
height:3px;
background-image:linear-gradient(to right, #0f0404 0%, #b99f65 40%, #b99f65 40%, #b99f65 65%, #0f0404 100%);
content:"";
}
#toolbar{
padding:8px
}
#header h1{display:none}
#header h1 img{vertical-align:middle}
.header-buttons{
font-size:85%
}
.header-buttons a.author{
color:#333;
text-decoration:none;
border-bottom:1px solid #d3cec3;
margin-right:10px
}
.header-buttons a.author:hover{
border-color:#83d8ff
}
.header-buttons a.button{
text-decoration:none;
color:white;
background-color:#1a415d;
padding:10px 20px;
border-radius:3px
}
.header-buttons a.button:hover{
background-color:#153044
}
.donate.button{
background-color:#51a451 !important;
/*text-shadow:0 -1px 0 #37a137 !important;
background:radial-gradient(#60bd60,#398a39);*/
animation:donateglow 2s infinite
}
.donate.button:hover{background-color:#3e903e !important}
@keyframes donateglow{
0%{box-shadow:none}
50%{box-shadow:#d8ff7c 0 0 8px inset}
100%{box-shadow:none}
}
hr{border:none;border-top:1px dotted #bbb;margin:15px 0}
h3{
border-bottom:2px solid #888;
font-size:135%;
padding:10px 0;
text-transform:uppercase;
color:#b99f65
}
table{width:100%}
tbody tr:nth-child(even){background-color:#f2f2f2}
th{background-color:#d4d4d4}
/* forms */
input[type=text],input[type=number],select{
padding:6px 8px;
width:250px;
max-width:90%;
font:100% 'Open Sans', sans-serif;
border:1px solid #888;
border-radius:2px;
box-sizing:border-box
}
input[type=text]:hover,input[type=number]:hover,select:hover{
border-color:#666
}
input[type=text]:focus,input[type=number]:focus,select:focus{
box-shadow:#63bce5 0 0 4px 1px;
border-color:#47a8df
}
input[type=text].error,input[type=number].error,select.error{
box-shadow:#f88 0 0 4px 1px;
border-color:red
}
input[type=text].small,input[type=number].small,select.small{width:70px}
input[type=text].medium,input[type=number].medium,select.medium{width:130px}
.full-width{width:100% !important;max-width:100% !important}
#the-editor input[type=text],#the-editor input[type=number],#the-editor select{
border:1px solid #444;
border-radius:2px;
background-color:#111;
color:white;
}
#the-editor input[type=text]:hover,#the-editor input[type=number]:hover,#the-editor select:hover{
border-color:#666
}
#the-editor input[type=text]:focus,#the-editor input[type=number]:focus,#the-editor select:focus{
box-shadow:rgba(185,159,101,.5) 0 0 4px 1px;
background-color:#222;
border-color:#b99f65
}
/* buttons */
button{
font-family:inherit;
font-size:100%;
min-width:120px;
border-radius:2px;border:1px solid;border-color:#ccc #ccc #b3b3b3;
padding:6px 12px;
margin:0 5px;
background-color:#f0f0f0;
background-image:linear-gradient(to bottom, #fff, #e6e6e6);
text-shadow:0 1px 0 #f8f8f8;
color:#333;
box-shadow:0px 1px 0px rgba(255, 255, 255, 0.2) inset;
transition:border-color ease-in-out .15s;
box-sizing:border-box
}
button.small{
min-width:1px
}
button:hover{
text-shadow:none;
border-color:#999999
}
button:active{
background-image:none;
transform:translate(0px,1px);
border-color:#888;
text-shadow:none;
box-shadow:0 2px 8px -3px rgba(0, 0, 0, 0.5) inset;
background-color:#eeeeee;
transform:translateY(1px)
}
button:focus{}
button:disabled{opacity:.35}
button.colored{color:white !important}
button.colored.blue{
box-shadow:0 1px 0 rgba(120, 200, 230, 0.5) inset;
background-color:#21759B;
background-image:linear-gradient(to bottom, #2A95C5, #21759B);
border-color:#21759B #21759B #1E6A8D;
text-shadow:0 -1px 0 #20749a
}
button.colored.blue:hover{
box-shadow:0 1px 0 rgba(120, 200, 230, 0.6) inset;
background-color:#278AB7;
background-image:linear-gradient(to bottom, #2E9FD2, #21759B);
border-color:#1B607F;
text-shadow:0 -1px 0 #1b6080
}
button.colored.blue:active{
box-shadow:0 2px 8px -3px rgba(0, 0, 0, 0.5) inset;
background:linear-gradient(to bottom, #21759B, #278AB7) repeat scroll 0 0 #1B607F;
border-color:#124560 #0e74a3 #0e74a3;
text-shadow:0 -1px 0 #177ea4
}
button.colored.red{
box-shadow:0 1px 0 #df4c45 inset;
background-color:#b72319;
background-image:linear-gradient(to bottom, #ce271d, #a41f17);
border-color:#a41f17 #a41f17 #951d15;
text-shadow:0 -1px 0 #a01d15
}
button.colored.red:hover{
box-shadow:0 1px 0 #e8564f inset !important;
background-color:#bf261c !important;
background-image:linear-gradient(to bottom, #db2c20, #a52017) !important;
border-color:#871a13 !important;
text-shadow:0 -1px 0 #8b1b14 !important
}
button.colored.red:active{
box-shadow:0 2px 8px -3px rgba(0, 0, 0, 0.5) inset !important;
background:linear-gradient(to bottom, #a51f17, #c1251b) repeat scroll 0 0 #b22118 !important;
border-color:#66140c #a0150d #a0150d !important;
text-shadow:0 -1px 0 #a41e17 !important
}
button.colored.green{
box-shadow:0 1px 0 #81cf81 inset !important;
background-color:#59b259 !important;
background-image:linear-gradient(to bottom, #61c261, #51a351) !important;
border-color:#52a452 #4f9f4f #448944 !important;
text-shadow:0 -1px 0 #37a137 !important
}
button.colored.green:hover{
box-shadow:0 1px 0 #99de99 inset !important;
background-color:#278AB7 !important;
background-image:linear-gradient(to bottom, #64ce64, #51a351) !important;
border-color:#3f7f3f !important;
text-shadow:0 -1px 0 #1c9216 !important
}
button.colored.green:active{
box-shadow:0 2px 8px -3px rgba(0, 0, 0, 0.5) inset !important;
background:linear-gradient(to bottom, #1e8f22, #23a627) repeat scroll 0 0 #219b24 !important;
border-color:#105815 #17941b #17941b !important;
text-shadow:0 -1px 0 #17a417 !important
}
button.colored.orange{
box-shadow:0 1px 0 #ffb519 inset !important;
background-color:#e69501 !important;
background-image:linear-gradient(to bottom, #fda502, #d08400) !important;
border-color:#d38500 #c97e00 #b46f00 !important;
text-shadow:0 -1px 0 #8f5901 !important
}
button.colored.orange:hover{
box-shadow:0 1px 0 #ffc03c inset !important;
background-color:#e69501 !important;
background-image:linear-gradient(to bottom, #ffb01e, #d08400) !important;
border-color:#a36300 !important;
text-shadow:0 -1px 0 #95620f !important
}
button.colored.orange:active{
box-shadow:0 2px 8px -3px rgba(0, 0, 0, 0.5) inset !important;
background:linear-gradient(to bottom, #c07400, #ed9500) repeat scroll 0 0 #219b24 !important;
border-color:#53400b #886912 #886912 !important;
text-shadow:0 -1px 0 #654e0e !important
}
button.transparent{
min-width:auto;
box-shadow:none;
padding:0;
background:none;
text-decoration:underline;
border:none;
text-shadow:none;
color:black !important
}
button.transparent:hover{background-color:rgba(0,0,0,.05)}
button.no-text.with-icon:before{margin-right:0px}
.wrapper{
max-width:920px;
margin:0 auto
}
/* MarcDragAndDrop */
#dragzone{
border:4px dashed #b99f65;
color:#b99f65;
text-align:center;
border-radius:8px;
position:relative;
transition:all .2s;
padding-bottom:20px;
/*font-weight:bold;*/
}
.dragging-files #dragzone{
border-color:#3498db;
color:#3498db;
background-color:white
}
#dragzone-message{
font-size:180%;
margin:128px 0;
line-height:2
}
#demo{
text-decoration:none;
background-color:#5271e7;
color:black;
padding:4px 16px;
border-radius:3px;
clear:both
}
#demo:hover{
background-color:#8a9eea;
}
#warning{
position:fixed;
bottom:-80px;
width:100%;
background-color:#a30202;
background-color:rgba(164,0,0,.96);
color:white;
transition:bottom .5s
}
#warning.visible{bottom:0px}
#warning:hover{background-color:#b31212}
#warning u{
background-color:white;
color:#b31212;
text-decoration:none;
padding:6px 16px;
border-radius:3px;
font-weight:bold
}
/* responsive */
@media only screen and (max-width:961px){
.wrapper{max-width:auto; padding-left:10px;padding-right:10px;}
}
@media only screen and (max-width:721px){
#header .columns-6,#header .columns.six{width:100%;text-align:center}
#the-editor{font-size:13px}
}
@media only screen and (max-width:481px){
#the-editor{font-size:12px}
}
/* MarcDialogs */
#dialog-about{background-color:#ffd823}
.dialog-overlay,.dialog{visibility:hidden;opacity:0}
.dialog-overlay.active,.dialog.active{visibility:visible;opacity:1;transition-delay:0s}/* fixes fade-in/fade-out*/
.dialog-overlay{
transition:visibility 0s .2s, opacity .2s;
background-color:black;
-ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=75)";/* IE8 */
background-color:rgba(255,255,255,.65)
}
.dialog{
position:absolute;top:0;left:0; /* fix for reserved space */
transform:translateY(-10px);
transition:visibility 0s .2s, opacity .2s ease-in, transform .2s ease-in;
background-color:white;
padding:15px;
min-width:360px;
max-width:80%;
border-radius:4px;
box-shadow:rgba(0,0,0,.5) 0 0 10px;
line-height:1.8;
color:#333;
}
.dialog.active{transform:translateY(0px)}
.buttons{
margin-top:20px;
text-align:center
}
/* MarcTooltips */
.tooltip{
background-color:#eee;
color:#333;
padding:10px;
visibility:hidden;
opacity:0;
z-index:8000;
border-radius:2px;
transition:visibility 0s .35s,opacity .35s;
font-size:80%;
}
/* separation */
.tooltip.position-up{margin-bottom:10px}
.tooltip.position-down{margin-top:10px}
.tooltip.position-left{margin-right:10px}
.tooltip.position-right{margin-left:10px}
/* animation */
.tooltip.visible{visibility:visible;opacity:1;transition-delay:0s} /* transition-delay fixes fade-in/fade-out in some browsers */
.tooltip.align-right{
text-align:right;
}
.arrow{
width:0;height:0;
position:absolute;
}
.tooltip.position-down .arrow{
border-left:5px solid transparent;
border-right:5px solid transparent;
border-bottom:5px solid #eee;
top:-5px;
}
.tooltip.position-up .arrow{
border-left:5px solid transparent;
border-right:5px solid transparent;
border-top:5px solid #eee;
bottom:-5px;
}
.tooltip.position-vertical.align-left .arrow{left:3px}
.tooltip.position-vertical.align-center .arrow{left:50%;margin-left:-5px}
.tooltip.position-vertical.align-right .arrow{right:3px}
.tooltip.position-left .arrow{
border-top:5px solid transparent;
border-bottom: 5px solid transparent;
border-left: 5px solid #eee;
right:-5px;
}
.tooltip.position-right .arrow{
border-top: 5px solid transparent;
border-bottom: 5px solid transparent;
border-right:5px solid #eee;
left:-5px;
}
.tooltip.position-horizontal.align-top .arrow{top:3px}
.tooltip.position-horizontal.align-center .arrow{top:50%;margin-top:-5px}
.tooltip.position-horizontal.align-bottom .arrow{bottom:3px}

File diff suppressed because one or more lines are too long

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,158 @@
/*
The legend of Zelda: Breath of the wild Savegame Editor (Icons) v20170514
by Marc Robledo 2017
icons extracted from https://www.spriters-resource.com/wii_u/thelegendofzeldabreathofthewild/
*/
var BOTW_Icons=(function(){
var ICON_SIZE=64;
var ICON_COLS=16;
var IMG_PATH='./assets/';
var ICONS={
Armor_Head:['001','001_Dye01','001_Dye02','001_Dye03','001_Dye04','001_Dye05','001_Dye06','001_Dye07','001_Dye08','001_Dye09','001_Dye10','001_Dye11','001_Dye12','001_Dye13','001_Dye14','001_Dye15','005','005_Dye01','005_Dye02','005_Dye03','005_Dye04','005_Dye05','005_Dye06','005_Dye07','005_Dye08','005_Dye09','005_Dye10','005_Dye11','005_Dye12','005_Dye13','005_Dye14','005_Dye15','006','006_Dye01','006_Dye02','006_Dye03','006_Dye04','006_Dye05','006_Dye06','006_Dye07','006_Dye08','006_Dye09','006_Dye10','006_Dye11','006_Dye12','006_Dye13','006_Dye14','006_Dye15','008','008_Dye01','008_Dye02','008_Dye03','008_Dye04','008_Dye05','008_Dye06','008_Dye07','008_Dye08','008_Dye09','008_Dye10','008_Dye11','008_Dye12','008_Dye13','008_Dye14','008_Dye15','009','009_Dye01','009_Dye02','009_Dye03','009_Dye04','009_Dye05','009_Dye06','009_Dye07','009_Dye08','009_Dye09','009_Dye10','009_Dye11','009_Dye12','009_Dye13','009_Dye14','009_Dye15','011','011_Dye01','011_Dye02','011_Dye03','011_Dye04','011_Dye05','011_Dye06','011_Dye07','011_Dye08','011_Dye09','011_Dye10','011_Dye11','011_Dye12','011_Dye13','011_Dye14','011_Dye15','012','012_Dye01','012_Dye02','012_Dye03','012_Dye04','012_Dye05','012_Dye06','012_Dye07','012_Dye08','012_Dye09','012_Dye10','012_Dye11','012_Dye12','012_Dye13','012_Dye14','012_Dye15','014','014_Dye01','014_Dye02','014_Dye03','014_Dye04','014_Dye05','014_Dye06','014_Dye07','014_Dye08','014_Dye09','014_Dye10','014_Dye11','014_Dye12','014_Dye13','014_Dye14','014_Dye15','017','017_Dye01','017_Dye02','017_Dye03','017_Dye04','017_Dye05','017_Dye06','017_Dye07','017_Dye08','017_Dye09','017_Dye10','017_Dye11','017_Dye12','017_Dye13','017_Dye14','017_Dye15','020','020_Dye01','020_Dye02','020_Dye03','020_Dye04','020_Dye05','020_Dye06','020_Dye07','020_Dye08','020_Dye09','020_Dye10','020_Dye11','020_Dye12','020_Dye13','020_Dye14','020_Dye15','021','021_Dye01','021_Dye02','021_Dye03','021_Dye04','021_Dye05','021_Dye06','021_Dye07','021_Dye08','021_Dye09','021_Dye10','021_Dye11','021_Dye12','021_Dye13','021_Dye14','021_Dye15','046','046_Dye01','046_Dye02','046_Dye03','046_Dye04','046_Dye05','046_Dye06','046_Dye07','046_Dye08','046_Dye09','046_Dye10','046_Dye11','046_Dye12','046_Dye13','046_Dye14','046_Dye15','048','048_Dye01','048_Dye02','048_Dye03','048_Dye04','048_Dye05','048_Dye06','048_Dye07','048_Dye08','048_Dye09','048_Dye10','048_Dye11','048_Dye12','048_Dye13','048_Dye14','048_Dye15','053','053_Dye01','053_Dye02','053_Dye03','053_Dye04','053_Dye05','053_Dye06','053_Dye07','053_Dye08','053_Dye09','053_Dye10','053_Dye11','053_Dye12','053_Dye13','053_Dye14','053_Dye15','024','025','026','027','028','029','022','045','055','056','115','160','200','205','210','215','220','225','230'],
Armor_Upper:['001','001_Dye01','001_Dye02','001_Dye03','001_Dye04','001_Dye05','001_Dye06','001_Dye07','001_Dye08','001_Dye09','001_Dye10','001_Dye11','001_Dye12','001_Dye13','001_Dye14','001_Dye15','005','005_Dye01','005_Dye02','005_Dye03','005_Dye04','005_Dye05','005_Dye06','005_Dye07','005_Dye08','005_Dye09','005_Dye10','005_Dye11','005_Dye12','005_Dye13','005_Dye14','005_Dye15','006','006_Dye01','006_Dye02','006_Dye03','006_Dye04','006_Dye05','006_Dye06','006_Dye07','006_Dye08','006_Dye09','006_Dye10','006_Dye11','006_Dye12','006_Dye13','006_Dye14','006_Dye15','008','008_Dye01','008_Dye02','008_Dye03','008_Dye04','008_Dye05','008_Dye06','008_Dye07','008_Dye08','008_Dye09','008_Dye10','008_Dye11','008_Dye12','008_Dye13','008_Dye14','008_Dye15','009','009_Dye01','009_Dye02','009_Dye03','009_Dye04','009_Dye05','009_Dye06','009_Dye07','009_Dye08','009_Dye09','009_Dye10','009_Dye11','009_Dye12','009_Dye13','009_Dye14','009_Dye15','011','011_Dye01','011_Dye02','011_Dye03','011_Dye04','011_Dye05','011_Dye06','011_Dye07','011_Dye08','011_Dye09','011_Dye10','011_Dye11','011_Dye12','011_Dye13','011_Dye14','011_Dye15','012','012_Dye01','012_Dye02','012_Dye03','012_Dye04','012_Dye05','012_Dye06','012_Dye07','012_Dye08','012_Dye09','012_Dye10','012_Dye11','012_Dye12','012_Dye13','012_Dye14','012_Dye15','014','014_Dye01','014_Dye02','014_Dye03','014_Dye04','014_Dye05','014_Dye06','014_Dye07','014_Dye08','014_Dye09','014_Dye10','014_Dye11','014_Dye12','014_Dye13','014_Dye14','014_Dye15','017','017_Dye01','017_Dye02','017_Dye03','017_Dye04','017_Dye05','017_Dye06','017_Dye07','017_Dye08','017_Dye09','017_Dye10','017_Dye11','017_Dye12','017_Dye13','017_Dye14','017_Dye15','020','020_Dye01','020_Dye02','020_Dye03','020_Dye04','020_Dye05','020_Dye06','020_Dye07','020_Dye08','020_Dye09','020_Dye10','020_Dye11','020_Dye12','020_Dye13','020_Dye14','020_Dye15','021','021_Dye01','021_Dye02','021_Dye03','021_Dye04','021_Dye05','021_Dye06','021_Dye07','021_Dye08','021_Dye09','021_Dye10','021_Dye11','021_Dye12','021_Dye13','021_Dye14','021_Dye15','043','043_Dye01','043_Dye02','043_Dye03','043_Dye04','043_Dye05','043_Dye06','043_Dye07','043_Dye08','043_Dye09','043_Dye10','043_Dye11','043_Dye12','043_Dye13','043_Dye14','043_Dye15','044','044_Dye01','044_Dye02','044_Dye03','044_Dye04','044_Dye05','044_Dye06','044_Dye07','044_Dye08','044_Dye09','044_Dye10','044_Dye11','044_Dye12','044_Dye13','044_Dye14','044_Dye15','046','046_Dye01','046_Dye02','046_Dye03','046_Dye04','046_Dye05','046_Dye06','046_Dye07','046_Dye08','046_Dye09','046_Dye10','046_Dye11','046_Dye12','046_Dye13','046_Dye14','046_Dye15','048','048_Dye01','048_Dye02','048_Dye03','048_Dye04','048_Dye05','048_Dye06','048_Dye07','048_Dye08','048_Dye09','048_Dye10','048_Dye11','048_Dye12','048_Dye13','048_Dye14','048_Dye15','053','053_Dye01','053_Dye02','053_Dye03','053_Dye04','053_Dye05','053_Dye06','053_Dye07','053_Dye08','053_Dye09','053_Dye10','053_Dye11','053_Dye12','053_Dye13','053_Dye14','053_Dye15','116','160','170','200','205','210','215','225','230'],
Armor_Lower:['001','001_Dye01','001_Dye02','001_Dye03','001_Dye04','001_Dye05','001_Dye06','001_Dye07','001_Dye08','001_Dye09','001_Dye10','001_Dye11','001_Dye12','001_Dye13','001_Dye14','001_Dye15','005','005_Dye01','005_Dye02','005_Dye03','005_Dye04','005_Dye05','005_Dye06','005_Dye07','005_Dye08','005_Dye09','005_Dye10','005_Dye11','005_Dye12','005_Dye13','005_Dye14','005_Dye15','006','006_Dye01','006_Dye02','006_Dye03','006_Dye04','006_Dye05','006_Dye06','006_Dye07','006_Dye08','006_Dye09','006_Dye10','006_Dye11','006_Dye12','006_Dye13','006_Dye14','006_Dye15','008','008_Dye01','008_Dye02','008_Dye03','008_Dye04','008_Dye05','008_Dye06','008_Dye07','008_Dye08','008_Dye09','008_Dye10','008_Dye11','008_Dye12','008_Dye13','008_Dye14','008_Dye15','009','009_Dye01','009_Dye02','009_Dye03','009_Dye04','009_Dye05','009_Dye06','009_Dye07','009_Dye08','009_Dye09','009_Dye10','009_Dye11','009_Dye12','009_Dye13','009_Dye14','009_Dye15','011','011_Dye01','011_Dye02','011_Dye03','011_Dye04','011_Dye05','011_Dye06','011_Dye07','011_Dye08','011_Dye09','011_Dye10','011_Dye11','011_Dye12','011_Dye13','011_Dye14','011_Dye15','012','012_Dye01','012_Dye02','012_Dye03','012_Dye04','012_Dye05','012_Dye06','012_Dye07','012_Dye08','012_Dye09','012_Dye10','012_Dye11','012_Dye12','012_Dye13','012_Dye14','012_Dye15','014','014_Dye01','014_Dye02','014_Dye03','014_Dye04','014_Dye05','014_Dye06','014_Dye07','014_Dye08','014_Dye09','014_Dye10','014_Dye11','014_Dye12','014_Dye13','014_Dye14','014_Dye15','017','017_Dye01','017_Dye02','017_Dye03','017_Dye04','017_Dye05','017_Dye06','017_Dye07','017_Dye08','017_Dye09','017_Dye10','017_Dye11','017_Dye12','017_Dye13','017_Dye14','017_Dye15','020','020_Dye01','020_Dye02','020_Dye03','020_Dye04','020_Dye05','020_Dye06','020_Dye07','020_Dye08','020_Dye09','020_Dye10','020_Dye11','020_Dye12','020_Dye13','020_Dye14','020_Dye15','021','021_Dye01','021_Dye02','021_Dye03','021_Dye04','021_Dye05','021_Dye06','021_Dye07','021_Dye08','021_Dye09','021_Dye10','021_Dye11','021_Dye12','021_Dye13','021_Dye14','021_Dye15','043','043_Dye01','043_Dye02','043_Dye03','043_Dye04','043_Dye05','043_Dye06','043_Dye07','043_Dye08','043_Dye09','043_Dye10','043_Dye11','043_Dye12','043_Dye13','043_Dye14','043_Dye15','046','046_Dye01','046_Dye02','046_Dye03','046_Dye04','046_Dye05','046_Dye06','046_Dye07','046_Dye08','046_Dye09','046_Dye10','046_Dye11','046_Dye12','046_Dye13','046_Dye14','046_Dye15','048','048_Dye01','048_Dye02','048_Dye03','048_Dye04','048_Dye05','048_Dye06','048_Dye07','048_Dye08','048_Dye09','048_Dye10','048_Dye11','048_Dye12','048_Dye13','048_Dye14','048_Dye15','049','049_Dye01','049_Dye02','049_Dye03','049_Dye04','049_Dye05','049_Dye06','049_Dye07','049_Dye08','049_Dye09','049_Dye10','049_Dye11','049_Dye12','049_Dye13','049_Dye14','049_Dye15','053','053_Dye01','053_Dye02','053_Dye03','053_Dye04','053_Dye05','053_Dye06','053_Dye07','053_Dye08','053_Dye09','053_Dye10','053_Dye11','053_Dye12','053_Dye13','053_Dye14','053_Dye15','141','141_Dye01','141_Dye02','141_Dye03','141_Dye04','141_Dye05','141_Dye06','141_Dye07','141_Dye08','141_Dye09','141_Dye10','141_Dye11','141_Dye12','141_Dye13','141_Dye14','141_Dye15','160','200','205','210','215','225','230'],
Item_Chilled:['01','02','03','04','05','06'],
Item_ChilledFish:['01','02','03','04','05','06','07','08','09'],
Item_Enemy:['00','01','02','03','04','05','06','07','08','12','13','14','15','16','17','18','19','20','21','24','25','26','27','28','29','30','31','32','33','34','38','39','40','41','42','43','44','45','46','47','48','49','50','51','52','53','54','55','56','57','Put_57'],
Item_Material:['01','02','03','04','05','06','07','08'],
Item_Meat:['01','02','06','07','11','12'],
Item_Roast:['01','02','03','04','05','06','07','08','09','10','11','12','13','15','16','18','19','24','27','28','31','32','33','36','37','38','39','40','41','45','46','48','49','50','51','52','53'],
Item_RoastFish:['01','02','03','04','07','09','11','13','15'],
Item_FishGet:['A','B','C','D','E','F','G','H','I','J','K','L','M','X','Z'],
Item_Fruit:['A','B','C','D','E','F','G','H','I','J','K','L'],
Item_InsectGet:['A','AA','AB','B','C','E','F','G','H','I','K','M','N','O','P','Q','R','S','T','X','Z','NormalK','NormalO','NormalZ'],
Item_MushroomGet:['A','B','C','D','E','F','H','J','L','M','N','O'],
Item_Ore:['A','B','C','D','E','F','G','H','I','J'],
Item_PlantGet:['A','B','C','E','F','G','H','I','J','L','M','O','Q'],
Item_Cook:['A_01','A_02','A_03','A_04','A_05','A_07','A_08','A_09','A_10','A_11','A_12','A_13','A_14','B_01','B_02','B_05','B_06','B_11','B_12','B_13','B_15','B_16','B_17','B_18','B_19','B_20','B_21','B_22','B_23','C_16','C_17','C_17_Mod01','C_17_Mod02','C_17_Mod03','C_17_Mod04','C_17_Mod05','C_17_Mod06','C_17_Mod07','C_17_Mod08','C_17_Mod09','C_17_Mod10','D_01','D_02','D_03','D_04','D_05','D_06','D_07','D_08','D_09','D_10','E_01','E_02','E_03','E_04','F_01','F_02','F_03','F_04','G_02','G_03','G_04','G_05','G_06','G_09','G_10','G_11','G_12','G_13','G_14','G_15','G_16','G_17','H_01','H_02','H_03','I_01','I_02','I_03','I_04','I_05','I_06','I_07','I_08','I_09','I_10','I_11','I_12','I_13','I_14','I_15','I_16','I_17','J_01','J_02','J_03','J_04','J_05','J_06','J_07','J_08','J_09','K_01','K_02','K_03','K_04','K_05','K_06','K_07','K_08','K_09','L_01','L_02','L_03','L_04','L_05','M_01','N_01','N_02','N_03','N_04','O_01','O_02','P_01','P_02','P_03','P_04','P_05'],
Weapon_Sword:['001','002','003','004','005','006','007','008','009','013','014','015','016','017','018','019','020','021','022','023','024','025','027','029','030','031','033','034','035','040','041','043','044','047','048','049','050','051','052','053','056','057','058','059','060','061','062','070','071','072','073','500'],
Weapon_Lsword:['001','002','003','004','005','006','010','011','012','013','014','015','016','017','018','019','020','023','024','027','029','030','031','032','033','034','035','036','037','038','041','045','047','051','054','055','056','057','059','060','074'],
Weapon_Spear:['001','002','003','004','005','006','007','008','009','010','011','012','013','014','015','016','017','018','021','022','023','024','025','027','028','029','030','031','032','033','034','035','036','037','038','047','049','050'],
Weapon_Bow:['001','002','003','004','006','009','011','013','014','015','016','017','023','026','027','028','029','030','032','033','035','036','038','040','071','072'],
Weapon_Shield:['001','002','003','004','005','006','007','008','009','013','014','015','016','017','018','021','022','023','025','026','030','031','032','033','034','035','036','037','038','040','041','042','057'],
Other:['_none','Dye01','Dye02','Dye03','Dye04','Dye05','Dye06','Dye07','Dye08','Dye09','Dye10','Dye11','Dye12','Dye13','Dye14','Dye15','NormalArrow','FireArrow','IceArrow','ElectricArrow','BombArrow_A','AncientArrow','arrow_light','arrow_unknown','PictureBook00','PictureBook01','PictureBook02','PictureBook03','PictureBook04','PictureBook05','Obj_HeartUtuwa_A_01','Obj_StaminaUtuwa_A_01','GameRomHorseReins_00','GameRomHorseReins_01','GameRomHorseReins_02','GameRomHorseReins_03','GameRomHorseReins_04','GameRomHorseReins_05','GameRomHorseSaddle_00','GameRomHorseSaddle_01','GameRomHorseSaddle_02','GameRomHorseSaddle_03','GameRomHorseSaddle_04','GameRomHorseSaddle_05','Horse_Link_Mane','Horse_Link_Mane_01','Horse_Link_Mane_02','Horse_Link_Mane_03','Horse_Link_Mane_04','Horse_Link_Mane_05','Horse_Link_Mane_06','Horse_Link_Mane_07','Horse_Link_Mane_08','Horse_Link_Mane_09','BeeHome','Item_Boiled_01','Obj_FireWoodBundle','KeySmall','PutRupee','PutRupee_Blue','PutRupee_Gold','PutRupee_Purple','PutRupee_Red','PutRupee_Silver','Obj_DRStone_Get','PlayerStole2','Obj_KorokNuts','Obj_ProofKorok','Obj_Maracas','Obj_ProofBook','Obj_ProofGiantKiller','Obj_ProofGolemKiller','Obj_ProofSandwormKiller','Obj_Armor_115_Head']
}
var REPEAT_ARMOR_ICONS_1=['002','003','004','015','035','039','060','061','007','062','063','064','040','065','066','067','036','071','072','073','037','074','075','076','042','077','078','079','083','084','085','086','087','088','089','090','095','096','097','098','099','100','101','102','117','118','119','120','121','122','123','124','125','126','127','128','129','130','131','132','133','134','135','136','137','138','139','140','103','104','105','106','111','112','113','114','152','153','154','155','148','149','150','151','156','157','158','159','201','202','203','204','206','207','208','209','211','212','213','214','216','217','218','219','221','222','223','224','226','227','228','229','231','232','233','234'];
var REPEAT_ARMOR_ICONS_2=['001','005','006','008','009','011','012','014','017','020','021','024','025','026','027','028','029','046','048','049','116','141','200','205','210','215','220','225','230'];
var loadedImages={};
var pendingImages=23;
var isLoaded=false;
var canvas=document.createElement('canvas');
canvas.width=ICON_SIZE;
canvas.height=ICON_SIZE;
return{
startLoadingIcons:function(){
if(!isLoaded){
for(fileName in ICONS){
loadedImages[fileName]=new Image();
loadedImages[fileName].addEventListener('load', function(){
pendingImages--;
if(pendingImages===0){
isLoaded=true;
BOTW_Icons.refreshAllIcons();
}
}, false);
loadedImages[fileName].src=IMG_PATH+fileName+'.png';
}
}
},
setIcon:function(el,itemNameId, dyeColor){
if(isLoaded){
if(dyeColor)
el.src=this._getItemIcon(itemNameId, dyeColor);
else
el.src=this._getItemIcon(itemNameId);
}else{
el.nextSrc={id:itemNameId};
}
},
refreshIcon:function(el){
},
refreshAllIcons:function(){
var iconId=0;
while(document.getElementById('icon'+iconId)){
document.getElementById('icon'+iconId).src=this._getItemIcon(document.getElementById('icon'+iconId).nextSrc.id);
iconId++;
}
},
_getItemIcon(itemNameId, clothesColor){
var fileName,id,match;
if(match=itemNameId.match(/^Armor_([0-9]{3})_(Head|Upper|Lower)(_Dye[0-9]{2})?/)){
fileName='Armor_'+match[2];
id=match[1];
/* add dye */
/*if(match[3])
id+=match[3];*/
if(match[1]==='Lower' && id==='140'){
id='141';
}
var index=REPEAT_ARMOR_ICONS_1.indexOf(id);
if(index>=0){
id=REPEAT_ARMOR_ICONS_2[parseInt(index/4)];
}
}else if(match=itemNameId.match(/^Item_(Chilled|ChilledFish|Enemy|Material|Meat|Roast|RoastFish)_([0-9]{2})/)){
fileName='Item_'+match[1];
id=match[2];
}else if(itemNameId==='Item_Enemy_Put_57'){
fileName='Item_Enemy';
id='Put_57';
}else if(match=itemNameId.replace('Animal_Insect_','Item_InsectGet_').replace('Mushroom_','MushroomGet_').replace('Plant_','PlantGet_').match(/^Item_(FishGet|Fruit|InsectGet|MushroomGet|Ore|PlantGet)_([A-Z][A-B]?)/)){
fileName='Item_'+match[1];
id=match[2];
/* fix normal (non-get) crabs */
if((id==='K' || id==='O' || id==='Z') && itemNameId.startsWith('Animal_Insect_'))
id='Normal'+id;
}else if(match=itemNameId.match(/^Item_Cook_([A-P]_[0-9]{2})/)){
fileName='Item_Cook';
id=match[1];
}else if(match=itemNameId.match(/^Weapon_(Sword|Lsword|Spear|Bow|Shield)_([0-9]{3})/)){
fileName='Weapon_'+match[1];
id=match[2];
}else{
fileName='Other';
id=itemNameId;
}
var icon=-1;
if(fileName)
icon=ICONS[fileName].indexOf(id);
if(icon===-1){
return this.getBlankIcon()
}
/* add dye */
if(itemNameId.startsWith('Armor_') && clothesColor && clothesColor<=15){
icon+=clothesColor;
}
if(isLoaded){
var img=loadedImages[fileName];
canvas.getContext('2d').clearRect(0,0,canvas.width,canvas.height);
canvas.getContext('2d').drawImage(img, (icon%ICON_COLS)*ICON_SIZE, parseInt(icon/ICON_COLS)*ICON_SIZE, ICON_SIZE, ICON_SIZE, 0, 0, ICON_SIZE, ICON_SIZE);
return canvas.toDataURL();
}
},
getBlankIcon:function(){return './assets/_blank.png'},
}
}());

View File

@ -1,37 +1,49 @@
/*
The legend of Zelda: Breath of the wild v20170514
The legend of Zelda: Breath of the wild v20170521
by Marc Robledo 2017
*/
/*
TO-DO LIST:
* name editor?
* character position editor?
*/
var currentEditingItem=0;
var currentEditingItem2=0;
SavegameEditor={
Name:'The legend of Zelda: Breath of the wild',
Filename:'game_data.sav',
Version:20170514,
Version:20170521,
/* Constants */
Constants:{
MAX_ITEMS:410,
STRING_SIZE:0x80
STRING_SIZE:0x80,
/* v1.0 v1.1 v1.2 */
FILESIZE: [896976, 897160, 897112],
HEADER: [0x24e2, 0x24ee, 0x2588],
},
/* Offsets */
OffsetsAll:{
FILESIZE: [896976, 897160, 897112],
/* hash v1.0 v1.1 v1.2 */
RUPEES: [0x23149bf8, 0x00e0a0, 0x00e110, 0x00e110],
MONS: [0xce7afed3, 0x0bc480, 0x0bc558, 0x0bc538],
ITEMS: [0x5f283289, 0x052828, 0x0528d8, 0x0528c0],
ITEMS_QUANTITY: [0x6a09fc59, 0x063340, 0x0633f0, 0x0633d8],
MOD_WEAPON_TYPES: [0x57ee221d, 0x050328, 0x0503d8, 0x0503c0],
MOD_WEAPON_VALUES: [0xa6d926bc, 0x0a9ca8, 0x0a9d78, 0x0a9d58],
MOD_BOW_TYPES: [0x0cbf052a, 0x0045f0, 0x0045f8, 0x0045f8],
MOD_BOW_VALUES: [0x1e3fd294, 0x00a8e0, 0x00a940, 0x00a940],
MOD_SHIELD_TYPES: [0xc5238d2b, 0x0b5810, 0x0b58e8, 0x0b58c8],
MOD_SHIELD_VALUES: [0x69f17e8a, 0x063218, 0x0632c8, 0x0632b0],
FLAGS_WEAPON: [0x57ee221d, 0x050328, 0x0503d8, 0x0503c0],
FLAGSV_WEAPON: [0xa6d926bc, 0x0a9ca8, 0x0a9d78, 0x0a9d58],
FLAGS_BOW: [0x0cbf052a, 0x0045f0, 0x0045f8, 0x0045f8],
FLAGSV_BOW: [0x1e3fd294, 0x00a8e0, 0x00a940, 0x00a940],
FLAGS_SHIELD: [0xc5238d2b, 0x0b5810, 0x0b58e8, 0x0b58c8],
FLAGSV_SHIELD: [0x69f17e8a, 0x063218, 0x0632c8, 0x0632b0],
//PORCH_WEAPONS: [0x8c270c56, 0x0767e8, 0x076898, 0x076880],
//PORCH_BOWS: [0xe7ce4453, 0x0c6e84, 0x0c6f50, 0x0c6f28],
//PORCH_SHIELDS: [0x2fc0d2ab, 0x03be98, 0x03bf40, 0x03bf40],
HORSE_SADDLES: [0x333aa6e5, 0x03d0e8, 0x03d190, 0x03d190],
HORSE_REINS: [0x6150c6be, 0x060508, 0x0605b8, 0x0605a0],
@ -40,12 +52,35 @@ SavegameEditor={
HORSE_TYPES: [0xc247b696, 0x0b46f8, 0x0b47d8, 0x0b47b8],
HORSE_BONDS: [0xe1a0ca54, 0x0c3670, 0x0c3738, 0x0c3710], /* max=0x3f80 */
KOROK_SEED_COUNTER: [0x8a94e07a, 0x076148, 0x0761f8, 0x0761e0]
KOROK_SEED_COUNTER: [0x8a94e07a, 0x076148, 0x0761f8, 0x0761e0],
DEFEATED_HINOX_COUNTER: [0x54679940, 0x04d2b8, 0x04d368, 0x04d358],
DEFEATED_TALUS_COUNTER: [0x698266be, 0x063010, 0x0630c0, 0x0630a8],
DEFEATED_MOLDUGA_COUNTER:[0x441b7231, 0x0466d0, 0x046788, 0x046780],
PLAYTIME: [0x73c29681, 0x067888, 0x067920, 0x067908],
RELIC_GERUDO: [0x97f925c3, 0x07adc0, 0x07ae80, 0x07ae68],
RELIC_GORON: [0xf1cf4807, 0x0cb3c0, 0x0cb488, 0x0cb460],
RELIC_RITO: [0xfda0cde4, 0x0da0d8, 0x0da190, 0x0da160]
},
/* private functions */
_toHexInt:function(i){var s=i.toString(16);while(s.length<8)s='0'+s;return '0x'+s},
_writeBoolean:function(offset,val,arrayPos){if(arrayPos)tempFile.writeInt(offset+8*i,val?1:0);else tempFile.writeInt(offset,val?1:0)},
_writeValue:function(offset,val,arrayPos){if(arrayPos)tempFile.writeInt(offset+8*i,val);else tempFile.writeInt(offset,val)},
_writeString:function(offset,str){
for(var i=0; i<16; i++){
tempFile.writeBytes(offset,[0,0,0,0]);
var fourBytes=str.substr(i*4, 4);
for(j=0; j<fourBytes.length; j++){
tempFile.writeByte(offset+j, fourBytes.charCodeAt(j));
}
offset+=8;
}
},
_searchHash:function(hash){
for(var i=0x0c; i<tempFile.fileSize; i+=8)
if(hash===tempFile.readInt(i))
@ -58,6 +93,12 @@ SavegameEditor={
return tempFile.readInt(offset+4);
return false;
},
_writeValueAtHash:function(hash,val){
var offset=this._searchHash(hash);
if(typeof offset==='number')
this._writeValue(offset+4,val);
},
_getOffsets(v){
this.Offsets={};
if(v<=2){
@ -73,7 +114,7 @@ SavegameEditor={
this.Offsets[prop]=offset+4;
}
}
get('debug').appendChild(textarea);
document.body.appendChild(textarea);
}
},
@ -91,16 +132,6 @@ SavegameEditor={
return 'other'
},
_writeString:function(offset,str){
for(var j=0; j<16; j++){
tempFile.writeBytes(offset,[0,0,0,0]);
var fourBytes=str.substr(j*4, 4);
for(k=0; k<fourBytes.length; k++){
tempFile.writeByte(offset+k, fourBytes.charCodeAt(k));
}
offset+=8;
}
},
_readString:function(offset){
var txt='';
for(var j=0; j<16; j++){
@ -124,6 +155,8 @@ SavegameEditor={
return 6553500;
}else if(itemId==='Obj_DungeonClearSeal'){
return 120
}else if(itemId==='Obj_KorokNuts'){
return 900
}else{
return 0xffffffff;
}
@ -134,12 +167,53 @@ SavegameEditor={
_getItemRow(i){
return getField('number-item'+i).parentElement.parentElement
},
_createItemRow(i){
_createItemRow(i,itemCat){
var itemNameId=this._loadItemName(i);
return row([10,2],
label('number-item'+i,'<b class="mono"><small>#'+i+'</small> </b><span id="item-name'+i+'">'+this._getItemTranslation(itemNameId)+'</span> <button class="with-icon icon10 colored transparent" onclick="SavegameEditor.editItem('+i+')"></button>'),
inputNumber('item'+i, 0, this._getItemMaximumQuantity(itemNameId), tempFile.readInt(this._getItemQuantityOffset(i)))
)
var itemVal=tempFile.readInt(this._getItemQuantityOffset(i));
var img=new Image();
img.id='icon'+i;
img.className='clickable';
img.src=BOTW_Icons.getBlankIcon();
img.addEventListener('click', function(){
SavegameEditor.editItem(i);
}, false);
/*img.addEventListener('error', function(){
img.src=BOTW_Icons.getBlankIcon();
}, false);*/
var itemNumber=document.createElement('span');
itemNumber.className='item-number';
itemNumber.innerHTML='#'+i;
var span=document.createElement('span');
span.id='item-name'+i;
span.innerHTML=this._getItemTranslation(itemNameId);
var input;
if(itemCat && itemCat==='clothes'){
input=select('item'+i, BOTW_Data.DYE_COLORS, function(){
BOTW_Icons.setIcon(img, SavegameEditor._loadItemName(i), parseInt(this.value));
});
input.value=itemVal;
BOTW_Icons.setIcon(img, itemNameId, itemVal);
}else{
input=inputNumber('item'+i, 0, this._getItemMaximumQuantity(itemNameId), itemVal);
BOTW_Icons.setIcon(img, itemNameId);
}
var r=row([1,6,3,2],
img,
span,
document.createElement('div'), /* modifier column */
input
);
r.className+=' row-items';
r.children[1].appendChild(itemNumber);
return r;
},
addItem:function(){
@ -149,7 +223,7 @@ SavegameEditor={
}
if(i<this.Constants.MAX_ITEMS){
this._writeItemName(i,'Item_Fruit_A');
document.getElementById('card-materials').appendChild(this._createItemRow(i));
document.getElementById('card-materials').appendChild(this._createItemRow(i, false));
this.editItem(i);
}
},
@ -158,61 +232,7 @@ SavegameEditor={
currentEditingItem=i;
document.getElementById('select-item').value=this._loadItemName(i);
currentEditingItem2=false;
/* check if has modifier (weapons/bows/shields) */
if(i<60){
var itemName=this._loadItemName(i);
var itemCat=this._getItemCategory(itemName);
if(
(itemCat==='weapons') ||
(itemCat==='bows' && !(itemName.endsWith('Arrow') || itemName.endsWith('Arrow_A'))) ||
(itemCat==='shields')
){
var catStartsAt=0;
if(itemCat==='bows' || itemCat==='shields'){
for(var j=0; j<40; j++){ /* 20 weapons + 14 bows + 6 arrows */
if(this._getItemCategory(this._loadItemName(j))===itemCat){
catStartsAt=j;
break;
}
}
}
var pos=i-catStartsAt;
if(
(itemCat==='weapons' && pos<20) ||
(itemCat==='bows' && pos<16) ||
(itemCat==='shields' && pos<20)
){
currentEditingItem2={type:itemCat,order:pos};
var offset1=this._getModifierOffset1(itemCat);
var offset2=this._getModifierOffset2(itemCat);
getField('modifier').children[0].value=0xffffffff;
getField('modifier').children[0].innerHTML='unknown';
var modifier=tempFile.readInt(offset1+pos*0x08);
setValue('modifier', modifier);
setValue('modifier-value', tempFile.readInt(offset2+pos*0x08));
getField('modifier').children[0].value=modifier;
getField('modifier').children[0].innerHTML='unknown 0x'+modifier.toString(16);
if(getValue('modifier')==='')
setValue('modifier', modifier);
}
}
}
if(currentEditingItem2){
show('row-modifier');
}else{
hide('row-modifier');
}
MarcDialogs.open('item');
},
editItem2:function(i,nameId){
var oldCat=this._getItemCategory(this._loadItemName(i));
@ -221,28 +241,30 @@ SavegameEditor={
if(oldCat!==newCat){
var row=this._getItemRow(i);
row.parentElement.removeChild(row);
document.getElementById('card-'+newCat).appendChild(row);
document.getElementById('container-'+newCat).appendChild(row);
}
this._writeItemName(i, nameId);
document.getElementById('item-name'+i).innerHTML=this._getItemTranslation(nameId);
document.getElementById('number-item'+i).maxValue=this._getItemMaximumQuantity(nameId);
BOTW_Icons.setIcon(document.getElementById('icon'+i), nameId);
if(document.getElementById('number-item'+i))
document.getElementById('number-item'+i).maxValue=this._getItemMaximumQuantity(nameId);
},
_getModifierOffset1:function(type){
if(type==='bows')
return this.Offsets.MOD_BOW_TYPES;
return this.Offsets.FLAGS_BOW;
else if(type==='shields')
return this.Offsets.MOD_SHIELD_TYPES;
return this.Offsets.FLAGS_SHIELDS;
else
return this.Offsets.MOD_WEAPON_TYPES;
return this.Offsets.FLAGS_WEAPON;
},
_getModifierOffset2:function(type){
if(type==='bows')
return this.Offsets.MOD_BOW_VALUES;
return this.Offsets.FLAGSV_BOW;
else if(type==='shields')
return this.Offsets.MOD_SHIELD_VALUES;
return this.Offsets.FLAGSV_SHIELD;
else
return this.Offsets.MOD_WEAPON_VALUES;
return this.Offsets.FLAGSV_WEAPON;
},
editModifier2:function(type,i,modifier,val){
@ -292,14 +314,24 @@ SavegameEditor={
/* check if savegame is valid */
checkValidSavegame:function(){
return (tempFile.fileSize===896976 || tempFile.fileSize===897160 || tempFile.fileSize===897112)
tempFile.littleEndian=false;
for(var i=0; i<this.Constants.FILESIZE.length; i++){
if(tempFile.fileSize===this.Constants.FILESIZE[i] && tempFile.readInt(0)===this.Constants.HEADER[i] && tempFile.readInt(4)===0xffffffff){
this._getOffsets(i);
setValue('version', 'v1.'+i+'.x');
return true;
}
}
return false
},
preload:function(){
setNumericRange('koroks', 0, 900);
setNumericRange('rupees', 0, 999999);
setNumericRange('mons', 0, 999999);
setNumericRange('relic-gerudo', 0, 99);
setNumericRange('relic-goron', 0, 99);
setNumericRange('relic-rito', 0, 99);
/* prepare edit item selector */
for(var i=0; i<BOTW_Data.Translations.length; i++){
@ -316,89 +348,114 @@ SavegameEditor={
}
/* dialogs */
var MODIFIER_FLAGS=[
{value:0xffffffff, name:'unknown'},
{value:0x00000000, name:'(none)'},
{value:0x00000001, name:'Attack up'},
{value:0x80000001, name:'Attack up ★'},
{value:0x00000002, name:'Durability up'},
{value:0x80000002, name:'Durability up ★'},
{value:0x00000004, name:'Critical hit up'},
{value:0x80000004, name:'Critical hit up ★'},
{value:0x00000008, name:'(Weapon only) Long throw'},
{value:0x80000008, name:'(Weapon only) Long throw ★'},
{value:0x00000010, name:'(Bow only) unknown 1?'},
{value:0x80000010, name:'(Bow only) unknown 1? ★'},
{value:0x00000020, name:'(Bow only) unknown 2?'},
{value:0x80000020, name:'(Bow only) unknown 2? ★'},
{value:0x00000040, name:'(Bow only) Quick shot'},
{value:0x80000040, name:'(Bow only) Quick shot ★'},
{value:0x00000080, name:'(Shield only) Shield surf up'},
{value:0x80000080, name:'(Shield only) Shield surf up ★'},
{value:0x00000100, name:'(Shield only) Shield guard up'},
{value:0x80000100, name:'(Shield only) Shield guard up ★'},
];
select('modifier', MODIFIER_FLAGS);
setNumericRange('modifier-value', 0, 0xffffffff);
select('horse-saddles', this._arrayToSelectOpts(BOTW_Data.HORSE_SADDLES));
select('horse-reins', this._arrayToSelectOpts(BOTW_Data.HORSE_REINS));
select('horse-type', this._arrayToSelectOpts(BOTW_Data.HORSE_TYPES));
},
_timeToString:function(timeVal){
var seconds=timeVal%60;
if(seconds<10)seconds='0'+seconds;
var minutes=parseInt(timeVal/60)%60;
if(minutes<10)seconds='0'+seconds;
return parseInt(timeVal/3600)+':'+minutes+':'+seconds;
},
/* load function */
load:function(){
tempFile.littleEndian=false;
tempFile.fileName='game_data.sav';
/* check savegame version */
if(tempFile.fileSize===896976){
this._getOffsets(0);
setValue('version', 'v1.0.x');
}else if(tempFile.fileSize===897160){
this._getOffsets(1);
setValue('version', 'v1.1.x');
}else if(tempFile.fileSize===897112){
this._getOffsets(2);
setValue('version', 'v1.2.x');
}
/* prepare editor */
setValue('rupees', tempFile.readInt(this.Offsets.RUPEES));
setValue('mons', tempFile.readInt(this.Offsets.MONS));
setValue('relic-gerudo', tempFile.readInt(this.Offsets.RELIC_GERUDO));
setValue('relic-goron', tempFile.readInt(this.Offsets.RELIC_GORON));
setValue('relic-rito', tempFile.readInt(this.Offsets.RELIC_RITO));
setValue('koroks', tempFile.readInt(this.Offsets.KOROK_SEED_COUNTER));
empty('ul-locations');
setValue('defeated-hinox', tempFile.readInt(this.Offsets.DEFEATED_HINOX_COUNTER));
setValue('defeated-talus', tempFile.readInt(this.Offsets.DEFEATED_TALUS_COUNTER));
setValue('defeated-molduga', tempFile.readInt(this.Offsets.DEFEATED_MOLDUGA_COUNTER));
setValue('playtime',this._timeToString(tempFile.readInt(this.Offsets.PLAYTIME)));
/* items */
empty('card-items');
for(var i=0; i<BOTW_Data.Translations.length; i++){
var card=document.createElement('div');
card.id='card-'+BOTW_Data.Translations[i].id;
get('card-items').appendChild(card);
var h3=document.createElement('h3');
h3.innerHTML=BOTW_Data.Translations[i].id;
card.appendChild(h3);
}
empty('container-weapons');
empty('container-bows');
empty('container-shields');
empty('container-clothes');
empty('container-materials');
empty('container-food');
empty('container-other');
var modifiersArray=[0,0,0];
var search=0; //0:weapons, 1:bows, 2:shields
for(var i=0; i<this.Constants.MAX_ITEMS; i++){
var itemNameId=this._loadItemName(i);
if(itemNameId==='')
break;
document.getElementById('card-'+this._getItemCategory(itemNameId)).appendChild(
this._createItemRow(i)
var itemCat=this._getItemCategory(itemNameId);
document.getElementById('container-'+itemCat).appendChild(
this._createItemRow(i, itemCat)
);
if(search===0 && itemCat==='bows'){
search=1;
}else if(search===0 && itemCat==='shields'){
search=2;
}else if(search===1 && itemCat==='shields'){
search=2;
}else if(itemCat!=='weapons' && itemCat!=='bows' && itemCat!=='shields'){
search=3;
}
if(itemCat==='weapons' && search===0){
modifiersArray[0]++;
}else if(itemCat==='bows' && search===1 && itemNameId.startsWith('Weapon_')){
modifiersArray[1]++;
}else if(itemCat==='shields' && search===2){
modifiersArray[2]++;
}
}
MarcTooltips.add(document.querySelectorAll('#container-weapons input'),'Weapon durability',{position:'bottom',align:'right'});
MarcTooltips.add(document.querySelectorAll('#container-bows input'),'Bow durability',{position:'bottom',align:'right'});
MarcTooltips.add(document.querySelectorAll('#container-shields input'),'Shield durability',{position:'bottom',align:'right'});
BOTW_Icons.startLoadingIcons();
/* modifier column */
var modifierColumns=['weapon','bow','shield'];
for(var j=0; j<3; j++){
var modifierColumn=modifierColumns[j];
for(var i=0; i<modifiersArray[j]; i++){
var modifier=tempFile.readInt(this.Offsets['FLAGS_'+modifierColumn.toUpperCase()]+i*8);
var modifierSelect=select('modifier-'+modifierColumn+'s-'+i, BOTW_Data.MODIFIERS.concat({value:modifier,name:this._toHexInt(modifier)}));
modifierSelect.value=modifier;
var additional=document.getElementById('container-'+modifierColumn+'s').children[i].children[2];
additional.appendChild(modifierSelect);
additional.appendChild(inputNumber('modifier-'+modifierColumn+'s-value-'+i, 0, 0xffffffff, tempFile.readInt(this.Offsets['FLAGSV_'+modifierColumn.toUpperCase()]+i*8)));
}
}
},
/* save function */
save:function(){
/* RUPEES */
/* STATS */
tempFile.writeInt(this.Offsets.RUPEES, getValue('rupees'));
tempFile.writeInt(this.Offsets.MONS, getValue('mons'));
tempFile.writeInt(this.Offsets.RELIC_GERUDO, getValue('relic-gerudo'));
tempFile.writeInt(this.Offsets.RELIC_GORON, getValue('relic-goron'));
tempFile.writeInt(this.Offsets.RELIC_RITO, getValue('relic-rito'));
tempFile.writeInt(this.Offsets.KOROK_SEED_COUNTER, getValue('koroks'));
tempFile.writeInt(this.Offsets.DEFEATED_HINOX_COUNTER, getValue('defeated-hinox'));
tempFile.writeInt(this.Offsets.DEFEATED_TALUS_COUNTER, getValue('defeated-talus'));
tempFile.writeInt(this.Offsets.DEFEATED_MOLDUGA_COUNTER, getValue('defeated-molduga'));
/* ITEMS */
for(var i=0; i<this.Constants.MAX_ITEMS; i++){
@ -407,5 +464,105 @@ SavegameEditor={
else
break;
}
/* modifiers */
for(var i=0; document.getElementById('select-modifier-weapons-'+i); i++){
tempFile.writeInt(this.Offsets.FLAGS_WEAPON+i*8, getValue('modifier-weapons-'+i));
tempFile.writeInt(this.Offsets.FLAGSV_WEAPON+i*8, getValue('modifier-weapons-value-'+i));
}
for(var i=0; document.getElementById('select-modifier-bows-'+i); i++){
tempFile.writeInt(this.Offsets.FLAGS_BOW+i*8, getValue('modifier-bows-'+i));
tempFile.writeInt(this.Offsets.FLAGSV_BOW+i*8, getValue('modifier-bows-value-'+i));
}
for(var i=0; document.getElementById('select-modifier-shields-'+i); i++){
tempFile.writeInt(this.Offsets.FLAGS_SHIELD+i*8, getValue('modifier-shields-'+i));
tempFile.writeInt(this.Offsets.FLAGSV_SHIELD+i*8, getValue('modifier-shields-value-'+i));
}
}
}
}
function setBooleans(hashTable, counterElement){
var counter=0;
for(var i=0;i<hashTable.length; i++){
var offset=SavegameEditor._searchHash(hashTable[i]);
if(offset && !tempFile.readInt(offset+4)){
tempFile.writeInt(offset+4, 1);
counter++;
}
}
if(counterElement)
setValue(counterElement, parseInt(getValue(counterElement))+counter);
return counter;
}
function unlockKoroks(){
var unlockedKoroks=setBooleans(BOTW_Data.KOROKS,'koroks');
var offset=SavegameEditor._searchHash(0x64622a86); //HiddenKorok_Complete
tempFile.writeInt(offset+4, 1);
//search korok seeds in inventory
for(var i=0; i<SavegameEditor.Constants.MAX_ITEMS; i++){
if(SavegameEditor._loadItemName(i)==='Obj_KorokNuts'){
setValue('item'+i, parseInt(getValue('item'+i))+unlockedKoroks);
break;
}
}
MarcDialogs.alert(unlockedKoroks+' korok seeds were added');
}
function defeatAllHinox(){
var unlockedKoroks=setBooleans(BOTW_Data.DEFEATED_HINOX,'defeated-hinox');
MarcDialogs.alert(unlockedKoroks+' Hinox have been defeated');
}
function defeatAllTalus(){
var unlockedKoroks=setBooleans(BOTW_Data.DEFEATED_TALUS,'defeated-talus');
MarcDialogs.alert(unlockedKoroks+' Talus have been defeated');
}
function defeatAllMolduga(){
var unlockedKoroks=setBooleans(BOTW_Data.DEFEATED_MOLDUGA,'defeated-molduga');
MarcDialogs.alert(unlockedKoroks+' Molduga have been defeated');
}
function visitAllLocations(){
var missingLocations=setBooleans(BOTW_Data.LOCATIONS);
MarcDialogs.alert(missingLocations+' unknown locations were visited');
}
function setCompendiumToStock(){
var setToStock=0;
for(var i=0; i<BOTW_Data.PICTURE_BOOK_SIZE.length; i++){
var offset=SavegameEditor._searchHash(BOTW_Data.PICTURE_BOOK_SIZE[i]);
if(typeof offset === 'number'){
var val=tempFile.readInt(offset+4);
if(val && val!==0xffffffff){
tempFile.writeInt(offset+4, 0xffffffff);
setToStock++;
}
}
}
MarcDialogs.alert(setToStock+' pics were reseted to stock.<br/>You can now safely remove all .jpg files under <u>pict_book</u> folder.');
}
/* MarcTooltips.js v20170518 - Marc Robledo 2014-2017 - http://www.marcrobledo.com/license */
var MarcTooltips=function(){return{add:function(a,b,c){var d=document.createElement("div");d.className="tooltip",d.style.position="absolute",d.style.zIndex="9000",d.style.top="0",d.style.left="0",d.innerHTML=b,document.body.appendChild(d);var e="down",f="center";c&&c.position&&/^(up|down|left|right)$/i.test(c.position)&&(e=c.position.toLowerCase()),c&&c.align&&/^(top|bottom|left|right)$/i.test(c.align)&&(("up"!==e&&"down"!==e||"left"!==c.align&&"right"!==c.align)&&("left"!==e&&"right"!==e||"top"!==c.align&&"bottom"!==c.align)||(f=c.align.toLowerCase()));var h=document.createElement("div");h.className="arrow",d.className+=" position-"+e+" align-"+f,d.className+="left"===e||"right"===e?" position-horizontal":" position-vertical",d.appendChild(h);var i=function(){var a=document.documentElement,b=(window.pageXOffset||a.scrollLeft)-(a.clientLeft||0),c=(window.pageYOffset||a.scrollTop)-(a.clientTop||0),g=this.getBoundingClientRect(),h=d.getBoundingClientRect();d.style.top="up"===e?parseInt(g.top+c-h.height)+"px":"down"===e?parseInt(g.top+c+g.height)+"px":"top"===f?parseInt(g.top+c)+"px":"bottom"===f?parseInt(g.top+c-(h.height-g.height))+"px":parseInt(g.top+c-parseInt((h.height-g.height)/2))+"px",d.style.left="up"===e||"down"===e?"left"===f?parseInt(g.left+b)+"px":"right"===f?parseInt(g.left+b-(h.width-g.width))+"px":parseInt(g.left+b-parseInt((h.width-g.width)/2))+"px":"left"===e?parseInt(g.left+b-h.width)+"px":parseInt(g.left+b+g.width)+"px",d.className+=" visible"},j=function(){d.className=d.className.replace(" visible","")};"string"==typeof a&&(a=[a]);for(var k=0;k<a.length;k++)if("string"==typeof a[k])if(/^#[0-9a-zA-Z_\-]+$/.test(a[k])){var l=document.getElementById(a[k].replace("#",""));l.addEventListener("mouseover",i,!1),l.addEventListener("mouseout",j,!1)}else for(var m=document.querySelectorAll(a[k]),n=0;n<m.length;n++)m[n].addEventListener("mouseover",i,!1),m[n].addEventListener("mouseout",j,!1);else a[k].addEventListener("mouseover",i,!1),a[k].addEventListener("mouseout",j,!1)}}}();
function onScroll(){
var h=document.getElementById('header-top').getBoundingClientRect().height;
if(window.scrollY>h){
document.getElementById('header').style.position='fixed';
document.getElementById('header').style.top='-'+h+'px';
}else{
document.getElementById('header').style.position='absolute';
document.getElementById('header').style.top='0px';
}
}
window.addEventListener('load',function(){
window.addEventListener('scroll',onScroll,false);
}, false);