new UI and features for botw editor
BIN
zelda-botw/assets/Armor_Head.png
Normal file
After Width: | Height: | Size: 143 KiB |
BIN
zelda-botw/assets/Armor_Lower.png
Normal file
After Width: | Height: | Size: 170 KiB |
BIN
zelda-botw/assets/Armor_Upper.png
Normal file
After Width: | Height: | Size: 213 KiB |
BIN
zelda-botw/assets/Item_Chilled.png
Normal file
After Width: | Height: | Size: 11 KiB |
BIN
zelda-botw/assets/Item_ChilledFish.png
Normal file
After Width: | Height: | Size: 12 KiB |
BIN
zelda-botw/assets/Item_Cook.png
Normal file
After Width: | Height: | Size: 188 KiB |
BIN
zelda-botw/assets/Item_Enemy.png
Normal file
After Width: | Height: | Size: 55 KiB |
BIN
zelda-botw/assets/Item_FishGet.png
Normal file
After Width: | Height: | Size: 16 KiB |
BIN
zelda-botw/assets/Item_Fruit.png
Normal file
After Width: | Height: | Size: 15 KiB |
BIN
zelda-botw/assets/Item_InsectGet.png
Normal file
After Width: | Height: | Size: 25 KiB |
BIN
zelda-botw/assets/Item_Material.png
Normal file
After Width: | Height: | Size: 9.9 KiB |
BIN
zelda-botw/assets/Item_Meat.png
Normal file
After Width: | Height: | Size: 9.9 KiB |
BIN
zelda-botw/assets/Item_MushroomGet.png
Normal file
After Width: | Height: | Size: 16 KiB |
BIN
zelda-botw/assets/Item_Ore.png
Normal file
After Width: | Height: | Size: 14 KiB |
BIN
zelda-botw/assets/Item_PlantGet.png
Normal file
After Width: | Height: | Size: 15 KiB |
BIN
zelda-botw/assets/Item_Roast.png
Normal file
After Width: | Height: | Size: 48 KiB |
BIN
zelda-botw/assets/Item_RoastFish.png
Normal file
After Width: | Height: | Size: 13 KiB |
BIN
zelda-botw/assets/Other.png
Normal file
After Width: | Height: | Size: 64 KiB |
BIN
zelda-botw/assets/Weapon_Bow.png
Normal file
After Width: | Height: | Size: 32 KiB |
BIN
zelda-botw/assets/Weapon_Lsword.png
Normal file
After Width: | Height: | Size: 42 KiB |
BIN
zelda-botw/assets/Weapon_Shield.png
Normal file
After Width: | Height: | Size: 49 KiB |
BIN
zelda-botw/assets/Weapon_Spear.png
Normal file
After Width: | Height: | Size: 34 KiB |
BIN
zelda-botw/assets/Weapon_Sword.png
Normal file
After Width: | Height: | Size: 46 KiB |
BIN
zelda-botw/assets/_blank.png
Normal file
After Width: | Height: | Size: 456 B |
BIN
zelda-botw/assets/bg_black.jpg
Normal file
After Width: | Height: | Size: 54 KiB |
BIN
zelda-botw/assets/bg_white.jpg
Normal file
After Width: | Height: | Size: 19 KiB |
BIN
zelda-botw/assets/logo.png
Normal file
After Width: | Height: | Size: 4.1 KiB |
@ -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>
|
||||
|
@ -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
|
@ -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
@ -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}
|
158
zelda-botw/zelda-botw.icons.js
Normal 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'},
|
||||
}
|
||||
}());
|
@ -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);
|