added standalone editors
BIN
hyrule-warriors/APP.BIN
Normal file
86
hyrule-warriors/_index.html
Normal file
@ -0,0 +1,86 @@
|
||||
<!DOCTYPE html>
|
||||
<html manifest="savegame-editor.appcache">
|
||||
<head>
|
||||
<title>Savegame Editor – Hyrule Warriors</title>
|
||||
<meta http-equiv="content-Type" content="text/html; charset=UTF-8"/>
|
||||
<meta name="description" content="A savegame editor for Hyrule Warriors. It can edit values for your apple and materials."/>
|
||||
<meta name="keywords" content="html5, savegame, save, editor, hack, exploit, wii u, hyrule warriors, materials, experience, weapons"/>
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=0"/>
|
||||
<link rel="shortcut icon" href="../savegame-editor.png"/>
|
||||
<link type="text/css" rel="stylesheet" href="../savegame-editor.css" media="all"/>
|
||||
<script type="text/javascript" src="../savegame-editor.js"></script>
|
||||
<script type="text/javascript" src="./hyrule-warriors.js"></script>
|
||||
</head>
|
||||
<body>
|
||||
|
||||
<!-- HEADER -->
|
||||
<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 Hyrule Warriors</small></h1>
|
||||
<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/hyrule-warriors" target="_blank" class="button"><span class="sprite github"></span> See on GitHub</a>
|
||||
<a href="https://www.paypal.me/marcrobledo/5" target="_blank" rel="nofollow" class="donate button"><span class="sprite heart"></span> Donate</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div id="toolbar" class="hidden padding-vertical">
|
||||
<div class="row wrapper">
|
||||
<div class="twelve columns text-center">
|
||||
<button class="button with-icon icon3" onclick="closeFileConfirm()">Close file</button>
|
||||
<button class="button colored blue with-icon icon9" onclick="saveChanges()">Save changes</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
<!-- THE EDITOR -->
|
||||
<div id="the-editor" class="wrapper hidden">
|
||||
<!-- MATERIALS -->
|
||||
<h3 class="border-red">Materials</h3>
|
||||
<div class="row" id="row-materials">
|
||||
<div class="three columns"><label for="number-rupees">Rupees</label></div>
|
||||
<div class="one columns"><input id="number-rupees" type="text" /></div>
|
||||
</div>
|
||||
<div class="text-center">
|
||||
<button class="button" id="button-discover-materials" onclick="SavegameEditor.discoverMaterials()">Discover all materials</button>
|
||||
</div>
|
||||
|
||||
|
||||
<!-- CHARACTERS -->
|
||||
<h3 class="border-green">Characters</h3>
|
||||
<div class="row" id="row-characters">
|
||||
<div class="three columns"> </div>
|
||||
<div class="three columns">Damage</div>
|
||||
<div class="three columns">Level</div>
|
||||
<div class="three columns">Experience</div>
|
||||
</div>
|
||||
|
||||
<!-- MAPS -->
|
||||
<h3 class="border-orange">Maps</h3>
|
||||
<label for="select-map">Map</label> <span id="container-select-map"></span>
|
||||
<hr/>
|
||||
<div id="maps"></div>
|
||||
|
||||
<!-- WEAPONS -->
|
||||
<h3 class="border-red">Weapons</h3>
|
||||
|
||||
<label for="select-weapon">Weapon slot</label>
|
||||
<span id="container-select-weapon"></span>
|
||||
<span class="bg-light-gray round" style="padding: 3px 12px">Approximate power: <span id="span-weapon-power"></span></span>
|
||||
<hr/>
|
||||
<div class="row">
|
||||
<div class="three columns">Weapon type</div><div class="three columns" id="container-weapon-type"></div>
|
||||
<div class="three columns">Weapon ID</div><div class="three columns" id="container-weapon-id"></div>
|
||||
<div class="three columns">Base Power</div><div class="three columns" id="container-weapon-base-power"></div>
|
||||
<div class="three columns">Stars</div><div class="three columns" id="container-weapon-stars"></div>
|
||||
</div>
|
||||
<hr/>
|
||||
<div id="weapons-skills-container"></div>
|
||||
|
||||
</div>
|
||||
|
||||
</body>
|
||||
</html>
|
BIN
hyrule-warriors/favicon.png
Normal file
After Width: | Height: | Size: 9.1 KiB |
694
hyrule-warriors/hyrule-warriors.js
Normal file
@ -0,0 +1,694 @@
|
||||
/*
|
||||
Hyrule Warriors v20161101
|
||||
by Marc Robledo 2016
|
||||
*/
|
||||
/* reference: http://gbatemp.net/threads/hyrule-warriors-save-editing.425943/ */
|
||||
|
||||
var currentWeapon=0;
|
||||
var weaponFilters=[
|
||||
null
|
||||
];
|
||||
SavegameEditor={
|
||||
Name:'Hyrule Warriors',
|
||||
Filename:'APP.BIN',
|
||||
|
||||
/* Constants */
|
||||
Constants:{
|
||||
CHARACTER_SIZE: 0x38,
|
||||
CHARACTER_LEVEL_OFFSET:0x07,
|
||||
CHARACTER_EXP_OFFSET:0x08,
|
||||
CHARACTER_PACKS:[
|
||||
{
|
||||
Offset:0x8c184,
|
||||
Names:[
|
||||
'Link',
|
||||
'Zelda',
|
||||
'Sheik',
|
||||
'Impa',
|
||||
'Ganondorf',
|
||||
'Darunia',
|
||||
'Ruto',
|
||||
'Agitha',
|
||||
'Midna',
|
||||
'Fi',
|
||||
'Girahim',
|
||||
'Zant',
|
||||
null,
|
||||
'Lana'
|
||||
]
|
||||
},{
|
||||
Offset:0x8cb24,
|
||||
Names:[
|
||||
'Cia',
|
||||
'Volga',
|
||||
'Wizzro',
|
||||
'Twili Midna',
|
||||
'Young Link',
|
||||
'Tingle',
|
||||
'Ganon',
|
||||
'Cucco',
|
||||
'Linkle',
|
||||
'Skull Kid',
|
||||
'Toon Link',
|
||||
'Tetra',
|
||||
'King Daphnes',
|
||||
'Medli',
|
||||
'Marin',
|
||||
'Toon Zelda',
|
||||
'Ravio',
|
||||
'Yuga'
|
||||
]
|
||||
}
|
||||
],
|
||||
|
||||
MAPS:[
|
||||
{
|
||||
Title:'Adventure Map',
|
||||
Offset:0x141e8,
|
||||
Items:[
|
||||
'Compass',
|
||||
'Bombs',
|
||||
'Candle',
|
||||
'Ladder',
|
||||
'Power Bracelet',
|
||||
'Water Bombs',
|
||||
'Digging Mitts',
|
||||
'Ice Arrows',
|
||||
'Raft',
|
||||
'Hookshot',
|
||||
'Recorder',
|
||||
'Goddess\'s Harp'
|
||||
]
|
||||
},{
|
||||
Title:'Master Quest Map',
|
||||
Offset: 0x19240,
|
||||
Items:[
|
||||
'Compass',
|
||||
'Bombs',
|
||||
'Candle',
|
||||
'Ladder',
|
||||
'Power Bracelet',
|
||||
'Water Bombs',
|
||||
'Digging Mitts',
|
||||
'Ice Arrows',
|
||||
'Raft',
|
||||
'Hookshot',
|
||||
'Recorder',
|
||||
'Goddess\'s Harp'
|
||||
]
|
||||
},{
|
||||
Title:'Twilight Map',
|
||||
Offset: 0x1Ba6c,
|
||||
Items:[
|
||||
'Compass',
|
||||
'Bombs',
|
||||
null,
|
||||
null,
|
||||
null,
|
||||
'Water Bombs',
|
||||
'Digging Mitts',
|
||||
null,
|
||||
null,
|
||||
null,
|
||||
null,
|
||||
null,
|
||||
'Lantern',
|
||||
'Jar',
|
||||
'Fishing Rod',
|
||||
'Clawshot',
|
||||
'Spinner',
|
||||
'Ooccoo',
|
||||
'Tears of Light',
|
||||
'Tears of Twilight'
|
||||
]
|
||||
},{
|
||||
Title:'Termina Map',
|
||||
Offset:0x1e298,
|
||||
Items:[
|
||||
'Compass',
|
||||
'Bombs',
|
||||
null,
|
||||
null,
|
||||
null,
|
||||
null,
|
||||
null,
|
||||
'Ice Arrows',
|
||||
null,
|
||||
null,
|
||||
null,
|
||||
null,
|
||||
null,
|
||||
null,
|
||||
null,
|
||||
null,
|
||||
null,
|
||||
null,
|
||||
null,
|
||||
null,
|
||||
'Song of Time',
|
||||
'Inverted Song of Time',
|
||||
'Deku Stick',
|
||||
'Deku Mask',
|
||||
'Goron Mask',
|
||||
'Zora Mask',
|
||||
'Mask of Truth',
|
||||
'Majora\'s Mask',
|
||||
'Giant Summon'
|
||||
]
|
||||
}
|
||||
],
|
||||
|
||||
|
||||
RUPEES_OFFSET: 0x14c,
|
||||
MATERIALS_OFFSET: 0x13d2c,
|
||||
MATERIALS_DISCOVERED: 0x13e2c,
|
||||
MATERIALS_DISCOVERED_ALL:[
|
||||
0xff, 0xff, 0xff, 0xff,
|
||||
0xff, 0xff, 0xff, 0xff,
|
||||
0xff, 0x1f, 0x00, 0x00
|
||||
],
|
||||
MATERIALS:[
|
||||
'Metal Plate',
|
||||
'Monster Tooth',
|
||||
'Old Rag',
|
||||
'Soldier\'s Uniform',
|
||||
'Rock',
|
||||
'Aeralfos Leather',
|
||||
'Fiery Aeralfos Leather',
|
||||
'Gibdo Bandage',
|
||||
'ReDead Bandage',
|
||||
'Lizalfos Scale',
|
||||
'Dinolfos Fang',
|
||||
'Moblin Flank',
|
||||
'Shield-Moblin Helmet',
|
||||
'Piece of Darknut Armor',
|
||||
'Stalmaster Wrist Bone',
|
||||
'Big Poe Necklace',
|
||||
'Essence of Icy Big Poe',
|
||||
'Hylian Captain Gauntlet',
|
||||
'Goron Armor Breastplate',
|
||||
'Ganon\'s Mane',
|
||||
'King Dodongo\'s Claws',
|
||||
'Gohma\'s Acid',
|
||||
'Manhandla\'s Toxic Dust',
|
||||
'Argorok\'s Embers',
|
||||
'The Imprisoned\'s Scales',
|
||||
'Cia\'s Bracelet',
|
||||
'Volga\'s Helmet',
|
||||
'Wizzro\'s Robe',
|
||||
'Link\'s Boots',
|
||||
'Lana\'s Hair Clip',
|
||||
'Zelda\'s Brooch',
|
||||
'Impa\'s Hair Band',
|
||||
'Ganondorf\'s Gauntlet',
|
||||
'Sheik\'s Kunai',
|
||||
'Darunia\'s Spikes',
|
||||
'Ruto\'s Earrings',
|
||||
'Agitha\'s Basket',
|
||||
'Midna\'s Hair',
|
||||
'Fi\'s Heels',
|
||||
'Ghirahim\'s Sash',
|
||||
'Zant\'s Magic Gem',
|
||||
'Round Aeralfos Shield',
|
||||
'Fiery Aeralfos Wing',
|
||||
'Heavy Gibdo Sword',
|
||||
'ReDead Knight Ashes',
|
||||
'Lizalfos Gauntlet',
|
||||
'Dinolfos Arm Guard',
|
||||
'Moblin Spear',
|
||||
'Metal Moblin Shield',
|
||||
'Large Darknut Sword',
|
||||
'Stalmaster\'s Skull',
|
||||
'Big Poe\'s Lantern',
|
||||
'Icy Big Poe\'s Talisman',
|
||||
'Holy Hylian Shield',
|
||||
'Thick Goron Helmet',
|
||||
'Ganon\'s Fang',
|
||||
'King Dodongo\'s Crystal',
|
||||
'Gohma\'s Lens',
|
||||
'Manhandla\'s Sapling',
|
||||
'Argorok\'s Stone',
|
||||
'The Imprisoned\'s Pillar',
|
||||
'Cia\'s Staff',
|
||||
'Volga\'s Dragon Spear',
|
||||
'Wizzro\'s Ring',
|
||||
'Link\'s Scarf',
|
||||
'Lana\'s Cloak',
|
||||
'Zelda\'s Tiara',
|
||||
'Impa\'s Breastplate',
|
||||
'Ganondorf\'s Jewel',
|
||||
'Sheik\'s Turban',
|
||||
'Darunia\'s Bracelet',
|
||||
'Ruto\'s Scale',
|
||||
'Agitha\'s Pendant',
|
||||
'Midna\'s Fused Shadow',
|
||||
'Fi\'s Crystal',
|
||||
'Ghirahim\'s Cape',
|
||||
'Zant\'s Helmet'
|
||||
],
|
||||
|
||||
MAX_WEAPONS:1030,
|
||||
WEAPONS_OFFSET:0x8d74c,
|
||||
WEAPON_SIZE:0x4c,
|
||||
WEAPON_TYPES:[
|
||||
{value:0, name:'(no weapon)'},
|
||||
{value:1, name:'Normal weapon (blank?)'},
|
||||
{value:2, name:'Normal weapon (NEW)'},
|
||||
{value:3, name:'Normal weapon'},
|
||||
{value:9, name:'Master Sword (blank?)'},
|
||||
{value:10, name:'Master sword (NEW)'},
|
||||
{value:11, name:'Master sword'},
|
||||
{value:17, name:'Legendary skill (blank?)'},
|
||||
{value:18, name:'Legendary skill (NEW)'},
|
||||
{value:19, name:'Legendary skill'},
|
||||
{value:25, name:'MS+LS (hack, blank?)'},
|
||||
{value:26, name:'MS+LS (hack, NEW)'},
|
||||
{value:27, name:'MS+LS (hack)'}
|
||||
],
|
||||
WEAPON_IDS:[
|
||||
'Knight\'s Sword (Link - Hylian Sword Level 1)',
|
||||
'White Sword (Link - Hylian Sword Level 2)',
|
||||
'Magical Sword (Link - Hylian Sword Level 3)',
|
||||
'Fire Rod (Link - Magic Rod Level 1)',
|
||||
'Prism Rod (Link - Magic Rod Level 2)',
|
||||
'Magical Rod (Link - Magic Rod Level 3)',
|
||||
'Great Fountain Fairy (Link - Great Fairy Level 1)',
|
||||
'Great Forest Fairy (Link - Great Fairy Level 2)',
|
||||
'Great Sky Fairy (Link - Great Fairy Level 3)',
|
||||
'Silver Gauntlets (Link - Gauntlets Level 1)',
|
||||
'Golden Gauntlets (Link - Gauntlets Level 2)',
|
||||
'Power Gloves (Link - Gauntlets Level 3)',
|
||||
'Spirit\'s Tome (Lana - Book of Sorcery Level 1)',
|
||||
'Sealing Tome (Lana - Book of Sorcery Level 2)',
|
||||
'Sorceress Tome (Lana - Book of Sorcery Level 3)',
|
||||
'Deku Spear (Lana - Spear Level 1)',
|
||||
'Kokiri Spear (Lana - Spear Level 2)',
|
||||
'Faron Spear (Lana - Spear Level 3)',
|
||||
'Gate of Time (Lana - Summoning Gate Level 1)',
|
||||
'Guardian\'s Gate (Lana - Summoning Gate Level 2)',
|
||||
'Gate of Souls (Lana - Summoning Gate Level 3)',
|
||||
'Polished Rapier (Zelda - Rapier Level 1)',
|
||||
'Glittering Rapier (Zelda - Rapier Level 2)',
|
||||
'Gleaming Rapier (Zelda - Rapier Level 3)',
|
||||
'Wind Waker (Zelda - Baton Level 1)',
|
||||
'Sacred Baton (Zelda - Baton Level 2)',
|
||||
'Glorious Baton (Zelda - Baton Level 3)',
|
||||
'Giant\'s Knife (Impa - Giant Blade Level 1)',
|
||||
'Biggoron\'s Knife (Impa - Giant Blade Level 2)',
|
||||
'Biggoron\'s Sword (Impa - Giant Blade Level 3)',
|
||||
'Guardian Naginata (Impa - Naginata Level 1)',
|
||||
'Scorching Naginata (Impa - Naginata Level 2)',
|
||||
'Sheikah Naginata (Impa - Naginata Level 3)',
|
||||
'Swords of Despair (Ganondorf - Great Swords Level 1)',
|
||||
'Swords of Darkness (Ganondorf - Great Swords Level 2)',
|
||||
'Swords of Demise (Ganondorf - Great Swords Level 3)',
|
||||
'Goddess\'s Harp (Sheik - Harp Level 1)',
|
||||
'Typhoon Harp (Sheik - Harp Level 2)',
|
||||
'Triforce Harp (Sheik - Harp Level 3)',
|
||||
'Magic Hammer (Darunia - Hammer Level 1)',
|
||||
'Igneous Hammer (Darunia - Hammer Level 2)',
|
||||
'Megaton Hammer (Darunia - Hammer Level 3)',
|
||||
'Silver Scale (Ruto - Zora Scale Level 1)',
|
||||
'Golden Scale (Ruto - Zora Scale Level 2)',
|
||||
'Water Dragon Scale (Ruto - Zora Scale Level 3)',
|
||||
'Butterfly Parasol (Agitha - Parasol Level 1)',
|
||||
'Luna Parasol (Agitha - Parasol Level 2)',
|
||||
'Princess Parasol (Agitha - Parasol Level 3)',
|
||||
'Cursed Shackle (Midna - Shackle Level 1)',
|
||||
'Twilight Shackle (Midna - Shackle Level 2)',
|
||||
'Sol Shackle (Midna - Shackle Level 3)',
|
||||
'Goddess Sword (Fi - Goddess Blade Level 1)',
|
||||
'Goddess Longsword (Fi - Goddess Blade Level 2)',
|
||||
'True Goddess Blade (Fi - Goddess Blade Level 3)',
|
||||
'Demon Tribe Sword (Ghirahim - Demon Blade Level 1)',
|
||||
'Demon Longsword (Ghirahim - Demon Blade Level 2)',
|
||||
'True Demon Blade (Ghirahim - Demon Blade Level 3)',
|
||||
'Usurper\'s Scimitars (Zant - Scimitars Level 1)',
|
||||
'Shadow Scimitars (Zant - Scimitars Level 2)',
|
||||
'Scimitars of Twilight (Zant - Scimitars Level 3)',
|
||||
'[unknown weapon]',
|
||||
'Master Sword (Link - Master Sword)',
|
||||
'8-Bit Wooden Sword (Link - Hylian Sword Level 3)',
|
||||
'8-Bit Candle (Link - Magic Rod Level 3)',
|
||||
'8-Bit Fairy (Link - Great Fairy Level 3)',
|
||||
'8-Bit Power Bracelets (Link - Gauntlets Level 3)',
|
||||
'8-Bit Book of Magic (Lana - Book of Sorcery Level 3)',
|
||||
'8-Bit Magical Rod? (Lana - Spear Level 3)',
|
||||
'8-Bit Compass (Lana - Summoning Gate Level 3)',
|
||||
'8-Bit White Sword? (Zelda - Rapier Level 3)',
|
||||
'8-Bit Recorder (Zelda - Baton Level 3)',
|
||||
'8-Bit Boomerang? (Impa - Giant Blade Level 3)',
|
||||
'8-Bit Magical Sword? (Impa - Naginata Level 3)',
|
||||
'8-Bit Magical Keys (Ganondorf - Great Swords Level 3)',
|
||||
'8-Bit Stepladder (Sheik - Harp Level 3)',
|
||||
'8-Bit Food (Darunia - Hammer Level 3)',
|
||||
'8-Bit Clock (Ruto - Zora Scale Level 3)',
|
||||
'8-Bit Rupee (Agitha - Parasol Level 3)',
|
||||
'8-Bit Red Ring (Midna - Shackle Level 3)',
|
||||
'8-Bit Silver Arrow (Fi - Goddess Blade Level 3)',
|
||||
'8-Bit Arrow (Ghirahim - Demon Blade Level 3)',
|
||||
'8-Bit Magic Boomerangs (Zant - Scimitars Level 3)',
|
||||
'Scepter of Time (Cia - Scepter Level 1)',
|
||||
'Guardian\'s Scepter (Cia - Scepter Level 2)',
|
||||
'Scepter of Souls (Cia - Scepter Level 3)',
|
||||
'Dragonbone Pike (Volga - Dragon Spear Level 1)',
|
||||
'Stonecleaver Claw (Volga - Dragon Spear Level 2)',
|
||||
'Flesh-Render Fang (Volga - Dragon Spear Level 3)',
|
||||
'Blue Ring (Wizzro - Ring Level 1)',
|
||||
'Red Ring (Wizzro - Ring Level 2)',
|
||||
'Magical Ring (Wizzro - Ring Level 3)',
|
||||
'Epona (Link - Horse Level 1)',
|
||||
'Twilight Epona (Link - Horse Level 2)',
|
||||
'Epona of Time (Link - Horse Level 3)',
|
||||
'Mirror of Shadows (Twili Midna - Mirror Level 1)',
|
||||
'Mirror of Silence (Twili Midna - Mirror Level 2)',
|
||||
'Mirror of Twilight (Twili Midna - Mirror Level 3)',
|
||||
'Ancient Spinner (Link - Spinner Level 1)',
|
||||
'Enhanced Spinner (Link - Spinner Level 2)',
|
||||
'Triforce Spinner (Link - Spinner Level 3)',
|
||||
'Old Dominion Rod (Zelda - Dominion Rod Level 1)',
|
||||
'High Dominion Rod (Zelda - Dominion Rod Level 2)',
|
||||
'Royal Dominion Rod (Zelda - Dominion Rod Level 3)',
|
||||
'Fierce Deity Mask (Young Link - Mask Level 1)',
|
||||
'Furious Deity Mask (Young Link - Mask Level 2)',
|
||||
'Vengeful Deity Mask (Young Link - Mask Level 3)',
|
||||
'Rosy Balloon (Tingle - Balloon Level 1)',
|
||||
'Love-Filled Balloon (Tingle - Balloon Level 2)',
|
||||
'Mr. Fairy Balloon (Tingle - Balloon Level 3)',
|
||||
'*** Ganon\'s Rage (Ganon) RESERVED, DO NOT USE ***',
|
||||
'*** Cucco\'s Spirit (Cucco) RESERVED, DO NOT USE ***',
|
||||
'Thief\'s Trident (Ganondorf - Trident Level 1)',
|
||||
'King of Evil Trident (Ganondorf - Trident Level 2)',
|
||||
'Trident of Demise (Ganondorf - Trident Level 3)',
|
||||
'Simple Crossbows (Linkle - Crossbows Level 1)',
|
||||
'Hylian Crossbows (Linkle - Crossbows Level 2)',
|
||||
'Legend\'s Crossbows (Linkle - Crossbows Level 3)',
|
||||
'Fairy Ocarina (Skull Kid - Ocarina Level 1)',
|
||||
'Lunar Ocarina (Skull Kid - Ocarina Level 2)',
|
||||
'Majora\'s Ocarina (Skull Kid - Ocarina Level 3)',
|
||||
'Hero\'s Sword (Toon Link - Light Sword Level 1)',
|
||||
'Phantom Sword (Toon Link - Light Sword Level 2)',
|
||||
'Lokomo Sword (Toon Link - Light Sword Level 3)',
|
||||
'Pirate Cutlass (Tetra - Cutlass Level 1)',
|
||||
'Jeweled Cutlass (Tetra - Cutlass Level 2)',
|
||||
'Regal Cutlass (Tetra - Cutlass Level 3)',
|
||||
'Windfall Sail (King Daphnes - Sail Level 1)',
|
||||
'Swift Sail (King Daphnes - Sail Level 2)',
|
||||
'Sail of Red Lions (King Daphnes - Sail Level 3)',
|
||||
'Sacred Harp (Medli - Rito Harp Level 1)',
|
||||
'Earth God\'s Harp (Medli - Rito Harp Level 2)',
|
||||
'Din\'s Harp (Medli - Rito Harp Level 3)',
|
||||
'Sea Lily\'s Bell (Marin - Bell Level 1)',
|
||||
'Wavelet Bell (Marin - Bell Level 2)',
|
||||
'Awakening Bell (Marin - Bell Level 3)',
|
||||
'Winged Boots (Linkle - Boots Level 1)',
|
||||
'Roc Boots (Linkle - Boots Level 2)',
|
||||
'Pegasus Boots (Linkle - Boots Level 3)',
|
||||
'Protector Sword (Toon Zelda - Sword Level 1)',
|
||||
'Warp Sword (Toon Zelda - Sword Level 2)',
|
||||
'Wrecker Sword (Toon Zelda - Sword Level 3)',
|
||||
'Sand Wand (Toon Link - Wand Level 1)',
|
||||
'Jeweled Sand Wand (Toon Link - Wand Level 2)',
|
||||
'Nice Sand Wand (Toon Link - Wand Level 3)',
|
||||
'Wooden Hammer (Ravio - Rental Hammer Level 1)',
|
||||
'White Bunny Hammer (Ravio - Rental Hammer Level 2)',
|
||||
'Nice Hammer (Ravio - Rental Hammer Level 3)',
|
||||
'Wooden Frame (Yuga - Picture Frame Level 1)',
|
||||
'Frame of Sealing (Yuga - Picture Frame Level 2)',
|
||||
'Demon King\'s Frame (Yuga - Picture Frame Level 3)',
|
||||
'Unknown (Unk - Unk Level 1)',
|
||||
'Unknown (Unk - Unk Level 2)',
|
||||
'Unknown (Unk - Unk Level 3)',
|
||||
{value:4294967295,name:'-'}
|
||||
],
|
||||
WEAPON_SKILLS:[
|
||||
'(blank)',
|
||||
'Strong Att.+',
|
||||
'Strength II',
|
||||
'Strength III',
|
||||
'Strength IV',
|
||||
'Strength V',
|
||||
'Strength VI',
|
||||
'Fire+',
|
||||
'Water+',
|
||||
'Lightning+',
|
||||
'Light+',
|
||||
'Darkness+',
|
||||
'VS Legend',
|
||||
'VS Time',
|
||||
'VS Twilight',
|
||||
'VS Skyward',
|
||||
'VS Sorceress',
|
||||
'VS Beast',
|
||||
'VS Dragon',
|
||||
'VS Undead',
|
||||
'VS Soldier',
|
||||
'VS Ganon',
|
||||
'EXP+',
|
||||
'Rupees+',
|
||||
'Materials+',
|
||||
'Slots+',
|
||||
'Stars+',
|
||||
'Hearts+',
|
||||
'Health+',
|
||||
'Special+',
|
||||
'Bombs+',
|
||||
'Arrows+',
|
||||
'Boomerang+',
|
||||
'Hookshot+',
|
||||
'One-Hit Kill',
|
||||
'Sturdy Feet',
|
||||
'Regen',
|
||||
'Defenseless',
|
||||
'No Healing',
|
||||
'Adversity',
|
||||
'Compatriot',
|
||||
'Evil\'s Bane',
|
||||
'Legendary',
|
||||
'Special Attack+',
|
||||
'Finishing Blow+',
|
||||
'Regular Attack+',
|
||||
'Heart-strong',
|
||||
'Focus Spirit+',
|
||||
'Hasty Attacks',
|
||||
{value:4294967295,name:'-'}
|
||||
]
|
||||
},
|
||||
|
||||
/* private functions */
|
||||
discoverMaterials:function(){
|
||||
hide('button-discover-materials');
|
||||
for(var i=0; i<this.Constants.MATERIALS_DISCOVERED_ALL.length; i++){
|
||||
tempFile.writeByte(this.Constants.MATERIALS_DISCOVERED+i, this.Constants.MATERIALS_DISCOVERED_ALL[i]);
|
||||
}
|
||||
MarcDialogs.alert('All materials are now discovered (won\'t appear as ??? in-game)');
|
||||
},
|
||||
_getWeaponOffset:function(){
|
||||
return this.Constants.WEAPONS_OFFSET+this.Constants.WEAPON_SIZE*currentWeapon
|
||||
},
|
||||
_selectWeapon:function(i){
|
||||
currentWeapon=i;
|
||||
|
||||
var offset=this._getWeaponOffset();
|
||||
setValue('weapon-type', tempFile.readByte(offset+0x00));
|
||||
setValue('weapon-id', tempFile.readInt(offset+0x04));
|
||||
setValue('weapon-base-power', tempFile.readShort(offset+0x08));
|
||||
setValue('weapon-stars', tempFile.readShort(offset+0x0a));
|
||||
for(var i=0; i<8; i++){
|
||||
setValue('weapon-skill'+i, tempFile.readInt(offset+0x0c+0x04*i));
|
||||
setValue('weapon-koskill'+i, tempFile.readInt(offset+0x2c+0x04*i));
|
||||
}
|
||||
|
||||
SavegameEditor._calculateWeaponPower();
|
||||
},
|
||||
_writeWeapon:function(){
|
||||
var offset=SavegameEditor._getWeaponOffset();
|
||||
tempFile.writeByte(offset+0x00, getValue('weapon-type'));
|
||||
tempFile.writeInt(offset+0x04, getValue('weapon-id'));
|
||||
tempFile.writeShort(offset+0x08, getValue('weapon-base-power'));
|
||||
tempFile.writeShort(offset+0x0a, getValue('weapon-stars'));
|
||||
for(var i=0; i<8; i++){
|
||||
tempFile.writeInt(offset+0x0c+0x04*i, getValue('weapon-skill'+i));
|
||||
tempFile.writeInt(offset+0x2c+0x04*i, getValue('weapon-koskill'+i));
|
||||
}
|
||||
|
||||
SavegameEditor._calculateWeaponPower();
|
||||
},
|
||||
_calculateWeaponPower:function(){
|
||||
var legendaryType=getValue('weapon-type') & 0x10;
|
||||
var legendarySkill=false;
|
||||
var evilsBane=getValue('weapon-type') & 0x20;
|
||||
var evilsBaneSkill=false;
|
||||
for(var i=0;i<8;i++){
|
||||
if(getValue('weapon-skill'+i)==0x2a && getValue('weapon-koskill'+i)==0){
|
||||
legendarySkill=true;
|
||||
}else if(getValue('weapon-skill'+i)==0x29 && getValue('weapon-koskill'+i)==0){
|
||||
evilsBaneSkill=true;
|
||||
}
|
||||
}
|
||||
var actualBasePower=0;
|
||||
var basePower=parseInt(getValue('weapon-base-power'));
|
||||
|
||||
if(legendaryType && legendarySkill){
|
||||
actualBasePower=300
|
||||
}else{
|
||||
actualBasePower=basePower
|
||||
}
|
||||
|
||||
var stars=parseInt(getValue('weapon-stars'));
|
||||
var starBonus=actualBasePower/10;
|
||||
|
||||
if(evilsBane && evilsBaneSkill){
|
||||
actualBasePower+=200
|
||||
}
|
||||
var finalPower = Math.ceil(actualBasePower+(starBonus*stars))
|
||||
|
||||
setValue('weapon-power', finalPower);
|
||||
},
|
||||
|
||||
/* check if savegame is valid */
|
||||
checkValidSavegame:function(){
|
||||
return (tempFile.fileSize==3145728)
|
||||
},
|
||||
|
||||
|
||||
/* load function */
|
||||
load:function(){
|
||||
tempFile.littleEndian=false;
|
||||
tempFile.fileName='APP.BIN';
|
||||
|
||||
|
||||
/* MATERIALS */
|
||||
setValue('rupees', tempFile.readInt(this.Constants.RUPEES_OFFSET), 0, 9999999);
|
||||
for(var i=0; i<this.Constants.MATERIALS.length; i++){
|
||||
get('row-materials').appendChild(col(3, label('number-material'+i, this.Constants.MATERIALS[i])));
|
||||
get('row-materials').appendChild(col(1, inputNumber('material'+i, 0, 999, tempFile.readShort(this.Constants.MATERIALS_OFFSET+i*2))));
|
||||
}
|
||||
|
||||
|
||||
/* CHARACTERS */
|
||||
for(var i=0; i<this.Constants.CHARACTER_PACKS.length; i++){
|
||||
var names=this.Constants.CHARACTER_PACKS[i].Names;
|
||||
|
||||
for(var j=0; j<names.length; j++){
|
||||
var offset=this.Constants.CHARACTER_PACKS[i].Offset+j*this.Constants.CHARACTER_SIZE;
|
||||
var level=tempFile.readByte(offset+this.Constants.CHARACTER_LEVEL_OFFSET);
|
||||
if(level==0xf00){
|
||||
this.Constants.CHARACTER_PACKS[i].Names[j]=null; //set this character to null, so it won't be updated on saving
|
||||
}else if(names[j]){
|
||||
get('row-characters').appendChild(
|
||||
col(3, span(names[j]))
|
||||
);
|
||||
get('row-characters').appendChild(
|
||||
col(3, inputNumber('characters'+i+'_damage'+j, 0, 99999999, tempFile.readShort(offset)))
|
||||
);
|
||||
get('row-characters').appendChild(
|
||||
col(3, inputNumber('characters'+i+'_level'+j, 1, 255, level+1))
|
||||
);
|
||||
get('row-characters').appendChild(
|
||||
col(3, inputNumber('characters'+i+'_exp'+j, 0, 12842457, tempFile.readInt(offset+this.Constants.CHARACTER_EXP_OFFSET)))
|
||||
);
|
||||
|
||||
var regexName=new RegExp(' \\('+names[j]+' - ');
|
||||
var weaponsByName=[];
|
||||
for(var k=0; k<this.Constants.WEAPON_IDS.length;k++){
|
||||
if(regexName.test(this.Constants.WEAPON_IDS[k])){
|
||||
weaponsByName.push(k);
|
||||
}
|
||||
}
|
||||
weaponFilters.push(weaponsByName);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/* MAPS */
|
||||
var maps=[];
|
||||
for(var i=0; i<this.Constants.MAPS.length; i++){
|
||||
var map=this.Constants.MAPS[i];
|
||||
maps.push(map.Title);
|
||||
|
||||
var mapDiv=row([]);
|
||||
mapDiv.style.display=(i==0)?'flex':'none';
|
||||
|
||||
get('maps').appendChild(mapDiv);
|
||||
|
||||
for(var j=0; j<map.Items.length; j++){
|
||||
if(map.Items[j]){
|
||||
mapDiv.appendChild(col(4, label('number-map'+i+'-item'+j, map.Items[j])));
|
||||
mapDiv.appendChild(col(2, inputNumber('map'+i+'-item'+j, 0, 5, tempFile.readByte(map.Offset+j))));
|
||||
}
|
||||
}
|
||||
}
|
||||
var selectMap=select('map', maps, function(){
|
||||
for(var i=0; i<SavegameEditor.Constants.MAPS.length; i++){
|
||||
get('maps').children[i].style.display=(this.value==i)?'flex':'none';
|
||||
}
|
||||
});
|
||||
selectMap.className='';
|
||||
get('container-select-map').appendChild(selectMap);
|
||||
|
||||
/* WEAPONS */
|
||||
for(var i=0; i<8; i++){
|
||||
var KOsToUnlockInput=inputNumber('weapon-koskill'+i, 0, 9999999);
|
||||
KOsToUnlockInput.addEventListener('change', this._writeWeapon, false);
|
||||
|
||||
document.getElementById('weapons-skills-container').appendChild(
|
||||
row(
|
||||
[3,3,3,3],
|
||||
label('weapon-skill'+i, 'Skill '+(i+1)),
|
||||
select('weapon-skill'+i, this.Constants.WEAPON_SKILLS, this._writeWeapon),
|
||||
label('weapon-koskill'+i, 'KOs to unlock'),
|
||||
KOsToUnlockInput
|
||||
)
|
||||
);
|
||||
}
|
||||
get('container-select-weapon').appendChild(select('weapon', genRange(0,this.Constants.MAX_WEAPONS-1), function(){SavegameEditor._selectWeapon(this.value)}));
|
||||
get('container-weapon-type').appendChild(select('weapon-type', this.Constants.WEAPON_TYPES, this._writeWeapon));
|
||||
get('container-weapon-id').appendChild(select('weapon-id', this.Constants.WEAPON_IDS, this._writeWeapon));
|
||||
get('container-weapon-base-power').appendChild(select('weapon-base-power', ['-', {value:80,name:'Level 1 (80)'}, {value:150,name:'Level 2 (150)'}, {value:280,name:'Level 3 (280)'}, {value:300,name:'Master Sword (300)'}], this._writeWeapon));
|
||||
get('container-weapon-stars').appendChild(select('weapon-stars', genRange(0,5), this._writeWeapon));
|
||||
|
||||
|
||||
|
||||
this._selectWeapon(0);
|
||||
},
|
||||
|
||||
|
||||
/* save function */
|
||||
save:function(){
|
||||
/* MATERIALS */
|
||||
tempFile.writeInt(this.Constants.RUPEES_OFFSET, getValue('rupees'));
|
||||
for(var i=0; i<this.Constants.MATERIALS.length; i++){
|
||||
tempFile.writeShort(this.Constants.MATERIALS_OFFSET+i*2, getValue('material'+i));
|
||||
}
|
||||
|
||||
|
||||
/* CHARACTERS */
|
||||
for(var i=0; i<this.Constants.CHARACTER_PACKS.length; i++){
|
||||
var names=this.Constants.CHARACTER_PACKS[i].Names;
|
||||
for(var j=0; j<names.length; j++){
|
||||
if(names[j]){
|
||||
var offset=this.Constants.CHARACTER_PACKS[i].Offset+j*this.Constants.CHARACTER_SIZE;
|
||||
|
||||
tempFile.writeShort(offset, getValue('characters'+i+'_damage'+j));
|
||||
tempFile.writeByte(offset+this.Constants.CHARACTER_LEVEL_OFFSET, getValue('characters'+i+'_level'+j)-1);
|
||||
tempFile.writeInt(offset+this.Constants.CHARACTER_EXP_OFFSET, getValue('characters'+i+'_exp'+j));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/* MAPS */
|
||||
var maps=[];
|
||||
for(var i=0; i<this.Constants.MAPS.length; i++){
|
||||
var map=this.Constants.MAPS[i];
|
||||
|
||||
for(var j=0; j<map.Items.length; j++){
|
||||
if(map.Items[j]){
|
||||
tempFile.writeByte(map.Offset+j, getValue('map'+i+'-item'+j));
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
90
hyrule-warriors/index.html
Normal file
@ -0,0 +1,90 @@
|
||||
<!DOCTYPE html>
|
||||
<html manifest="savegame-editor.appcache">
|
||||
<head>
|
||||
<title>Savegame Editor – Hyrule Warriors</title>
|
||||
<meta http-equiv="content-Type" content="text/html; charset=UTF-8"/>
|
||||
<meta name="description" content="A savegame editor for Hyrule Warriors. It can edit values for your apple and materials."/>
|
||||
<meta name="keywords" content="html5, savegame, save, editor, hack, exploit, wii u, hyrule warriors, materials, experience, weapons"/>
|
||||
<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"/>
|
||||
<script type="text/javascript" src="../savegame-editor.js"></script>
|
||||
<script type="text/javascript" src="./hyrule-warriors.js"></script>
|
||||
</head>
|
||||
<body>
|
||||
|
||||
<!-- HEADER -->
|
||||
<div id="header">
|
||||
<div id="header-top">
|
||||
<div class="row wrapper">
|
||||
<h1 class="six columns text-left"><img src="favicon.png" /> Savegame Editor <small>for Hyrule Warriors</small></h1>
|
||||
<div class="six columns header-buttons text-right">
|
||||
by <a href="/">Marc Robledo</a>
|
||||
<i class="icon github"></i> <a href="https://github.com/marcrobledo/savegame-editors/tree/master/hyrule-warriors" target="_blank">See on GitHub</a>
|
||||
<i class="icon heart"></i> <a href="https://www.paypal.me/marcrobledo/5" target="_blank" rel="nofollow">Donate</a>
|
||||
</div>
|
||||
</div>
|
||||
<div class="hidden row wrapper" id="toolbar">
|
||||
<div class="twelve columns text-center">
|
||||
<button class="close" onclick="closeFile()"><i class="icon close"></i> Close file</button>
|
||||
<button class="colored" onclick="saveChanges()"><i class="icon accept"></i> Save changes</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
<!-- THE EDITOR -->
|
||||
<div id="the-editor" class="wrapper hidden">
|
||||
<!-- MATERIALS -->
|
||||
<h3 class="orange">Materials</h3>
|
||||
<div class="container">
|
||||
<div class="row" id="row-materials">
|
||||
<div class="three columns"><label for="number-rupees">Rupees</label></div>
|
||||
<div class="one columns"><input id="number-rupees" type="text" /></div>
|
||||
</div>
|
||||
<div class="text-center">
|
||||
<button class="button" id="button-discover-materials" onclick="SavegameEditor.discoverMaterials()">Discover all materials</button>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
<!-- CHARACTERS -->
|
||||
<h3 class="red">Characters</h3>
|
||||
<div class="container">
|
||||
<div class="row" id="row-characters">
|
||||
<div class="three columns"> </div>
|
||||
<div class="three columns">Damage</div>
|
||||
<div class="three columns">Level</div>
|
||||
<div class="three columns">Experience</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- MAPS -->
|
||||
<h3 class="green">Maps</h3>
|
||||
<div class="container">
|
||||
<label for="select-map">Map</label> <span id="container-select-map"></span>
|
||||
<hr/>
|
||||
<div id="maps"></div>
|
||||
</div>
|
||||
|
||||
<!-- WEAPONS -->
|
||||
<h3 class="blue">Weapons</h3>
|
||||
<div class="container">
|
||||
<label for="select-weapon">Weapon slot</label>
|
||||
<span id="container-select-weapon"></span>
|
||||
<span class="bg-light-gray round" style="padding: 3px 12px">Approximate power: <span id="span-weapon-power"></span></span>
|
||||
<hr/>
|
||||
<div class="row">
|
||||
<div class="three columns">Weapon type</div><div class="three columns" id="container-weapon-type"></div>
|
||||
<div class="three columns">Weapon ID</div><div class="three columns" id="container-weapon-id"></div>
|
||||
<div class="three columns">Base Power</div><div class="three columns" id="container-weapon-base-power"></div>
|
||||
<div class="three columns">Stars</div><div class="three columns" id="container-weapon-stars"></div>
|
||||
</div>
|
||||
<hr/>
|
||||
<div id="weapons-skills-container"></div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</body>
|
||||
</html>
|
12
hyrule-warriors/savegame-editor.appcache
Normal file
@ -0,0 +1,12 @@
|
||||
CACHE MANIFEST
|
||||
# last update 2017-07-06
|
||||
#CACHE:
|
||||
index.html
|
||||
favicon.png
|
||||
hyrule-warriors.js
|
||||
../savegame-editor.css
|
||||
../savegame-editor.js
|
||||
|
||||
# force these files to be loaded in network
|
||||
NETWORK:
|
||||
*
|
BIN
hyrule-warriors/thumb.jpg
Normal file
After Width: | Height: | Size: 75 KiB |
BIN
kid-icarus-uprising/01.sav
Normal file
BIN
kid-icarus-uprising/favicon.png
Normal file
After Width: | Height: | Size: 496 B |
99
kid-icarus-uprising/index.html
Normal file
@ -0,0 +1,99 @@
|
||||
<!DOCTYPE html>
|
||||
<html manifest="savegame-editor.appcache">
|
||||
<head>
|
||||
<title>Savegame Editor – Kid Icarus: Uprising</title>
|
||||
<meta http-equiv="content-Type" content="text/html; charset=UTF-8"/>
|
||||
<meta name="description" content="A savegame editor for Kid Icarus: Uprising. It can edit values for your apple and materials."/>
|
||||
<meta name="keywords" content="html5, savegame, save, editor, hack, exploit, 3ds, Kid Icarus: Uprising, free, apples"/>
|
||||
<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"/>
|
||||
<script type="text/javascript" src="../savegame-editor.js"></script>
|
||||
<script type="text/javascript" src="./kid-icarus-uprising.js"></script>
|
||||
</head>
|
||||
<body>
|
||||
|
||||
<!-- HEADER -->
|
||||
<div id="header">
|
||||
<div id="header-top">
|
||||
<div class="row wrapper">
|
||||
<h1 class="six columns text-left"><img src="favicon.png" /> Savegame Editor <small>for Kid Icarus: Uprising</small></h1>
|
||||
<div class="six columns header-buttons text-right">
|
||||
by <a href="/">Marc Robledo</a>
|
||||
<i class="icon github"></i> <a href="https://github.com/marcrobledo/savegame-editors/tree/master/kid-icarus-uprising" target="_blank">See on GitHub</a>
|
||||
<i class="icon heart"></i> <a href="https://www.paypal.me/marcrobledo/5" target="_blank" rel="nofollow">Donate</a>
|
||||
</div>
|
||||
</div>
|
||||
<div class="hidden row wrapper" id="toolbar">
|
||||
<div class="twelve columns text-center">
|
||||
<button class="close" onclick="closeFile()"><i class="icon close"></i> Close file</button>
|
||||
<button class="colored" onclick="saveChanges()"><i class="icon accept"></i> Save changes</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
<!-- THE EDITOR -->
|
||||
<div id="the-editor" class="wrapper hidden">
|
||||
<!-- HEARTS -->
|
||||
<h3 class="orange">Hearts</h3>
|
||||
<div class="container">
|
||||
<div class="row">
|
||||
<div class="five columns"><label for="number-hearts">Current hearts</label></div>
|
||||
<div class="three columns"><input id="number-hearts" type="text" /></div>
|
||||
</div>
|
||||
<div class="row">
|
||||
<div class="five columns"><label for="number-hearts-for-palutena">Hearts offered to Palutena</label></div>
|
||||
<div class="three columns"><input id="number-hearts-for-palutena" type="text" /></div>
|
||||
</div>
|
||||
<div class="row">
|
||||
<div class="five columns"><label for="number-hearts-for-viridi">Hearts offered to Viridi</label></div>
|
||||
<div class="three columns"><input id="number-hearts-for-viridi" type="text" /></div>
|
||||
</div>
|
||||
<div class="row">
|
||||
<div class="five columns">Unlock unreleased trophies</div>
|
||||
<div class="three columns"><button id="button-unlock-trophies" onclick="KidIcarusUprising.unlockTrophies()">Unlock</button></div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- STATS -->
|
||||
<h3 class="red">Stats</h3>
|
||||
<div class="container" id="stats"></div>
|
||||
|
||||
<!-- WEAPONS -->
|
||||
<h3 class="green">Weapons</h3>
|
||||
<div class="container">
|
||||
<label for="select-weapon">Weapon slot</label> <span id="container-select-weapon"></span>
|
||||
<hr/>
|
||||
<div class="row">
|
||||
<div class="three columns"><label for="weapon-type">Weapon type</label></div>
|
||||
<div class="three columns end">
|
||||
<select id="select-weapon-type" disabled="disabled" onchange="SavegameEditor._writeWeapon()"></select>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row">
|
||||
<div class="three columns"><label for="weapon-stars-ranged">Ranged stars</label></div><div class="three columns mono" id="container-weapon-stars-ranged"></div>
|
||||
<div class="three columns"><label for="weapon-stars-melee">Melee stars</label></div><div class="three columns mono" id="container-weapon-stars-melee"></div>
|
||||
</div>
|
||||
<hr/>
|
||||
<div class="row">
|
||||
<div class="six columns"><label for="select-weapon-modifier0">Modifier 1</label></div>
|
||||
<div class="six columns" id="container-weapon-modifier0"></div>
|
||||
<div class="six columns"><label for="select-weapon-modifier1">Modifier 2</label></div>
|
||||
<div class="six columns" id="container-weapon-modifier1"></div>
|
||||
<div class="six columns"><label for="select-weapon-modifier2">Modifier 3</label></div>
|
||||
<div class="six columns" id="container-weapon-modifier2"></div>
|
||||
<div class="six columns"><label for="select-weapon-modifier3">Modifier 4</label></div>
|
||||
<div class="six columns" id="container-weapon-modifier3"></div>
|
||||
<div class="six columns"><label for="select-weapon-modifier4">Modifier 5</label></div>
|
||||
<div class="six columns" id="container-weapon-modifier4"></div>
|
||||
<div class="six columns"><label for="select-weapon-modifier5">Modifier 6</label></div>
|
||||
<div class="six columns" id="container-weapon-modifier5"></div>
|
||||
</div>
|
||||
Approximate value: <span id="weapon-value"></span>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</body>
|
||||
</html>
|
768
kid-icarus-uprising/kid-icarus-uprising.js
Normal file
@ -0,0 +1,768 @@
|
||||
/*
|
||||
Kid Icarus: Uprising for HTML5 Save Editor v20170706
|
||||
by Marc Robledo 2016-2017
|
||||
*/
|
||||
|
||||
var currentWeapon=0
|
||||
SavegameEditor={
|
||||
Name:'Kid Icarus: Uprising',
|
||||
Filename:'0x.sav',
|
||||
|
||||
/* Constants */
|
||||
Constants:{
|
||||
NUM_TREASURE: 120*3,
|
||||
NUM_TROPHIES: 412,
|
||||
NUM_WEAPONS: 1000,
|
||||
NUM_LEVELS: 25,
|
||||
WEAPON_SIZE: 0x20,
|
||||
MODIFIERS:[
|
||||
'-',
|
||||
'Standing ch. shot +1',
|
||||
'Standing ch. shot +2',
|
||||
'Standing ch. shot +3',
|
||||
'Standing ch. shot +4',
|
||||
'Standing ch. shot -1',
|
||||
'Standing ch. shot -2',
|
||||
'Dash ch. shot +1',
|
||||
'Dash ch. shot +2',
|
||||
'Dash ch. shot +3',
|
||||
'Dash ch. shot +4',
|
||||
'Dash ch. shot -1',
|
||||
'Dash ch. shot -2',
|
||||
'Forward-dash ch. shot +1',
|
||||
'Forward-dash ch. shot +2',
|
||||
'Forward-dash ch. shot +3',
|
||||
'Forward-dash ch. shot +4',
|
||||
'Side-dash ch. shot +1',
|
||||
'Side-dash ch. shot +2',
|
||||
'Side-dash ch. shot +3',
|
||||
'Side-dash ch. shot +4',
|
||||
'Backward-dash ch. shot +1',
|
||||
'Backward-dash ch. shot +2',
|
||||
'Backward-dash ch. shot +3',
|
||||
'Backward-dash ch. shot +4',
|
||||
'Standing cont. fire +1',
|
||||
'Standing cont. fire +2',
|
||||
'Standing cont. fire +3',
|
||||
'Standing cont. fire +4',
|
||||
'Standing cont. fire -1',
|
||||
'Standing cont. fire -2',
|
||||
'Dash cont. fire +1',
|
||||
'Dash cont. fire +2',
|
||||
'Dash cont. fire +3',
|
||||
'Dash cont. fire +4',
|
||||
'Dash cont. fire -1',
|
||||
'Dash cont. fire -2',
|
||||
'Forward-dash cont. fire +1',
|
||||
'Forward-dash cont. fire +2',
|
||||
'Forward-dash cont. fire +3',
|
||||
'Forward-dash cont. fire +4',
|
||||
'Side-dash cont. fire +1',
|
||||
'Side-dash cont. fire +2',
|
||||
'Side-dash cont. fire +3',
|
||||
'Side-dash cont. fire +4',
|
||||
'Backward-dash cont. fire +1',
|
||||
'Backward-dash cont. fire +2',
|
||||
'Backward-dash cont. fire +3',
|
||||
'Backward-dash cont. fire +4',
|
||||
'Melee Combo +1',
|
||||
'Melee Combo +2',
|
||||
'Melee Combo +3',
|
||||
'Melee Combo +4',
|
||||
'Melee Combo -1',
|
||||
'Melee Combo -2',
|
||||
'Melee Dash Attack +1',
|
||||
'Melee Dash Attack +2',
|
||||
'Melee Dash Attack +3',
|
||||
'Melee Dash Attack +4',
|
||||
'Melee Dash Attack -1',
|
||||
'Melee Dash Attack -2',
|
||||
'Item Attack +1',
|
||||
'Item Attack +2',
|
||||
'Item Attack +3',
|
||||
'Item Attack +4',
|
||||
'Power Attack +1',
|
||||
'Power Attack +2',
|
||||
'Power Attack +3',
|
||||
'Power Attack +4',
|
||||
'Health +1',
|
||||
'Health +2',
|
||||
'Health +3',
|
||||
'Health +4',
|
||||
'Health +5',
|
||||
'Health +6',
|
||||
'Health -1',
|
||||
'Health -2',
|
||||
'Health -3',
|
||||
'Health -4',
|
||||
'Stamina +1',
|
||||
'Stamina +2',
|
||||
'Stamina +3',
|
||||
'Stamina +4',
|
||||
'Speed +1',
|
||||
'Speed +2',
|
||||
'Speed +3',
|
||||
'Speed +4',
|
||||
'Speed -1',
|
||||
'Speed -2',
|
||||
'Speed -3',
|
||||
'Speed -4',
|
||||
'Walking Speed +1',
|
||||
'Walking Speed +2',
|
||||
'Walking Speed +3',
|
||||
'Walking Speed +4',
|
||||
'Running speed +1',
|
||||
'Running speed +2',
|
||||
'Running speed +3',
|
||||
'Running speed +4',
|
||||
'Evasion +1',
|
||||
'Evasion +2',
|
||||
'Evasion +3',
|
||||
'Evasion +4',
|
||||
'Shot Defense +1',
|
||||
'Shot Defense +2',
|
||||
'Shot Defense +3',
|
||||
'Shot Defense +4',
|
||||
'Shot Defense -1',
|
||||
'Shot Defense -2',
|
||||
'Melee defense +1',
|
||||
'Melee defense +2',
|
||||
'Melee defense +3',
|
||||
'Melee defense +4',
|
||||
'Melee defense -1',
|
||||
'Melee defense -2',
|
||||
'Knockback Defense +1',
|
||||
'Knockback Defense +2',
|
||||
'Knockback Defense +3',
|
||||
'Knockback Defense +4',
|
||||
'Status resistance +1',
|
||||
'Status resistance +2',
|
||||
'Status resistance +3',
|
||||
'Status resistance +4',
|
||||
'Status resistance -1',
|
||||
'Status resistance -2',
|
||||
'Status resistance -3',
|
||||
'Status resistance -4',
|
||||
'Overall Defense +1',
|
||||
'Overall Defense +2',
|
||||
'Overall Defense +3',
|
||||
'Overall Defense +4',
|
||||
'Overall Defense +5',
|
||||
'Overall Defense +6',
|
||||
'Overall Defense +7',
|
||||
'Overall Defense +8',
|
||||
'Overall Defense -1',
|
||||
'Overall Defense -2',
|
||||
'Overall Defense -3',
|
||||
'Overall Defense -4',
|
||||
'Recovery Effect +1',
|
||||
'Recovery Effect +2',
|
||||
'Recovery Effect +3',
|
||||
'Recovery Effect +4',
|
||||
'Effect Duration +1',
|
||||
'Effect Duration +2',
|
||||
'Effect Duration +3',
|
||||
'Effect Duration +4',
|
||||
'Poison +1',
|
||||
'Poison +2',
|
||||
'Poison +3',
|
||||
'Poison +4',
|
||||
'Paralyse +1',
|
||||
'Paralyse +2',
|
||||
'Paralyse +3',
|
||||
'Paralyse +4',
|
||||
'Weakening +1',
|
||||
'Weakening +2',
|
||||
'Weakening +3',
|
||||
'Weakening +4',
|
||||
'Petrify +1',
|
||||
'Petrify +2',
|
||||
'Petrify +3',
|
||||
'Petrify +4',
|
||||
'Shaking +1',
|
||||
'Shaking +2',
|
||||
'Shaking +3',
|
||||
'Shaking +4',
|
||||
'Confusion +1',
|
||||
'Confusion +2',
|
||||
'Confusion +3',
|
||||
'Confusion +4',
|
||||
'Burning +1',
|
||||
'Burning +2',
|
||||
'Burning +3',
|
||||
'Burning +4',
|
||||
'Freezing +1',
|
||||
'Freezing +2',
|
||||
'Freezing +3',
|
||||
'Freezing +4',
|
||||
'Shot Range +1',
|
||||
'Shot Range +2',
|
||||
'Shot Range +3',
|
||||
'Shot Range -1',
|
||||
'Shot Range -2',
|
||||
'Shot Range -3',
|
||||
'Shot Homing +1',
|
||||
'Shot Homing +2',
|
||||
'Shot Homing +3',
|
||||
'Shot Homing -1',
|
||||
'Shot Homing -2',
|
||||
'Shot Homing -3',
|
||||
'Shot Cancellation +1',
|
||||
'Knockback Recovery +1',
|
||||
'Self Injury -1',
|
||||
'Self Injury -2',
|
||||
'Self Injury -3',
|
||||
'Full-health boost +1',
|
||||
'Full-health boost +2',
|
||||
'Full-health boost +3',
|
||||
'Full-health boost +4',
|
||||
'Full-health boost +5',
|
||||
'Full-health boost +6',
|
||||
'In Peril Auto-Dodge +1',
|
||||
'In Peril Auto-Dodge +2',
|
||||
'In Peril Auto-Dodge +3',
|
||||
'In Peril Attack Boost +1',
|
||||
'In Peril Attack Boost +2',
|
||||
'In Peril Attack Boost +3',
|
||||
'In Peril Attack Boost +4',
|
||||
'In Peril Attack Boost +5',
|
||||
'In Peril Attack Boost +6',
|
||||
'In Peril Attack Boost -1',
|
||||
'In Peril Attack Boost -2',
|
||||
'In Peril Attack Boost -3',
|
||||
'In Peril Attack Boost -4',
|
||||
'Heart Bonus +1',
|
||||
'Heart Bonus +2',
|
||||
'Heart Bonus +3',
|
||||
'Heart Bonus -1',
|
||||
'Heart Bonus -2',
|
||||
'Heart Bonus -3'
|
||||
],
|
||||
MODIFIERS_VALUES:[
|
||||
0.0,
|
||||
9.2, 15.8, 22.4, 29, /* Standing Ch. Shot+ */
|
||||
-6.4, -12.8, /* Standing Ch. Shot- */
|
||||
13.2, 23.3, 33.4, 43.6, /* Dash Ch. Shot+ */
|
||||
-11.1, -22.1, /* Dash Ch. Shot- */
|
||||
11.2, 19.1, 26.9, 34.8, /* Fwd-Dash Ch. Shot+ */
|
||||
9.9, 16.7, 23.5, 30.4, /* Side-Dash Ch. Shot+ */
|
||||
10.6, 17.9, 25.2, 32.6, /* Bkwd-Dash Ch. Shot+ */
|
||||
7.9, 13, 18, 23.1, /* Standing Cont. Fire+ */
|
||||
-5.1, -10.1, /* Standing Cont. Fire- */
|
||||
10.6, 17.2, 23.8, 30.4, /* Dash Cont. Fire+ */
|
||||
-9.2, -18.5, /* Dash Cont. Fire- */
|
||||
8.6, 14.2, 19.7, 25.3, /* Fwd-Dash Cont. Fire+ */
|
||||
8.6, 14.2, 19.7, 25.3, /* Side-Dash Cont. Fire+ */
|
||||
8.6, 14.2, 19.7, 25.3, /* Bkwd-Dash Cont. Fire+ */
|
||||
9.2, 15.3, 21.4, 27.5, /* Melee Combo+ */
|
||||
-6.4, -12.8, /* Melee Combo- */
|
||||
7.9, 12.6, 17.3, 22, /* Melee Dash Attack+ */
|
||||
-5.5, -11, /* Melee Dash Attack- */
|
||||
14.5, 27.7, 40.9, 54.1, /* Item Attack+ */
|
||||
23.8, 40.3, 56.8, 73.3, /* Power Attack+ */
|
||||
9, 18.4, 27.9, 37.3, 46.7, 56.1, /* Health+ */
|
||||
-8.1, -15.8, -23.5, -31.1, /* Health- */
|
||||
11.9, 17.9, 23.9, 29.9, /* Stamina+ */
|
||||
9.2, 17.2, 25.1, 33, /* Speed+ */
|
||||
-11, -17.6, -24.2, -30.8, /* Speed- */
|
||||
6.6, 9.9, 13.2, 16.5, /* Walking Speed+ */
|
||||
7.9, 13.4, 18.9, 24.4, /* Running Speed+ */
|
||||
10.8, 17.2, 23.5, 29.9, /* Evasion+ */
|
||||
15, 29.8, 44.7, 59.6, /* Shot Defense+ */
|
||||
-14.9, -31.2, /* Shot Defense- */
|
||||
9.9, 18.5, 27.1, 35.6, /* Melee Defense+ */
|
||||
-8.9, -20.8, /* Melee Defense- */
|
||||
6.6, 13.2, 19.8, 26.4, /* Knockback Defense+ */
|
||||
12.8, 21.3, 29.8, 38.3, /* Status Resistance+ */
|
||||
-7.7, -10.7, -13.6, -16.6, /* Status Resistance- */
|
||||
15, 25.8, 36.6, 47.5, 58.3, 69.2, 80, 90.9, /* Overall Defense+ */
|
||||
-16.5, -25.7, -34.8, -44, /* Overall Defense- */
|
||||
15.8, 21.1, 26.4, 31.7, /* Recovery Effect+ */
|
||||
10.6, 20.2, 29.9, 39.6, /* Effect Duration+ */
|
||||
6.2, 10, 13.9, 17.8, /* Poison+ */
|
||||
7.9, 14.5, 21.1, 27.7, /* Paralysis+ */
|
||||
9.2, 16.4, 23.5, 30.6, /* Weakening+ */
|
||||
16.9, 20.9, 24.9, 28.8, /* Petrification+ */
|
||||
7.3, 14.1, 20.9, 27.7, /* Shaking+ */
|
||||
7.3, 14.1, 20.9, 27.7, /* Confusion+ */
|
||||
7.9, 13.9, 19.8, 25.7, /* Burning+ */
|
||||
20.2, 25.5, 30.8, 36.1, /* Freezing+ */
|
||||
13.9, 24.3, 34.8, /* Shot Range+ */
|
||||
-5.9, -9.2, -12.5, /* Shot Range- */
|
||||
11.9, 18.7, 25.5, /* Shot Homing+ */
|
||||
-4.6, -8.1, -11.7, /* Shot Homing- */
|
||||
42.5, /* Shot Cancellation+ */
|
||||
10.6, /* Knockback Recovery+ */
|
||||
-8.8, -13.2, -17.6, /* Self Injury- */
|
||||
8.6, 12.3, 16.1, 19.8, 23.5, 27.3, /* Full Health Boost+ */
|
||||
7.7, 11.6, 15.4, /* In-peril Auto-dodge+ */
|
||||
9.9, 16, 22, 28.1, 34.2, 40.3, /* In-peril Attack Boost+ */
|
||||
-10.7, -14.2, -17.8, -21.3, /* In-peril Attack Boost- */
|
||||
8.8, 17.6, 26.4, /* Heart Bonus+ */
|
||||
-3.3, -5, -6.6 /* Heart Bonus- */
|
||||
],
|
||||
STAR_RANGED_VALUES:[
|
||||
0.0, 14.9, 23.2, 31.5, 39.8, 48.1, 56.4, 64.7, 73.0, 81.3, 89.6, 98.2, 106.2, -11.75, -23.5, -35.25, -47.0
|
||||
],
|
||||
STAR_MELEE_VALUES:[
|
||||
0.0, 9.4, 15.2, 21.0, 26.8, 32.6, 38.4, 44.2, 50.0, 55.8, 61.6, 67.4, 73.2, -8.5, -17, -25.5, -34
|
||||
],
|
||||
DEFAULT_MODIFIERS:[
|
||||
0x4a, 0x86, 0x8e, 0x1c, 0xbe, 0xdc
|
||||
],
|
||||
STARS:[
|
||||
'-',
|
||||
'☆',
|
||||
'★',
|
||||
'★☆',
|
||||
'★★',
|
||||
'★★☆',
|
||||
'★★★',
|
||||
'★★★☆',
|
||||
'★★★★',
|
||||
'★★★★☆',
|
||||
'★★★★★',
|
||||
'★★★★★☆',
|
||||
'★★★★★★',
|
||||
'-☆',
|
||||
'-★',
|
||||
'-★☆',
|
||||
'-★★'
|
||||
],
|
||||
STATS:[
|
||||
/* BASIC */
|
||||
'Times played',
|
||||
'Total play time (in seconds)',
|
||||
'Total Solo play time (in seconds)',
|
||||
'Hearts acquired',
|
||||
'Weapons acquired',
|
||||
'Powers acquired',
|
||||
'UNKNOWN_1',
|
||||
'Enemies defeated',
|
||||
'Bosses defeated',
|
||||
'Ranged attacks',
|
||||
'Melee attacks',
|
||||
'Attacks evaded',
|
||||
'Knockback recoveries',
|
||||
'Shots narrowly avoided',
|
||||
'Special Attacks used',
|
||||
'Times finished',
|
||||
'Powers used',
|
||||
'Items used',
|
||||
'Times eggplanted',
|
||||
'Times tempuraed',
|
||||
'Centurions summoned',
|
||||
|
||||
/* SOLO */
|
||||
'Chapters cleared',
|
||||
'Total score',
|
||||
'Chapters cleared at max Intensity',
|
||||
'Avg. Intensity *FLOAT*',
|
||||
'Avg. Intensity for cleared chapters *FLOAT*',
|
||||
'Hearts bet in the Fiend\'s cauldron',
|
||||
'Hearts lost',
|
||||
'Most hearts acquired',
|
||||
'Most weapons acquired',
|
||||
'Most powers acquired',
|
||||
'Weapons purchased',
|
||||
'Weapons converted to hearts',
|
||||
'Hearts offered in the Vault',
|
||||
'UNKNOWN_2',
|
||||
'UNKNOWN_3',
|
||||
'UNKNOWN_4',
|
||||
'UNKNOWN_5',
|
||||
'Weapons fusions',
|
||||
'Treasure boxes opened',
|
||||
'Times pickpocketed',
|
||||
'Souflees defeated',
|
||||
'Rare Treasurefish defeated',
|
||||
'Exo Tank uses',
|
||||
'Aether Ring uses',
|
||||
'Cherubot uses',
|
||||
'Three Sacred Treasures uses',
|
||||
'Lightning Chariot uses',
|
||||
'Great Sacred Treasure uses',
|
||||
'Time playes as Magnus (in seconds)',
|
||||
'Time playes as Dark Pit (in seconds)',
|
||||
'Practice Range uses',
|
||||
|
||||
/* TOGETHER */
|
||||
'Nearby matches played',
|
||||
'Nearby time played (in seconds)',
|
||||
'Total Nearby participants',
|
||||
'Far Away matches played',
|
||||
'Total Far Away participants',
|
||||
'Time played With Friends',
|
||||
'Time played With Anyone',
|
||||
'Light vs. Dark matches played',
|
||||
'Light vs. Dark matches won',
|
||||
'Free-for-All matches played',
|
||||
'Free-for-All matches won',
|
||||
'Opponents defeated',
|
||||
'Matches suspended',
|
||||
'Times you became an angel',
|
||||
'Times you won as an angel',
|
||||
'Angels defeated',
|
||||
'Weapons rewarded',
|
||||
'Powers rewarded',
|
||||
'Hearts rewarded',
|
||||
|
||||
/* STREETPASS */
|
||||
'Weapon gems created',
|
||||
'Weapon-gem-exchange partners',
|
||||
'UNKNOWN_6',
|
||||
'Weapons fused from gems',
|
||||
'Hearts acquired by gems'
|
||||
],
|
||||
WEAPON_TYPES:[
|
||||
{name:'Blades', weapons:[
|
||||
{id:0xfa2000,name:'First Blade'},
|
||||
{id:0xf9a880,name:'Burst Blade'},
|
||||
{id:0x5b2100,name:'Viper Blade'},
|
||||
{id:0x7a6180,name:'Crusader Blade'},
|
||||
{id:0x79e200,name:'Royal Blade'},
|
||||
{id:0x84e280,name:'Optical Blade'},
|
||||
{id:0x66e300,name:'Samurai Blade'},
|
||||
{id:0x926380,name:'Bullet Blade'},
|
||||
{id:0x9cec00,name:'Aquarius Blade'},
|
||||
{id:0x88ec80,name:'Aurum Blade'},
|
||||
{id:0x876500,name:'Palutena Blade'},
|
||||
{id:0x94ed80,name:'Gaol Blade'}
|
||||
]},
|
||||
{name:'Staves', weapons:[
|
||||
{id:0x49c804,name:'Insight Staff'},
|
||||
{id:0x7c4084,name:'Orb Staff'},
|
||||
{id:0x4d4904,name:'Rose Staff'},
|
||||
{id:0x684184,name:'Knuckle Staff'},
|
||||
{id:0x944204,name:'Ancient Staff'},
|
||||
{id:0x934284,name:'Lancer Staff'},
|
||||
{id:0x93c304,name:'Flintlock Staff'},
|
||||
{id:0x9bcb84,name:'Somewhat Staff'},
|
||||
{id:0xf98c04,name:'Scorpio Staff'},
|
||||
{id:0xbd8c84,name:'Laser Staff'},
|
||||
{id:0x5a0504,name:'Dark Pit Staff'},
|
||||
{id:0xfa0d84,name:'Thanatos Staff'}
|
||||
]},
|
||||
{name:'Claws', weapons:[
|
||||
{id:0x9f0888,name:'Tiger Claws'},
|
||||
{id:0x9f0888,name:'Wolf Claws'},
|
||||
{id:0xa30908,name:'Bear Claws'},
|
||||
{id:0xa2c988,name:'Brawler Claws'},
|
||||
{id:0x9e8a08,name:'Stealth Claws'},
|
||||
{id:0x9e0a88,name:'Hedgehog Claws'},
|
||||
{id:0x8d4b08,name:'Raptor Claws'},
|
||||
{id:0x7f0388,name:'Artillery Claws'},
|
||||
{id:0xf9cc08,name:'Cancer Claws'},
|
||||
{id:0xd50c88,name:'Beam Claws'},
|
||||
{id:0xa3cd08,name:'Viridi Claws'},
|
||||
{id:0xa38c88,name:'Pandora Claws'}
|
||||
]},
|
||||
{name:'Bows', weapons:[
|
||||
{id:0xaf080c,name:'Fortune Bow'},
|
||||
{id:0x81c08c,name:'Silver Bow'},
|
||||
{id:0xf9c90c,name:'Meteor Bow'},
|
||||
{id:0x96498c,name:'Divine Bow'},
|
||||
{id:0x89ca0c,name:'Darkness Bow'},
|
||||
{id:0xacca8c,name:'Crystal Bow'},
|
||||
{id:0x95cb0c,name:'Angel Bow'},
|
||||
{id:0xabcb8c,name:'Hawkeye Bow'},
|
||||
{id:0xaf4c0c,name:'Sagittarius Bow'},
|
||||
{id:0x4ccc8c,name:'Aurum Bow'},
|
||||
{id:0x67c50c,name:'Palutena Bow'},
|
||||
{id:0x50cd8c,name:'Phrosphora Bow'}
|
||||
]},
|
||||
{name:'Palms', weapons:[
|
||||
{id:0xfa0810,name:'Violet Palm'},
|
||||
{id:0xf98890,name:'Burning Palm'},
|
||||
{id:0x87c910,name:'Needle Palm'},
|
||||
{id:0x914190,name:'Midnight Palm'},
|
||||
{id:0xa9ca10,name:'Cursed Palm'},
|
||||
{id:0xaf4a90,name:'Cutter Palm'},
|
||||
{id:0x514310,name:'Pudgy Palm'},
|
||||
{id:0xaa4b90,name:'Ninja Palm (Weeaboo Palm)'},
|
||||
{id:0x674410,name:'Virgo Palm'},
|
||||
{id:0x924490,name:'Aurum Palm'},
|
||||
{id:0x99c510,name:'Viridi Palm'},
|
||||
{id:0xaecd90,name:'Great Reaper Palm'}
|
||||
]},
|
||||
{name:'Clubs', weapons:[
|
||||
{id:0xa60814,name:'Ore Club'},
|
||||
{id:0x9d8894,name:'Babel Club'},
|
||||
{id:0x9e0914,name:'Skyscraper Club'},
|
||||
{id:0x65c994,name:'Atlas Club'},
|
||||
{id:0xf9c214,name:'Earthmaul Club'},
|
||||
{id:0xa48A94,name:'Ogre Club'},
|
||||
{id:0x884b14,name:'Halo Club'},
|
||||
{id:0xa58b94,name:'Black Club'},
|
||||
{id:0xa68c14,name:'Capricorn Club'},
|
||||
{id:0x834494,name:'Aurum Club'},
|
||||
{id:0x874514,name:'Hewdraw Club'},
|
||||
{id:0xa50d94,name:'Magnus Club'}
|
||||
]},
|
||||
{name:'Cannons', weapons:[
|
||||
{id:0xaa4818,name:'EZ Cannon'},
|
||||
{id:0xa1c098,name:'Ball Cannon'},
|
||||
{id:0xf9c918,name:'Predator Cannon'},
|
||||
{id:0x51c198,name:'Poseidon Cannon'},
|
||||
{id:0xae8a18,name:'Fireworks Cannon'},
|
||||
{id:0x4aca98,name:'Rail Cannon'},
|
||||
{id:0xaecb18,name:'Dynamo Cannon'},
|
||||
{id:0x634b98,name:'Doom Cannon'},
|
||||
{id:0x9bc418,name:'Leo Cannon'},
|
||||
{id:0x5b0498,name:'Sonic Cannon'},
|
||||
{id:0x864518,name:'Twinbellows Cannon'},
|
||||
{id:0x84c598,name:'Cragalanche Cannon'}
|
||||
]},
|
||||
{name:'Orbitars', weapons:[
|
||||
{id:0xfa081c,name:'Standard Orbitars'},
|
||||
{id:0x85809c,name:'Guardian Orbitars'},
|
||||
{id:0x53a91c,name:'Shock Orbitars'},
|
||||
{id:0x4d899c,name:'Eyetrack Orbitars'},
|
||||
{id:0x534a1c,name:'Fairy Orbitars'},
|
||||
{id:0x68829c,name:'Paw Pad Orbitars'},
|
||||
{id:0x7f831c,name:'Jetstream Orbitars'},
|
||||
{id:0x69039c,name:'Boom Orbitars'},
|
||||
{id:0x898c1c,name:'Gemini Orbitars'},
|
||||
{id:0x7e049c,name:'Aurum Orbitars'},
|
||||
{id:0x7e851c,name:'Centurion Orbitars'},
|
||||
{id:0xf98d9c,name:'Arlon Orbitars'}
|
||||
]},
|
||||
{name:'Arms', weapons:[
|
||||
{id:0x9a4020,name:'Crusher Arm'},
|
||||
{id:0x8b48a0,name:'Compact Arm'},
|
||||
{id:0xf9c920,name:'Electroshock Arm'},
|
||||
{id:0xa949a0,name:'Volcano Arm'},
|
||||
{id:0x484a20,name:'Drill Arm'},
|
||||
{id:0x914aa0,name:'Bomber Arm'},
|
||||
{id:0x478b20,name:'Bowl Arm'},
|
||||
{id:0xa98ba0,name:'End-All Arm'},
|
||||
{id:0x79c420,name:'Taurus Arm'},
|
||||
{id:0x8044a0,name:'Upperdash Arm'},
|
||||
{id:0x844520,name:'Kraken Arm'},
|
||||
{id:0x83c5a0,name:'Phoenix Arm'}
|
||||
]}
|
||||
]
|
||||
},
|
||||
Offsets:{
|
||||
TREASURE_HUNT: 0x0c,
|
||||
CURRENT_HEARTS: 0x01e8,
|
||||
HEARTS_OFFERED_TO_PALUTENA: 0x01ec,
|
||||
HEARTS_OFFERED_TO_VIRIDI: 0x01f0,
|
||||
TROPHIES: 0x046c,
|
||||
WEAPONS: 0x0670,
|
||||
WEAPONS_TYPE: 0x05,
|
||||
WEAPONS_STARS1: 0x08,
|
||||
WEAPONS_STARS2: 0x0a,
|
||||
WEAPONS_MODIFIERS: 0x14,
|
||||
LEVEL_ENEMIES_DEFEATED: 0x8370,
|
||||
LEVEL_SCORE: 0x010068,
|
||||
LEVEL_INTENSITY: 0x0100ec,
|
||||
STATS: 0x0101b8,
|
||||
},
|
||||
|
||||
/* private functions */
|
||||
_checkIfMissingAnyUnreleasedTrophy:function(){
|
||||
var missing=false;
|
||||
for(var i=404; i<412 && !missing; i++){
|
||||
if(tempFile.readByte(this.Offsets.TROPHIES+i)==0){
|
||||
missing=true;
|
||||
}
|
||||
}
|
||||
return missing
|
||||
},
|
||||
_disableUnlockUnreleasedTrophiesButton:function(){
|
||||
get('button-unlock-trophies').disabled=true;
|
||||
get('button-unlock-trophies').value='OK!';
|
||||
},
|
||||
_getWeaponOffset:function(){
|
||||
return this.Offsets.WEAPONS+currentWeapon*this.Constants.WEAPON_SIZE
|
||||
},
|
||||
_readWeapon:function(i){
|
||||
currentWeapon=i;
|
||||
var offset=this._getWeaponOffset();
|
||||
|
||||
var weaponType=(tempFile.readByte(offset+0x05)<<16)+(tempFile.readByte(offset+0x06)<<8)+tempFile.readByte(offset+0x07);
|
||||
get('weapon-unknown').innerHTML='0x'+weaponType.toString(16);
|
||||
get('weapon-unknown').value=weaponType;
|
||||
|
||||
get('select-weapon-type').value=weaponType;
|
||||
|
||||
var starsRanged=tempFile.readShort(offset+0x08);
|
||||
var starsMelee=tempFile.readShort(offset+0x0a);
|
||||
if((starsRanged>=0x11 && starsRanged<=0x16) && starsMelee==0x00){ /* unknown fix for some weapons? */
|
||||
starsMelee=starsRanged;
|
||||
starsRanged=0;
|
||||
}else if((starsRanged>=0x17 && starsRanged<=0x17) && starsMelee==0x00){ /* unknown fix for some weapons? */
|
||||
starsMelee=starsRanged-0x06;
|
||||
starsRanged=starsRanged-0x16;
|
||||
}
|
||||
get('select-weapon-stars-ranged').value=starsRanged;
|
||||
get('select-weapon-stars-melee').value=starsMelee;
|
||||
|
||||
for(var i=0; i<6; i++){
|
||||
get('select-weapon-modifier'+i).value=tempFile.readShort(offset+0x14+i*2);
|
||||
}
|
||||
|
||||
this._calculateWeaponValue();
|
||||
},
|
||||
_writeWeapon:function(){
|
||||
var offset=SavegameEditor._getWeaponOffset();
|
||||
|
||||
var weaponType=parseInt(getValue('weapon-type'));
|
||||
tempFile.writeInt(offset+0x05, (weaponType & 0xff0000) >> 16);
|
||||
tempFile.writeInt(offset+0x06, (weaponType & 0x00ff00) >> 8);
|
||||
tempFile.writeInt(offset+0x07, (weaponType & 0x0000ff) >> 0);
|
||||
|
||||
tempFile.writeShort(offset+0x08, getValue('weapon-stars-ranged'));
|
||||
tempFile.writeShort(offset+0x0a, getValue('weapon-stars-melee'));
|
||||
|
||||
for(var i=0; i<6; i++)
|
||||
tempFile.writeShort(offset+0x14+i*2, getValue('weapon-modifier'+i));
|
||||
|
||||
SavegameEditor._calculateWeaponValue();
|
||||
},
|
||||
_calculateWeaponValue:function(){
|
||||
var val=100;
|
||||
for(var i=0; i<6; i++){
|
||||
val+=this.Constants.MODIFIERS_VALUES[get('select-weapon-modifier'+i).value];
|
||||
}
|
||||
val+=this.Constants.STAR_RANGED_VALUES[get('select-weapon-stars-ranged').selectedIndex];
|
||||
val+=this.Constants.STAR_MELEE_VALUES[get('select-weapon-stars-melee').selectedIndex];
|
||||
|
||||
//val=parseInt(val);
|
||||
val=Math.ceil(val);
|
||||
if(val<351){
|
||||
get('weapon-value').style.color='initial';
|
||||
get('weapon-value').innerHTML=val;
|
||||
}else{
|
||||
get('weapon-value').style.color='red';
|
||||
get('weapon-value').innerHTML=val+' (invalid weapon!)';
|
||||
}
|
||||
},
|
||||
|
||||
/* check if savegame is valid */
|
||||
checkValidSavegame:function(){
|
||||
return (tempFile.fileSize==66296)
|
||||
},
|
||||
|
||||
|
||||
/* preload function */
|
||||
preload:function(){
|
||||
setNumericRange('hearts', 0, 9999999);
|
||||
setNumericRange('hearts-for-palutena', 0, 9999999);
|
||||
setNumericRange('hearts-for-viridi', 0, 9999999);
|
||||
},
|
||||
|
||||
|
||||
/* load function */
|
||||
load:function(){
|
||||
tempFile.littleEndian=true;
|
||||
|
||||
setValue('hearts', tempFile.readInt(this.Offsets.CURRENT_HEARTS));
|
||||
setValue('hearts-for-palutena', tempFile.readInt(this.Offsets.HEARTS_OFFERED_TO_PALUTENA));
|
||||
setValue('hearts-for-viridi', tempFile.readInt(this.Offsets.HEARTS_OFFERED_TO_VIRIDI));
|
||||
|
||||
if(!this._checkIfMissingAnyUnreleasedTrophy())
|
||||
this._disableUnlockUnreleasedTrophiesButton();
|
||||
|
||||
/* STATS */
|
||||
for(var i=0; i<this.Constants.STATS.length; i++){
|
||||
var val,input;
|
||||
if(i==24 || i==25){
|
||||
val=tempFile.readFloat32(this.Offsets.STATS+i*4);
|
||||
//console.log((this.Offsets.STATS+i*4).toString(16));
|
||||
input=inputFloat('stat'+i, 0.0, 9.0, val);
|
||||
}else{
|
||||
val=tempFile.readInt(this.Offsets.STATS+i*4);
|
||||
input=inputNumber('stat'+i, 0, 0xffffffff, val);
|
||||
}
|
||||
|
||||
document.getElementById('stats').appendChild(
|
||||
row(
|
||||
[8,4],
|
||||
label('stat'+i, this.Constants.STATS[i]),
|
||||
input
|
||||
)
|
||||
);
|
||||
}
|
||||
|
||||
|
||||
/* WEAPONS */
|
||||
var selectWeaponType=get('select-weapon-type');
|
||||
for(var i=0; i<this.Constants.WEAPON_TYPES.length; i++){
|
||||
var GROUP=this.Constants.WEAPON_TYPES[i];
|
||||
var optGroup=document.createElement('optgroup');
|
||||
optGroup.label=GROUP.name;
|
||||
selectWeaponType.appendChild(optGroup);
|
||||
for(var j=0; j<GROUP.weapons.length; j++){
|
||||
var WEAPON=GROUP.weapons[j];
|
||||
var option=document.createElement('option');
|
||||
option.value=WEAPON.id;
|
||||
option.innerHTML=(j+1)+'. '+WEAPON.name;
|
||||
optGroup.appendChild(option);
|
||||
}
|
||||
}
|
||||
var optionUnknown=document.createElement('option');
|
||||
optionUnknown.value=0x000000;
|
||||
optionUnknown.innerHTML='???';
|
||||
optionUnknown.id='weapon-unknown';
|
||||
selectWeaponType.appendChild(optionUnknown);
|
||||
|
||||
var validWeapons=[];
|
||||
for(var i=0; i<this.Constants.NUM_WEAPONS; i++){
|
||||
currentWeapon=i;
|
||||
var offset=this._getWeaponOffset();
|
||||
if((tempFile.readByte(offset+0x05)<<16)+(tempFile.readByte(offset+0x06)<<8)+tempFile.readByte(offset+0x07)!==0x000000)
|
||||
validWeapons.push(i);
|
||||
}
|
||||
|
||||
var selectWeapon=select('weapon', validWeapons);
|
||||
selectWeapon.className+=' medium';
|
||||
selectWeapon.addEventListener('change', function(){SavegameEditor._readWeapon(this.value)}, false);
|
||||
|
||||
get('container-select-weapon').appendChild(selectWeapon);
|
||||
|
||||
//currentWeapon=m('#select-weapon').children().first().get().value;
|
||||
currentWeapon=get('select-weapon').children[0].value;
|
||||
|
||||
var selectStarsRanged=select('weapon-stars-ranged', this.Constants.STARS);
|
||||
selectStarsRanged.addEventListener('change', this._writeWeapon, false);
|
||||
get('container-weapon-stars-ranged').appendChild(selectStarsRanged);
|
||||
|
||||
var MELEE_STARS=[];
|
||||
for(var i=0; i<this.Constants.STARS.length; i++){
|
||||
if(i==0){
|
||||
MELEE_STARS.push({value:0x00, name:'-'});
|
||||
}else{
|
||||
MELEE_STARS.push({value:0x10+i, name:this.Constants.STARS[i]});
|
||||
}
|
||||
}
|
||||
var selectStarsMelee=select('weapon-stars-melee', MELEE_STARS);
|
||||
selectStarsMelee.addEventListener('change', this._writeWeapon, false);
|
||||
get('container-weapon-stars-melee').appendChild(selectStarsMelee);
|
||||
|
||||
for(var i=0; i<6; i++){
|
||||
var selectWeaponModifier=select('weapon-modifier'+i, this.Constants.MODIFIERS);
|
||||
selectWeaponModifier.addEventListener('change', this._writeWeapon, false);
|
||||
get('container-weapon-modifier'+i).appendChild(selectWeaponModifier);
|
||||
}
|
||||
this._readWeapon(0);
|
||||
},
|
||||
|
||||
|
||||
/* save function */
|
||||
save:function(){
|
||||
tempFile.writeInt(this.Offsets.CURRENT_HEARTS, getValue('hearts'));
|
||||
tempFile.writeInt(this.Offsets.HEARTS_OFFERED_TO_PALUTENA, getValue('hearts-for-palutena'));
|
||||
tempFile.writeInt(this.Offsets.HEARTS_OFFERED_TO_VIRIDI, getValue('hearts-for-viridi'));
|
||||
|
||||
/* STATS */
|
||||
for(var i=0; i<this.Constants.STATS.length; i++){
|
||||
if(i==24 || i==25){
|
||||
tempFile.writeFloat32(this.Offsets.STATS+i*4, getValue('stat'+i));
|
||||
}else{
|
||||
tempFile.writeInt(this.Offsets.STATS+i*4, getValue('stat'+i));
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
12
kid-icarus-uprising/savegame-editor.appcache
Normal file
@ -0,0 +1,12 @@
|
||||
CACHE MANIFEST
|
||||
# last update 2017-07-06
|
||||
#CACHE:
|
||||
index.html
|
||||
favicon.png
|
||||
kid-icarus-uprising.js
|
||||
../savegame-editor.css
|
||||
../savegame-editor.js
|
||||
|
||||
# force these files to be loaded in network
|
||||
NETWORK:
|
||||
*
|
BIN
kid-icarus-uprising/thumb.jpg
Normal file
After Width: | Height: | Size: 71 KiB |
BIN
picross-3d-round-2/SAVEDATA
Normal file
BIN
picross-3d-round-2/favicon.png
Normal file
After Width: | Height: | Size: 8.8 KiB |
49
picross-3d-round-2/index.html
Normal file
@ -0,0 +1,49 @@
|
||||
<!DOCTYPE html>
|
||||
<html manifest="savegame-editor.appcache">
|
||||
<head>
|
||||
<title>Savegame Editor – Picross 3D: Round 2</title>
|
||||
<meta http-equiv="content-Type" content="text/html; charset=UTF-8"/>
|
||||
<meta name="description" content="A savegame editor for Picross 3D: Round 2. It can unlock all amiibo puzzles."/>
|
||||
<meta name="keywords" content="html5, savegame, save, editor, hack, exploit, 3ds, picross 3d round 2, unlock, amiibo, puzzles"/>
|
||||
<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"/>
|
||||
<script type="text/javascript" src="../savegame-editor.js"></script>
|
||||
<script type="text/javascript" src="./picross-3d-round-2.js"></script>
|
||||
</head>
|
||||
<body>
|
||||
|
||||
<!-- HEADER -->
|
||||
<div id="header">
|
||||
<div id="header-top">
|
||||
<div class="row wrapper">
|
||||
<h1 class="six columns text-left"><img src="favicon.png" /> Savegame Editor <small>for Picross 3D: Round 2</small></h1>
|
||||
<div class="six columns header-buttons text-right">
|
||||
by <a href="/">Marc Robledo</a>
|
||||
<i class="icon github"></i> <a href="https://github.com/marcrobledo/savegame-editors/tree/master/picross-3d-round-2" target="_blank">See on GitHub</a>
|
||||
<i class="icon heart"></i> <a href="https://www.paypal.me/marcrobledo/5" target="_blank" rel="nofollow">Donate</a>
|
||||
</div>
|
||||
</div>
|
||||
<div class="hidden row wrapper" id="toolbar">
|
||||
<div class="twelve columns text-center">
|
||||
<button class="close" onclick="closeFile()"><i class="icon close"></i> Close file</button>
|
||||
<button class="colored" onclick="saveChanges()"><i class="icon accept"></i> Save changes</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
<!-- THE EDITOR -->
|
||||
<div id="the-editor" class="wrapper hidden">
|
||||
<!-- AMIIBO -->
|
||||
<h3 class="orange">Amiibo puzzles</h3>
|
||||
<div class="container">
|
||||
You have unlocked <span id="span-amiibocount"></span><small>/9</small> amiibo puzzles.
|
||||
<button onclick="SavegameEditor.unlockAmiiboPuzzles()">Unlock missing amiibo puzzles</button>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
</body>
|
||||
</html>
|
45
picross-3d-round-2/picross-3d-round-2.js
Normal file
@ -0,0 +1,45 @@
|
||||
/*
|
||||
Picross 3D round 2 for HTML5 Save Editor v20160704
|
||||
by Marc Robledo 2016
|
||||
*/
|
||||
|
||||
SavegameEditor={
|
||||
Name:'Picross 3D: round 2',
|
||||
Filename:'SAVEDATA',
|
||||
|
||||
AmiiboOffset:0x1a4c,
|
||||
|
||||
unlockAmiiboPuzzles:function(){
|
||||
for(var i=0; i<9; i++){
|
||||
var offset=this.AmiiboOffset+i*16;
|
||||
var b=tempFile.readByte(offset);
|
||||
if(!(b & 0x09)){
|
||||
tempFile.writeByte(offset, b+0x09);
|
||||
}
|
||||
}
|
||||
setValue('amiibocount', 9);
|
||||
},
|
||||
|
||||
/* check if savegame is valid */
|
||||
checkValidSavegame:function(){
|
||||
return (tempFile.fileSize==45688)
|
||||
},
|
||||
|
||||
/* load function */
|
||||
load:function(){
|
||||
tempFile.fileName='SAVEDATA';
|
||||
|
||||
var unlockedAmiibos=0;
|
||||
for(var i=0; i<9; i++){
|
||||
if(tempFile.readByte(this.AmiiboOffset+i*16) & 0x09){
|
||||
unlockedAmiibos++;
|
||||
}
|
||||
}
|
||||
setValue('amiibocount', unlockedAmiibos);
|
||||
},
|
||||
|
||||
|
||||
/* save function */
|
||||
save:function(){
|
||||
}
|
||||
}
|
12
picross-3d-round-2/savegame-editor.appcache
Normal file
@ -0,0 +1,12 @@
|
||||
CACHE MANIFEST
|
||||
# last update 2017-07-06
|
||||
#CACHE:
|
||||
index.html
|
||||
favicon.png
|
||||
picross-3d-round-2.js
|
||||
../savegame-editor.css
|
||||
../savegame-editor.js
|
||||
|
||||
# force these files to be loaded in network
|
||||
NETWORK:
|
||||
*
|
BIN
picross-3d-round-2/thumb.jpg
Normal file
After Width: | Height: | Size: 55 KiB |
BIN
pokemon-picross/all.dat
Normal file
BIN
pokemon-picross/favicon.png
Normal file
After Width: | Height: | Size: 647 B |
54
pokemon-picross/index.html
Normal file
@ -0,0 +1,54 @@
|
||||
<!DOCTYPE html>
|
||||
<html manifest="savegame-editor.appcache">
|
||||
<head>
|
||||
<title>Savegame Editor – Pokémon Picross</title>
|
||||
<meta http-equiv="content-Type" content="text/html; charset=UTF-8"/>
|
||||
<meta name="description" content="A savegame editor for Pokémon Picross. It can let you get free picrites."/>
|
||||
<meta name="keywords" content="html5, savegame, save, editor, hack, exploit, 3ds, pokemon, picross, free, picrites"/>
|
||||
<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"/>
|
||||
<script type="text/javascript" src="../savegame-editor.js"></script>
|
||||
<script type="text/javascript" src="./pokemon-picross.js"></script>
|
||||
</head>
|
||||
<body>
|
||||
|
||||
<!-- HEADER -->
|
||||
<div id="header">
|
||||
<div id="header-top">
|
||||
<div class="row wrapper">
|
||||
<h1 class="six columns text-left"><img src="favicon.png" /> Savegame Editor <small>for Pokémon Picross</small></h1>
|
||||
<div class="six columns header-buttons text-right">
|
||||
by <a href="/">Marc Robledo</a>
|
||||
<i class="icon github"></i> <a href="https://github.com/marcrobledo/savegame-editors/tree/master/pokemon-picross" target="_blank">See on GitHub</a>
|
||||
<i class="icon heart"></i> <a href="https://www.paypal.me/marcrobledo/5" target="_blank" rel="nofollow">Donate</a>
|
||||
</div>
|
||||
</div>
|
||||
<div class="hidden row wrapper" id="toolbar">
|
||||
<div class="twelve columns text-center">
|
||||
<button class="close" onclick="closeFile()"><i class="icon close"></i> Close file</button>
|
||||
<button class="colored" onclick="saveChanges()"><i class="icon accept"></i> Save changes</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
<!-- THE EDITOR -->
|
||||
<div id="the-editor" class="wrapper hidden">
|
||||
<!-- PICRITES -->
|
||||
<h3 class="orange">Picrites</h3>
|
||||
<div class="container">
|
||||
<div class="row">
|
||||
<div class="six columns center"><label for="number-picrites">Picrites</label></div>
|
||||
<div class="four columns center"><input id="number-picrites" type="text" /></div>
|
||||
</div>
|
||||
<div class="row">
|
||||
<div class="six columns center"><label for="number-boughtpicrites">Bought picrites</label><br/><small>(Note: if you buy 5000 picrites, you have access to unlimited picrites in-game)</small></div>
|
||||
<div class="four columns center"><input id="number-boughtpicrites" type="text" /></div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</body>
|
||||
</html>
|
44
pokemon-picross/pokemon-picross.js
Normal file
@ -0,0 +1,44 @@
|
||||
/*
|
||||
Pokémon Picross for HTML5 Save Editor v20170706
|
||||
by Marc Robledo 2016-2017
|
||||
*/
|
||||
|
||||
SavegameEditor={
|
||||
Name:'Pokémon Picross',
|
||||
Filename:'all.dat',
|
||||
|
||||
Offsets:{
|
||||
PICRITES:0x0b40,
|
||||
BOUGHTPICRITES:0x0b44,
|
||||
PENDINGPICRITES:0x0b48, /* if there is an error after buying, they are queued here */
|
||||
UNLOCKEDSHOPFLAG:0x0b4c,
|
||||
},
|
||||
|
||||
/* check if savegame is valid */
|
||||
checkValidSavegame:function(){
|
||||
return (tempFile.fileSize==14920)
|
||||
},
|
||||
|
||||
/* preload function */
|
||||
preload:function(){
|
||||
setNumericRange('picrites', 0, 9999);
|
||||
setNumericRange('boughtpicrites', 0, 5000);
|
||||
},
|
||||
|
||||
/* load function */
|
||||
load:function(){
|
||||
tempFile.fileName='all.dat';
|
||||
|
||||
setValue('picrites', tempFile.readShort(this.Offsets.PICRITES));
|
||||
setValue('boughtpicrites', tempFile.readShort(this.Offsets.BOUGHTPICRITES));
|
||||
},
|
||||
|
||||
/* save function */
|
||||
save:function(){
|
||||
tempFile.writeShort(this.Offsets.PICRITES, getValue('picrites'));
|
||||
var boughtPicrites=getValue('boughtpicrites');
|
||||
tempFile.writeShort(this.Offsets.BOUGHTPICRITES, boughtPicrites);
|
||||
var unlockedShopByte=tempFile.readByte(this.Offsets.UNLOCKEDSHOPFLAG) & ~0x01;
|
||||
tempFile.writeByte(this.Offsets.UNLOCKEDSHOPFLAG, unlockedShopByte+(boughtPicrites>=5000)?0x01:0x00);
|
||||
}
|
||||
}
|
12
pokemon-picross/savegame-editor.appcache
Normal file
@ -0,0 +1,12 @@
|
||||
CACHE MANIFEST
|
||||
# last update 2017-07-06
|
||||
#CACHE:
|
||||
index.html
|
||||
favicon.png
|
||||
pokemon-picross.js
|
||||
../savegame-editor.css
|
||||
../savegame-editor.js
|
||||
|
||||
# force these files to be loaded in network
|
||||
NETWORK:
|
||||
*
|
BIN
pokemon-picross/thumb.jpg
Normal file
After Width: | Height: | Size: 87 KiB |
BIN
pokemon-shuffle/favicon.png
Normal file
After Width: | Height: | Size: 7.6 KiB |
131
pokemon-shuffle/index.html
Normal file
@ -0,0 +1,131 @@
|
||||
<!DOCTYPE html>
|
||||
<html manifest="savegame-editor.appcache">
|
||||
<head>
|
||||
<title>Savegame Editor – Pokémon Shuffle</title>
|
||||
<meta http-equiv="content-Type" content="text/html; charset=UTF-8"/>
|
||||
<meta name="description" content="A savegame editor for Pokémon Shuffle. It can edit values for your hearts, jewels, coins, items and more!"/>
|
||||
<meta name="keywords" content="html5, savegame, save, editor, hack, exploit, 3ds, pokemon, shuffle, free, jewels, hearts, coins, items, enhancements"/>
|
||||
<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"/>
|
||||
<script type="text/javascript" src="../savegame-editor.js"></script>
|
||||
<script type="text/javascript" src="./pokemon-shuffle.js"></script>
|
||||
</head>
|
||||
<body>
|
||||
|
||||
<!-- HEADER -->
|
||||
<div id="header">
|
||||
<div id="header-top">
|
||||
<div class="row wrapper">
|
||||
<h1 class="six columns text-left"><img src="favicon.png" /> Savegame Editor <small>for Pokémon Shuffle</small></h1>
|
||||
<div class="six columns header-buttons text-right">
|
||||
by <a href="/">Marc Robledo</a>
|
||||
<i class="icon github"></i> <a href="https://github.com/marcrobledo/savegame-editors/tree/master/pokemon-shuffle" target="_blank">See on GitHub</a>
|
||||
<i class="icon heart"></i> <a href="https://www.paypal.me/marcrobledo/5" target="_blank" rel="nofollow">Donate</a>
|
||||
</div>
|
||||
</div>
|
||||
<div class="hidden row wrapper" id="toolbar">
|
||||
<div class="twelve columns text-center">
|
||||
<button class="close" onclick="closeFile()"><i class="icon close"></i> Close file</button>
|
||||
<button class="colored" onclick="saveChanges()"><i class="icon accept"></i> Save changes</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
<!-- THE EDITOR -->
|
||||
<div id="the-editor" class="wrapper hidden">
|
||||
<!-- CONSUMABLES -->
|
||||
<h3 class="orange">Consumables</h3>
|
||||
<div class="container">
|
||||
<div class="row">
|
||||
<div class="four columns center"><label for="number-hearts">Hearts</label></div>
|
||||
<div class="four columns center"><label for="number-coins">Coins</label></div>
|
||||
<div class="four columns center"><label for="number-jewels">Jewels</label></div>
|
||||
</div>
|
||||
<div class="row">
|
||||
<div class="four columns center"><input id="number-hearts" type="text" /></div>
|
||||
<div class="four columns center"><input id="number-coins" type="text"/></div>
|
||||
<div class="four columns center"><input id="number-jewels" type="text"/></div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- CONSUMABLES -->
|
||||
<h3 class="red">Items</h3>
|
||||
<div class="container">
|
||||
<div class="row">
|
||||
<div class="three columns"><label for="number-item0">Moves +5</label></div>
|
||||
<div class="three columns"><input id="number-item0" class="small" type="text"/></div>
|
||||
|
||||
<div class="three columns"><label for="number-item4">Complexity -1</label></div>
|
||||
<div class="three columns"><input id="number-item4" class="small" type="text"/></div>
|
||||
|
||||
<div class="three columns"><label for="number-item1">Time +10</label></div>
|
||||
<div class="three columns"><input id="number-item1" class="small" type="text"/></div>
|
||||
|
||||
<div class="three columns"><label for="number-item5">Disruption Delay</label></div>
|
||||
<div class="three columns"><input id="number-item5" class="small" type="text"/></div>
|
||||
|
||||
<div class="three columns"><label for="number-item2">Exp. *1.5</label></div>
|
||||
<div class="three columns"><input id="number-item2" class="small" type="text"/></div>
|
||||
|
||||
<div class="three columns"><label for="number-item6">Attack up</label></div>
|
||||
<div class="three columns"><input id="number-item6" class="small" type="text"/></div>
|
||||
|
||||
<div class="three columns"><label for="number-item3">Mega start</label></div>
|
||||
<div class="three columns"><input id="number-item3" class="small" type="text"/></div>
|
||||
|
||||
<div class="three columns"></div>
|
||||
<div class="three columns"></div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Enhancements -->
|
||||
<h3 class="green">Enhancements</h3>
|
||||
<div class="container">
|
||||
<div class="row">
|
||||
<div class="three columns"><label for="number-enhancement0">Mega speedup</label></div>
|
||||
<div class="three columns"><input id="number-enhancement0" class="small" type="text"/></div>
|
||||
|
||||
<div class="three columns"><label for="number-enhancement5">Exp. Booster L</label></div>
|
||||
<div class="three columns"><input id="number-enhancement5" class="small" type="text"/></div>
|
||||
|
||||
<div class="three columns"><label for="number-enhancement1">Raise Max Level</label></div>
|
||||
<div class="three columns"><input id="number-enhancement1" class="small" type="text"/></div>
|
||||
|
||||
<div class="three columns"><label for="number-enhancement6">Skill Booster S</label></div>
|
||||
<div class="three columns"><input id="number-enhancement6" class="small" type="text"/></div>
|
||||
|
||||
<div class="three columns"><label for="number-enhancement2">Level Up</label></div>
|
||||
<div class="three columns"><input id="number-enhancement2" class="small" type="text"/></div>
|
||||
|
||||
<div class="three columns"><label for="number-enhancement7">Skill Booster M</label></div>
|
||||
<div class="three columns"><input id="number-enhancement7" class="small" type="text"/></div>
|
||||
|
||||
<div class="three columns"><label for="number-enhancement3">Exp. Booster S</label></div>
|
||||
<div class="three columns"><input id="number-enhancement3" class="small" type="text"/></div>
|
||||
|
||||
<div class="three columns"><label for="number-enhancement8">Skill Booster L</label></div>
|
||||
<div class="three columns"><input id="number-enhancement8" class="small" type="text"/></div>
|
||||
|
||||
<div class="three columns"><label for="number-enhancement4">Exp. Booster M</label></div>
|
||||
<div class="three columns"><input id="number-enhancement4" class="small" type="text"/></div>
|
||||
|
||||
<div class="three columns"><label for="number-enhancement9">Skill Swapper</label></div>
|
||||
<div class="three columns"><input id="number-enhancement9" class="small" type="text"/></div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Other -->
|
||||
<h3 class="blue">Other</h3>
|
||||
<div class="container">
|
||||
<div class="row">
|
||||
<div class="nine columns"><label for="number-scalationlvl">Current scalation battle level</label></div>
|
||||
<div class="three columns"><input id="number-scalationlvl" class="small" type="text"/></div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</body>
|
||||
</html>
|
155
pokemon-shuffle/pokemon-shuffle.js
Normal file
@ -0,0 +1,155 @@
|
||||
/*
|
||||
Pokemon Shuffle for HTML5 Save Editor v20170706
|
||||
by Marc Robledo 2016
|
||||
*/
|
||||
|
||||
SavegameEditor={
|
||||
Name:'Pokémon Shuffle',
|
||||
Filename:'savedata.bin',
|
||||
Offsets:{
|
||||
Coins:{
|
||||
ADDRESS: 0x68,
|
||||
NBYTES: 4,
|
||||
BITOFFSET: 3,
|
||||
NBITS: 17,
|
||||
},
|
||||
|
||||
Jewels:{
|
||||
ADDRESS: 0x6a,
|
||||
NBYTES: 2,
|
||||
BITOFFSET: 4,
|
||||
NBITS: 8,
|
||||
},
|
||||
|
||||
Hearts:{
|
||||
ADDRESS: 0x2d4a,
|
||||
NBYTES: 2,
|
||||
BITOFFSET: 7,
|
||||
NBITS: 7,
|
||||
},
|
||||
|
||||
Items:{
|
||||
ADDRESS: 0xd0,
|
||||
NBYTES: 2,
|
||||
BITOFFSET: 7,
|
||||
NBITS: 7,
|
||||
},
|
||||
|
||||
Enhancements:{
|
||||
ADDRESS: 0x2d4c,
|
||||
NBYTES: 1,
|
||||
BITOFFSET: 1,
|
||||
NBITS: 7,
|
||||
},
|
||||
|
||||
CurrentScalationLevel:{
|
||||
ADDRESS: 0x2d59,
|
||||
NBYTES: 2,
|
||||
BITOFFSET: 2,
|
||||
NBITS: 10,
|
||||
}
|
||||
},
|
||||
|
||||
/* private functions */
|
||||
_readBytes(address, numBytes){
|
||||
var num;
|
||||
if(numBytes==4){
|
||||
num=tempFile.readInt(address);
|
||||
}else if(numBytes==2){
|
||||
num=tempFile.readShort(address);
|
||||
}else{
|
||||
num=tempFile.readByte(address);
|
||||
}
|
||||
return num;
|
||||
},
|
||||
_readVariable(v,addOffset){
|
||||
var num=this._readBytes(v.ADDRESS+addOffset, v.NBYTES);
|
||||
num=num >> v.BITOFFSET;
|
||||
|
||||
return num & (Math.pow(2,v.NBITS)-1);
|
||||
},
|
||||
_storeVariable(v,addOffset,newValInput){
|
||||
/* << to shift mask, ~ to bitwise, >>> 0 forces unsigned values */
|
||||
var inverseMask=~((Math.pow(2,v.NBITS)-1) << v.BITOFFSET) >>> 0;
|
||||
var originalBytes=this._readBytes(v.ADDRESS+addOffset, v.NBYTES);
|
||||
|
||||
var newValue=(originalBytes & inverseMask) + (parseInt(newValInput) << v.BITOFFSET) >>> 0;
|
||||
|
||||
if(v.NBYTES==4){
|
||||
tempFile.writeInt(v.ADDRESS+addOffset, newValue);
|
||||
}else if(v.NBYTES==2){
|
||||
tempFile.writeShort(v.ADDRESS+addOffset, newValue);
|
||||
}else{
|
||||
tempFile.writeByte(v.ADDRESS+addOffset, newValue);
|
||||
}
|
||||
},
|
||||
|
||||
/* check if savegame is valid */
|
||||
checkValidSavegame:function(){
|
||||
return (tempFile.fileSize==42039 || tempFile.fileSize==74807)
|
||||
},
|
||||
|
||||
|
||||
/* preload function */
|
||||
preload:function(){
|
||||
setNumericRange('coins', 0, 99999);
|
||||
setNumericRange('jewels', 0, 150);
|
||||
setNumericRange('hearts', 0, 99);
|
||||
setNumericRange('scalationlvl', 1, 999);
|
||||
|
||||
for(var i=0; i<7; i++)
|
||||
setNumericRange('item'+i, 0, 99);
|
||||
|
||||
var maxEnhancements;
|
||||
if(tempFile.fileSize==42039)
|
||||
maxEnhancements=1;
|
||||
else if(tempFile.fileSize==74807)
|
||||
maxEnhancements=10;
|
||||
for(var i=0; i<maxEnhancements; i++)
|
||||
setNumericRange('enhancement'+i, 0, 99);
|
||||
},
|
||||
|
||||
/* load function */
|
||||
load:function(){
|
||||
tempFile.littleEndian=true;
|
||||
tempFile.fileName='savedata.bin';
|
||||
|
||||
setValue('coins', this._readVariable(this.Offsets.Coins, 0));
|
||||
setValue('jewels', this._readVariable(this.Offsets.Jewels, 0));
|
||||
setValue('hearts', this._readVariable(this.Offsets.Hearts, 0));
|
||||
|
||||
for(var i=0; i<7; i++)
|
||||
setValue('item'+i, this._readVariable(this.Offsets.Items, i));
|
||||
|
||||
var maxEnhancements;
|
||||
if(tempFile.fileSize==42039)
|
||||
maxEnhancements=1;
|
||||
else if(tempFile.fileSize==74807)
|
||||
maxEnhancements=10;
|
||||
for(var i=0; i<maxEnhancements; i++)
|
||||
setValue('enhancement'+i, this._readVariable(this.Offsets.Enhancements, i));
|
||||
|
||||
setValue('scalationlvl', this._readVariable(this.Offsets.CurrentScalationLevel, 0));
|
||||
},
|
||||
|
||||
|
||||
/* save function */
|
||||
save:function(){
|
||||
this._storeVariable(this.Offsets.Coins, 0, getValue('coins'));
|
||||
this._storeVariable(this.Offsets.Jewels, 0, getValue('jewels'));
|
||||
this._storeVariable(this.Offsets.Hearts, 0, getValue('hearts'));
|
||||
|
||||
for(var i=0; i<7; i++)
|
||||
this._storeVariable(this.Offsets.Items, i, getValue('item'+i));
|
||||
|
||||
var maxEnhancements;
|
||||
if(tempFile.fileSize==42039)
|
||||
maxEnhancements=1;
|
||||
else if(tempFile.fileSize==74807)
|
||||
maxEnhancements=10;
|
||||
for(var i=0; i<maxEnhancements; i++)
|
||||
this._storeVariable(this.Offsets.Enhancements, i, getValue('enhancement'+i));
|
||||
|
||||
this._storeVariable(this.Offsets.CurrentScalationLevel, 0, getValue('scalationlvl'));
|
||||
}
|
||||
}
|
BIN
pokemon-shuffle/savedata.bin
Normal file
12
pokemon-shuffle/savegame-editor.appcache
Normal file
@ -0,0 +1,12 @@
|
||||
CACHE MANIFEST
|
||||
# last update 2017-07-06
|
||||
#CACHE:
|
||||
index.html
|
||||
favicon.png
|
||||
pokemon-shuffle.js
|
||||
../savegame-editor.css
|
||||
../savegame-editor.js
|
||||
|
||||
# force these files to be loaded in network
|
||||
NETWORK:
|
||||
*
|
BIN
pokemon-shuffle/thumb.jpg
Normal file
After Width: | Height: | Size: 74 KiB |
BIN
rhythm-paradise-megamix/favicon.png
Normal file
After Width: | Height: | Size: 6.2 KiB |
61
rhythm-paradise-megamix/index.html
Normal file
@ -0,0 +1,61 @@
|
||||
<!DOCTYPE html>
|
||||
<html manifest="savegame-editor.appcache">
|
||||
<head>
|
||||
<title>Savegame Editor – Rhythm Paradise/Heaven Megamix</title>
|
||||
<meta http-equiv="content-Type" content="text/html; charset=UTF-8"/>
|
||||
<meta name="description" content="A savegame editor for Rhythm Paradise/Heaven Megamix. It can edit values for your coins, flow balls and onions."/>
|
||||
<meta name="keywords" content="html5, savegame, save, editor, hack, exploit, 3ds, rhythm, paradise, heaven, megamix, flow, balls, onions, coins"/>
|
||||
<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"/>
|
||||
<script type="text/javascript" src="../savegame-editor.js"></script>
|
||||
<script type="text/javascript" src="./rhythm-paradise-megamix.js"></script>
|
||||
</head>
|
||||
<body>
|
||||
|
||||
<!-- HEADER -->
|
||||
<div id="header">
|
||||
<div id="header-top">
|
||||
<div class="row wrapper">
|
||||
<h1 class="six columns text-left"><img src="favicon.png" /> Savegame Editor <small>for Rhythm Paradise/Heaven Megamix</small></h1>
|
||||
<div class="six columns header-buttons text-right">
|
||||
by <a href="/">Marc Robledo</a>
|
||||
<i class="icon github"></i> <a href="https://github.com/marcrobledo/savegame-editors/tree/master/rhythm-paradise-megamix" target="_blank">See on GitHub</a>
|
||||
<i class="icon heart"></i> <a href="https://www.paypal.me/marcrobledo/5" target="_blank" rel="nofollow">Donate</a>
|
||||
</div>
|
||||
</div>
|
||||
<div class="hidden row wrapper" id="toolbar">
|
||||
<div class="twelve columns text-center">
|
||||
<button class="close" onclick="closeFile()"><i class="icon close"></i> Close file</button>
|
||||
<button class="colored" onclick="saveChanges()"><i class="icon accept"></i> Save changes</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
<!-- THE EDITOR -->
|
||||
<div id="the-editor" class="wrapper hidden">
|
||||
<!-- BASIC -->
|
||||
<h3 class="orange">Basic</h3>
|
||||
<div class="container">
|
||||
<div class="row">
|
||||
<div class="three columns"><label for="number-coins">Coins</label></div>
|
||||
<div class="three columns"><input id="number-coins" type="text" class="fw" /></div>
|
||||
<div class="three columns"><label for="number-onions1">Onions</label></div>
|
||||
<div class="three columns"><input id="number-onions1" type="text" class="fw" /></div>
|
||||
<div class="three columns"><label for="number-flowballs">Flow balls</label></div>
|
||||
<div class="three columns"><input id="number-flowballs" type="text" class="fw" /></div>
|
||||
<div class="three columns"><label for="number-onions2">Silver onions</label></div>
|
||||
<div class="three columns"><input id="number-onions2" type="text" class="fw" /></div>
|
||||
<div class="three columns"> </div>
|
||||
<div class="three columns"> </div>
|
||||
<div class="three columns"><label for="number-onions3">Gold onions</label></div>
|
||||
<div class="three columns"><input id="number-onions3" type="text" class="fw" /></div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
</body>
|
||||
</html>
|
54
rhythm-paradise-megamix/rhythm-paradise-megamix.js
Normal file
@ -0,0 +1,54 @@
|
||||
/*
|
||||
Rhythm Paradise Megamix for HTML5 Save Editor v20170104
|
||||
by Marc Robledo 2017
|
||||
*/
|
||||
|
||||
SavegameEditor={
|
||||
Name:'Rhythm Heaven/Paradise Megamix',
|
||||
Filename:'savedataArc.txt',
|
||||
|
||||
Offsets:{
|
||||
COINS:0x2dbc,
|
||||
FLOWBALLS:0x2dbe,
|
||||
ONIONS1:0x3006,
|
||||
ONIONS2:0x3007,
|
||||
ONIONS3:0x3008
|
||||
},
|
||||
|
||||
/* check if savegame is valid */
|
||||
checkValidSavegame:function(){
|
||||
return (tempFile.fileSize==30040)
|
||||
},
|
||||
|
||||
|
||||
/* preload function */
|
||||
preload:function(){
|
||||
setNumericRange('coins', 0, 9999);
|
||||
setNumericRange('flowballs', 0, 255);
|
||||
setNumericRange('onions1', 0, 255);
|
||||
setNumericRange('onions2', 0, 255);
|
||||
setNumericRange('onions3', 0, 255);
|
||||
},
|
||||
|
||||
/* load function */
|
||||
load:function(){
|
||||
tempFile.littleEndian=true;
|
||||
tempFile.fileName='savedataArc.txt';
|
||||
|
||||
setValue('coins', tempFile.readShort(this.Offsets.COINS), 0, 9999);
|
||||
setValue('flowballs', tempFile.readShort(this.Offsets.FLOWBALLS), 0, 255);
|
||||
setValue('onions1', tempFile.readByte(this.Offsets.ONIONS1), 0, 255);
|
||||
setValue('onions2', tempFile.readByte(this.Offsets.ONIONS2), 0, 255);
|
||||
setValue('onions3', tempFile.readByte(this.Offsets.ONIONS3), 0, 255);
|
||||
},
|
||||
|
||||
|
||||
/* save function */
|
||||
save:function(){
|
||||
tempFile.writeShort(this.Offsets.COINS, getValue('coins'));
|
||||
tempFile.writeShort(this.Offsets.FLOWBALLS, getValue('flowballs'));
|
||||
tempFile.writeByte(this.Offsets.ONIONS1, getValue('onions1'));
|
||||
tempFile.writeByte(this.Offsets.ONIONS2, getValue('onions2'));
|
||||
tempFile.writeByte(this.Offsets.ONIONS3, getValue('onions3'));
|
||||
}
|
||||
}
|
BIN
rhythm-paradise-megamix/savedataArc.txt
Normal file
12
rhythm-paradise-megamix/savegame-editor.appcache
Normal file
@ -0,0 +1,12 @@
|
||||
CACHE MANIFEST
|
||||
# last update 2017-07-06
|
||||
#CACHE:
|
||||
index.html
|
||||
favicon.png
|
||||
rhythm-paradise-megamix.js
|
||||
../savegame-editor.css
|
||||
../savegame-editor.js
|
||||
|
||||
# force these files to be loaded in network
|
||||
NETWORK:
|
||||
*
|
BIN
rhythm-paradise-megamix/thumb.jpg
Normal file
After Width: | Height: | Size: 108 KiB |
BIN
streetpass-mii-plaza/favicon.png
Normal file
After Width: | Height: | Size: 5.3 KiB |
90
streetpass-mii-plaza/index.html
Normal file
@ -0,0 +1,90 @@
|
||||
<!DOCTYPE html>
|
||||
<html manifest="savegame-editor.appcache">
|
||||
<head>
|
||||
<title>Savegame Editor – StreetPass Mii Plaza</title>
|
||||
<meta http-equiv="content-Type" content="text/html; charset=UTF-8"/>
|
||||
<meta name="description" content="A savegame editor for StreetPass Mii Plaza. It can edit your Puzzle Swap pieces, unlock DLC hats and more!"/>
|
||||
<meta name="keywords" content="html5, savegame, save, editor, hack, exploit, 3ds, streetpass, mii, plaza, puzzle, swap, panel, pieces, free, tickets, dlc, unlock, hats, speech, bubbles"/>
|
||||
<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"/>
|
||||
<script type="text/javascript" src="../savegame-editor.js"></script>
|
||||
<script type="text/javascript" src="./streetpass-mii-plaza.js"></script>
|
||||
</head>
|
||||
<body>
|
||||
|
||||
<!-- HEADER -->
|
||||
<div id="header">
|
||||
<div id="header-top">
|
||||
<div class="row wrapper">
|
||||
<h1 class="six columns text-left"><img src="favicon.png" /> Savegame Editor <small>for StreetPass Mii Plaza</small></h1>
|
||||
<div class="six columns header-buttons text-right">
|
||||
by <a href="/">Marc Robledo</a>
|
||||
<i class="icon github"></i> <a href="https://github.com/marcrobledo/savegame-editors/tree/master/streetpass-mii-plaza" target="_blank">See on GitHub</a>
|
||||
<i class="icon heart"></i> <a href="https://www.paypal.me/marcrobledo/5" target="_blank" rel="nofollow">Donate</a>
|
||||
</div>
|
||||
</div>
|
||||
<div class="hidden row wrapper" id="toolbar">
|
||||
<div class="twelve columns text-center">
|
||||
<button class="close" onclick="closeFile()"><i class="icon close"></i> Close file</button>
|
||||
<button class="colored" onclick="saveChanges()"><i class="icon accept"></i> Save changes</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
<!-- THE EDITOR -->
|
||||
<div id="the-editor" class="wrapper hidden">
|
||||
<!-- BASIC -->
|
||||
<h3 class="orange">Basic</h3>
|
||||
<div class="container">
|
||||
<div class="row">
|
||||
<div class="eight columns"><label for="number-sptags">Streetpass Tags</label></div>
|
||||
<div class="four columns"><input id="number-sptags" type="text" class="fw" /></div>
|
||||
|
||||
<div class="eight columns"><label for="number-tickets">Tickets</label></div>
|
||||
<div class="four columns"><input id="number-tickets" type="text" class="fw" /></div>
|
||||
|
||||
<div class="eight columns"><label for="number-fantastic">Fantastic ratings</label></div>
|
||||
<div class="four columns"><input id="number-fantastic" type="text" class="fw" /></div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
<!-- DLC UNLOCK -->
|
||||
<h3 class="red">Unlock DLC</h3>
|
||||
<div class="container">
|
||||
<div class="row">
|
||||
<div class="eight columns"><label for="button-unlockticketshop">Unlock ticket shop</label></div>
|
||||
<div class="four columns"><button id="button-unlockticketshop" onclick="SavegameEditor._unlockTicketShop()">Unlock</button></div>
|
||||
|
||||
<div class="eight columns"><label for="button-unlockspeechbubbles">Unlock speech bubbles (first 16)</label></div>
|
||||
<div class="four columns"><button id="button-unlockspeechbubbles" onclick="SavegameEditor._unlockSpeechBubbles()">Unlock</button></div>
|
||||
|
||||
<div class="eight columns"><label for="button-unlockspeechbubbles2">Unlock speech bubbles (last 6)</label></div>
|
||||
<div class="four columns"><button id="button-unlockspeechbubbles2" onclick="SavegameEditor._unlockSpeechBubbles2()">Unlock</button></div>
|
||||
|
||||
<div class="eight columns"><label for="button-unlockhats2">Unlock hats (pack 2)</label></div>
|
||||
<div class="four columns"><button id="button-unlockhats2"onclick="SavegameEditor._unlockHats2()">Unlock</button></div>
|
||||
|
||||
<div class="eight columns"><label for="button-unlockhats3">Unlock hats (pack 3)</label></div>
|
||||
<div class="four columns"><button id="button-unlockhats3" onclick="SavegameEditor._unlockHats3()">Unlock</button></div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
<!-- PUZZLE SWAP -->
|
||||
<h3 class="green">Puzzle Swap</h3>
|
||||
<div class="container">
|
||||
<label for="select-panel">Panel:</label> <span id="container-select-panel"></span>
|
||||
Pieces: <span id="span-pieces"></span><br/>
|
||||
<button onclick="SavegameEditor._setPiecesFromCurrentPanel(true)"><i class="icon accept"></i> All</button>
|
||||
<button onclick="SavegameEditor._setPiecesFromCurrentPanel(-1)">All but one</button>
|
||||
<button onclick="SavegameEditor._setPiecesFromCurrentPanel(false)"><i class="icon reset"></i> None</button>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
</body>
|
||||
</html>
|
BIN
streetpass-mii-plaza/meet.dat
Normal file
12
streetpass-mii-plaza/savegame-editor.appcache
Normal file
@ -0,0 +1,12 @@
|
||||
CACHE MANIFEST
|
||||
# last update 2017-07-06
|
||||
#CACHE:
|
||||
index.html
|
||||
favicon.png
|
||||
streetpass-mii-plaza.js
|
||||
../savegame-editor.css
|
||||
../savegame-editor.js
|
||||
|
||||
# force these files to be loaded in network
|
||||
NETWORK:
|
||||
*
|
306
streetpass-mii-plaza/streetpass-mii-plaza.js
Normal file
@ -0,0 +1,306 @@
|
||||
/*
|
||||
Streetpass Mii Plaza for HTML5 Save Editor v20170706
|
||||
by Marc Robledo 2016-2017
|
||||
*/
|
||||
|
||||
SavegameEditor={
|
||||
Name:'Streetpass Mii Plaza',
|
||||
Filename:'meet.dat',
|
||||
|
||||
/* Constants */
|
||||
Constants:{
|
||||
ALL_SPEECH_BUBBLES:[0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff],
|
||||
ALL_SPEECH_BUBBLES2:[0xf8],
|
||||
ALL_HATS2:[0xef,0xfb,0xff,0xff,0xff,0xff,0xff,0xff],
|
||||
ALL_HATS3:[0xff,0xff,0xff,0x7f,0x00,0xfe,0x3f,0xfc,0x01],
|
||||
|
||||
HATS_GAMES:[
|
||||
//Battleground Z?
|
||||
//Mii Force?
|
||||
//Flower Town?
|
||||
//Warrior's Way?
|
||||
//Market Crashers?
|
||||
//Ninja Launcher?
|
||||
|
||||
[0x05b348, 0xc0],
|
||||
[0x05b348, 0x30],
|
||||
[0x05b348, 0x0c],
|
||||
[0x05b348, 0x03],
|
||||
[0x05b34a, 0xc0], //Monster Manor
|
||||
[0x05b34b, 0x03], //Ultimate Angler
|
||||
[0x05b34c, 0x06], //Slot Car Rivals
|
||||
[0x05b34c, 0x18],
|
||||
[0x05b34c, 0x60], //Feed Mii
|
||||
[0x05b34c, 0x80, 0x05b34d,0x01], //Mii Trek
|
||||
[0x05b34d, 0x06]
|
||||
],
|
||||
|
||||
NO_PIECES_15:[0x00,0x00],
|
||||
NO_PIECES_SPOTPASS_15:[0x00,0x00],
|
||||
NO_PIECES_SPOTPASS_24:[0x00,0x00,0x00],
|
||||
NO_PIECES_SPOTPASS_40:[0x00,0x00,0x00,0x00,0x00],
|
||||
MOST_PIECES_15:[0xff,0x3f],
|
||||
MOST_PIECES_SPOTPASS_15:[0xff,0xfc],
|
||||
MOST_PIECES_SPOTPASS_24:[0xff,0xff,0xfe],
|
||||
MOST_PIECES_SPOTPASS_40:[0xff,0xff,0xff,0xff,0xfe],
|
||||
ALL_PIECES_15:[0xff,0x7f],
|
||||
ALL_PIECES_SPOTPASS_15:[0xff,0xfe],
|
||||
ALL_PIECES_SPOTPASS_24:[0xff,0xff,0xff],
|
||||
ALL_PIECES_SPOTPASS_40:[0xff,0xff,0xff,0xff,0xff],
|
||||
|
||||
|
||||
PANELS:[
|
||||
{Size:15,Name:'Metroid: Other M'},
|
||||
{Size:15,Name:'Mario and Bowser'},
|
||||
{Size:15,Name:'Super Mario Galaxy 2'},
|
||||
{Size:15,Name:'The Legend of Zelda'},
|
||||
{Size:15,Name:'Kirby\'s Dream Land'},
|
||||
{Size:15,Name:'Pikmin'},
|
||||
{Size:15,Name:'New Super Mario Bros. Wii'},
|
||||
{Size:24,Name:'The Legend of Zelda: Ocarina of Time 3D'},
|
||||
{Size:24,Name:'Star Fox 64 3D'},
|
||||
{Size:40,Name:'Super Mario 3D Land'},
|
||||
{Size:40,Name:'Mario Kart 7'},
|
||||
{Size:24,Name:'Rhythm Heaven Fever'},
|
||||
{Size:24,Name:'Donkey Kong Country Returns'},
|
||||
{Size:24,Name:'Pilotwings Resort'},
|
||||
{Size:40,Name:'Kid Icarus: Uprising'},
|
||||
{Size:40,Name:'Fire Emblem Awakening'},
|
||||
{Size:40,Name:'Mario Tennis Open'},
|
||||
{Size:40,Name:'Kirby\'s 20th Anniversary'},
|
||||
{Size:24,Name:'Brain Age: Concentration Training'},
|
||||
{Size:15,Name:'All Nippon Airways*'},
|
||||
{Size:15,Name:'Mac de DS Big Mac*'},
|
||||
{Size:40,Name:'New Super Mario Bros. 2'},
|
||||
{Size:40,Name:'Kirby\'s Return to Dream Land'},
|
||||
{Size:40,Name:'Animal Crossing: New Leaf'},
|
||||
{Size:40,Name:'Luigi\'s Mansion: Dark Moon'},
|
||||
{Size:40,Name:'Dillon\'s Rolling Western: The Last Ranger'},
|
||||
{Size:40,Name:'Nintendo Starlets'},
|
||||
{Size:40,Name:'Xenoblade Chronicles'},
|
||||
{Size:40,Name:'New SUPER MARIO BROS. U + New SUPER LUIGI U'},
|
||||
{Size:40,Name:'The Legend of Zelda: Skyward Sword'},
|
||||
{Size:40,Name:'Mario & Luigi: Dream Team'},
|
||||
{Size:40,Name:'Chibi-Robo! Photo Finder'},
|
||||
{Size:24,Name:'Darumeshi Sports Store*'},
|
||||
{Size:40,Name:'Pokémon X and Pokémon Y'},
|
||||
{Size:40,Name:'MONSTER HUNTER'},
|
||||
{Size:40,Name:'Kirby: Triple Deluxe'},
|
||||
{Size:40,Name:'SUPER MARIO 3D WORLD'},
|
||||
{Size:40,Name:'YOSHI\'S New ISLAND'},
|
||||
{Size:24,Name:'Rusty\'s Real Deal Baseball'},
|
||||
{Size:24,Name:'Dalgu ne seupocheu yagu pyeon*'},
|
||||
{Size:15,Name:'Nintendo Pocket Football Club'},
|
||||
{Size:40,Name:'Mega Man'},
|
||||
{Size:24,Name:'Kirby Fighters Deluxe/DeDeDe\'s Drum Dash Deluxe'},
|
||||
{Size:40,Name:'Daigasso! Band Brothers P*'},
|
||||
{Size:40,Name:'FANTASY LIFE'},
|
||||
{Size:15,Name:'PIKMIN Short Movies 3D: The Night Juicer'},
|
||||
{Size:15,Name:'PIKMIN Short Movies 3D: Treasure in a Bottle'},
|
||||
{Size:15,Name:'PIKMIN Short Movies 3D: Occupational Hazards'},
|
||||
{Size:40,Name:'Sonic Boom'},
|
||||
{Size:40,Name:'Captain Toad: Treasure Tracker'},
|
||||
{Size:40,Name:'ULTIMATE NES REMIX'},
|
||||
{Size:40,Name:'Super Smash Bros. for 3DS / Wii U'},
|
||||
{Size:40,Name:'MONSTER HUNTER'},
|
||||
{Size:24,Name:'Tomodachi Life Friendship Fiesta'},
|
||||
{Size:15,Name:'Picross 3D Round 2'},
|
||||
{Size:24,Name:'Mario & Happy*'},
|
||||
{Size:40,Name:'YO-KAI WATCH'},
|
||||
{Size:15,Name:'Mario & Luigi: Paper Jam'},
|
||||
{Size:40,Name:'Animal Crossing: Happy Home Designer'},
|
||||
{Size:40,Name:'FINAL FANTASY EXPLORERS'},
|
||||
{Size:15,Name:'Kirby: Planet Robobot'},
|
||||
{Size:15,Name:'Culdcept Revolt'},
|
||||
{Size:15,Name:'METROID PRIME FEDERATION FORCE'}
|
||||
]
|
||||
},
|
||||
Offsets:{
|
||||
STREETPASS_TAGS: 0x043e70,
|
||||
PANELS: 0x044bdc,
|
||||
PANEL_SIZE: 0x02,
|
||||
SPOTPASS_PANELS: 0x045578,
|
||||
SPOTPASS_PANEL_SIZE: 0x44,
|
||||
ACCOMPLISHMENTS: 0x04555a,
|
||||
SHOP_UNLOCKED: 0x05b358,
|
||||
TICKETS: 0x05b366,
|
||||
FANTASTIC_RATINGS: 0x05b4d6,
|
||||
SPEECH_BUBBLES: 0x05bfe9,
|
||||
SPEECH_BUBBLES2: 0x05cec6,
|
||||
HATS2: 0x05b314,
|
||||
HATS3: 0x05b344
|
||||
},
|
||||
|
||||
/* private functions */
|
||||
_getPanelOffset:function(){
|
||||
var panelOffset,panelSize,panelId;
|
||||
if(get('select-panel').selectedIndex<=6){
|
||||
panelOffset=SavegameEditor.Offsets.PANELS;
|
||||
panelSize=SavegameEditor.Offsets.PANEL_SIZE;
|
||||
panelId=getValue('panel');
|
||||
}else{
|
||||
panelOffset=SavegameEditor.Offsets.SPOTPASS_PANELS;
|
||||
panelSize=SavegameEditor.Offsets.SPOTPASS_PANEL_SIZE;
|
||||
panelId=getValue('panel')-7;
|
||||
}
|
||||
|
||||
return panelOffset+parseInt(panelId)*panelSize;
|
||||
},
|
||||
_countCurrentPanelPieces:function(){
|
||||
var panelSize=SavegameEditor.Constants.PANELS[getValue('panel')].Size;
|
||||
var offset=SavegameEditor._getPanelOffset();
|
||||
|
||||
|
||||
var usedBytes;
|
||||
if(panelSize==15){
|
||||
usedBytes=SavegameEditor.Constants.ALL_PIECES_SPOTPASS_15.length
|
||||
}else if(panelSize==24){
|
||||
usedBytes=SavegameEditor.Constants.ALL_PIECES_SPOTPASS_24.length
|
||||
}else{
|
||||
usedBytes=SavegameEditor.Constants.ALL_PIECES_SPOTPASS_40.length
|
||||
}
|
||||
|
||||
var count=0;
|
||||
for(var i=0; i<usedBytes; i++){
|
||||
var myByte=tempFile.readByte(offset+i);
|
||||
for(var j=0; j<8; j++){
|
||||
var mask=Math.pow(2, (7-(j%8)));
|
||||
|
||||
if(myByte & mask){
|
||||
count++;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
var color;
|
||||
if(count==panelSize){
|
||||
color='green'
|
||||
}else if(count>=panelSize){
|
||||
color='red';
|
||||
}else{
|
||||
color='initial';
|
||||
}
|
||||
|
||||
setValue('pieces',count);
|
||||
getField('pieces').style.color=color;
|
||||
|
||||
},
|
||||
_setPiecesFromCurrentPanel:function(status){
|
||||
var arrayStr;
|
||||
if(status===false){
|
||||
arrayStr='NO_PIECES_';
|
||||
}else if(status===-1){
|
||||
arrayStr='MOST_PIECES_';
|
||||
}else{
|
||||
arrayStr='ALL_PIECES_';
|
||||
}
|
||||
if(get('select-panel').selectedIndex>=7){
|
||||
arrayStr+='SPOTPASS_';
|
||||
}
|
||||
arrayStr+=SavegameEditor.Constants.PANELS[parseInt(getValue('panel'))].Size;
|
||||
|
||||
tempFile.writeBytes(SavegameEditor._getPanelOffset(), SavegameEditor.Constants[arrayStr]);
|
||||
|
||||
SavegameEditor._countCurrentPanelPieces();
|
||||
},
|
||||
_unlockTicketShop:function(){
|
||||
var originalByte=tempFile.readByte(this.Offsets.SHOP_UNLOCKED);
|
||||
if(!(originalByte & 0x01)){
|
||||
tempFile.writeByte(this.Offsets.SHOP_UNLOCKED, originalByte+0x01);
|
||||
getField('button-unlockticketshop').disabled=true;
|
||||
MarcDialogs.alert('Ticket shop is open now.');
|
||||
}
|
||||
},
|
||||
_unlockSpeechBubbles:function(){
|
||||
tempFile.writeBytes(this.Offsets.SPEECH_BUBBLES, this.Constants.ALL_SPEECH_BUBBLES);
|
||||
getField('button-unlockspeechbubbles').disabled=true;
|
||||
MarcDialogs.alert('Speech bubbles 1-16 were unlocked.');
|
||||
},
|
||||
_unlockSpeechBubbles2:function(){
|
||||
tempFile.writeBytes(this.Offsets.SPEECH_BUBBLES2, this.Constants.ALL_SPEECH_BUBBLES2);
|
||||
getField('button-unlockspeechbubbles2').disabled=true;
|
||||
MarcDialogs.alert('Speech bubbles 17-22 were unlocked.');
|
||||
},
|
||||
_unlockHats2:function(){
|
||||
tempFile.writeBytes(this.Offsets.HATS2, this.Constants.ALL_HATS2);
|
||||
getField('button-unlockhats2').disabled=true;
|
||||
MarcDialogs.alert('All hats (pack 2) were unlocked.');
|
||||
},
|
||||
_unlockHats3:function(){
|
||||
tempFile.writeBytes(this.Offsets.HATS3, this.Constants.ALL_HATS3);
|
||||
getField('button-unlockhats3').disabled=true;
|
||||
MarcDialogs.alert('All hats (pack 3) were unlocked.');
|
||||
},
|
||||
_unlockHatsGame:function(i){
|
||||
for(var j=0; j<this.Constants.HATS_GAMES[i].length; j+=2){
|
||||
var offset=this.Constants.HATS_GAMES[i][j];
|
||||
var mask=this.Constants.HATS_GAMES[i][j+1];
|
||||
var byteRead=tempFile.readByte(offset);
|
||||
|
||||
tempFile.writeByte(offset, (byteRead & ~mask)+mask);
|
||||
}
|
||||
getField('button-unlockhatsgame'+i).disabled=true;
|
||||
MarcDialogs.alert('Game '+i+' hats were unlocked.');
|
||||
},
|
||||
|
||||
/* check if savegame is valid */
|
||||
checkValidSavegame:function(){
|
||||
return (tempFile.fileSize==393216)
|
||||
},
|
||||
|
||||
|
||||
|
||||
/* preload function */
|
||||
preload:function(){
|
||||
setNumericRange('sptags', 0, 65535);
|
||||
setNumericRange('tickets', 0, 156);
|
||||
setNumericRange('fantastic', 0, 65535);
|
||||
},
|
||||
/* load function */
|
||||
load:function(){
|
||||
tempFile.littleEndian=true;
|
||||
|
||||
setValue('sptags', tempFile.readInt(this.Offsets.STREETPASS_TAGS));
|
||||
setValue('tickets', tempFile.readShort(this.Offsets.TICKETS));
|
||||
setValue('fantastic', tempFile.readShort(this.Offsets.FANTASTIC_RATINGS));
|
||||
|
||||
var panels=[];
|
||||
for(var i=0; i<this.Constants.PANELS.length; i++)
|
||||
panels.push((i+1)+'. '+this.Constants.PANELS[i].Name);
|
||||
|
||||
var containerSelectPanel=get('container-select-panel');
|
||||
var selectPanel=select('panel',panels,this._countCurrentPanelPieces);
|
||||
selectPanel.style.width='auto';
|
||||
containerSelectPanel.appendChild(selectPanel);
|
||||
|
||||
getField('button-unlockticketshop').disabled=(tempFile.readByte(this.Offsets.SHOP_UNLOCKED) & 0x01);
|
||||
getField('button-unlockspeechbubbles').disabled=(compareBytes(this.Offsets.SPEECH_BUBBLES, this.Constants.ALL_SPEECH_BUBBLES));
|
||||
getField('button-unlockspeechbubbles2').disabled=(compareBytes(this.Offsets.SPEECH_BUBBLES2, this.Constants.ALL_SPEECH_BUBBLES2));
|
||||
getField('button-unlockhats2').disabled=(compareBytes(this.Offsets.HATS2, this.Constants.ALL_HATS2));
|
||||
getField('button-unlockhats3').disabled=(compareBytes(this.Offsets.HATS3, this.Constants.ALL_HATS3));
|
||||
|
||||
/*for(var i=0; i<11; i++){
|
||||
var enabled=this.Constants.HATS_GAMES[i].length/2;
|
||||
for(var j=0; j<this.Constants.HATS_GAMES[i].length; j+=2){
|
||||
var offset=this.Constants.HATS_GAMES[i][j];
|
||||
var mask=this.Constants.HATS_GAMES[i][j+1];
|
||||
|
||||
var byteRead=tempFile.readByte(offset);
|
||||
if((byteRead & mask) === mask)
|
||||
enabled--;
|
||||
}
|
||||
m('#button-unlockhatsgame'+i).get().disabled=!enabled;
|
||||
}*/
|
||||
|
||||
this._countCurrentPanelPieces();
|
||||
},
|
||||
|
||||
|
||||
/* save function */
|
||||
save:function(){
|
||||
tempFile.writeInt(this.Offsets.STREETPASS_TAGS, getValue('sptags'));
|
||||
tempFile.writeShort(this.Offsets.TICKETS, getValue('tickets'));
|
||||
tempFile.writeShort(this.Offsets.FANTASTIC_RATINGS, getValue('fantastic'));
|
||||
}
|
||||
}
|
BIN
streetpass-mii-plaza/thumb.jpg
Normal file
After Width: | Height: | Size: 88 KiB |
BIN
team-kirby-clash-dx/favicon.png
Normal file
After Width: | Height: | Size: 477 B |
101
team-kirby-clash-dx/index.html
Normal file
@ -0,0 +1,101 @@
|
||||
<!DOCTYPE html>
|
||||
<html manifest="savegame-editor.appcache">
|
||||
<head>
|
||||
<title>Savegame Editor – Team Kirby Clash Deluxe</title>
|
||||
<meta http-equiv="content-Type" content="text/html; charset=UTF-8"/>
|
||||
<meta name="description" content="A savegame editor for Team Kirby Clash Deluxe. It can edit values for your apple and materials."/>
|
||||
<meta name="keywords" content="html5, savegame, save, editor, hack, exploit, 3ds, team kirby clash deluxe, free, apples"/>
|
||||
<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"/>
|
||||
<script type="text/javascript" src="../savegame-editor.js"></script>
|
||||
<script type="text/javascript" src="./team-kirby-clash-dx.js"></script>
|
||||
</head>
|
||||
<body>
|
||||
|
||||
<!-- HEADER -->
|
||||
<div id="header">
|
||||
<div id="header-top">
|
||||
<div class="row wrapper">
|
||||
<h1 class="six columns text-left"><img src="favicon.png" /> Savegame Editor <small>for Team Kirby Clash Deluxe</small></h1>
|
||||
<div class="six columns header-buttons text-right">
|
||||
by <a href="/">Marc Robledo</a>
|
||||
<i class="icon github"></i> <a href="https://github.com/marcrobledo/savegame-editors/tree/master/team-kirby-clash-dx" target="_blank">See on GitHub</a>
|
||||
<i class="icon heart"></i> <a href="https://www.paypal.me/marcrobledo/5" target="_blank" rel="nofollow">Donate</a>
|
||||
</div>
|
||||
</div>
|
||||
<div class="hidden row wrapper" id="toolbar">
|
||||
<div class="twelve columns text-center">
|
||||
<button class="close" onclick="closeFile()"><i class="icon close"></i> Close file</button>
|
||||
<button class="colored" onclick="saveChanges()"><i class="icon accept"></i> Save changes</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
<!-- THE EDITOR -->
|
||||
<div id="the-editor" class="wrapper hidden">
|
||||
<!-- PROFILE -->
|
||||
<h3 class="orange">Profile</h3>
|
||||
<div class="container">
|
||||
<div class="row">
|
||||
<div class="nine columns"><label for="input-name">Message</label></div>
|
||||
<div class="three columns"><input id="input-name" type="text" class="fw" /></div>
|
||||
</div>
|
||||
<div class="row">
|
||||
<div class="nine columns"><label for="input-time">Played time <small>(in seconds)</small></label></div>
|
||||
<div class="three columns"><input id="input-time" type="text" class="fw" /></div>
|
||||
</div>
|
||||
<div class="row">
|
||||
<div class="nine columns"><label for="input-missions">Completed missions</label></div>
|
||||
<div class="three columns"><input id="input-missions" type="text" class="fw" /></div>
|
||||
</div>
|
||||
<div class="row">
|
||||
<div class="nine columns"><label for="input-encounters">Encounters</label></div>
|
||||
<div class="three columns"><input id="input-encounters" type="text" class="fw" /></div>
|
||||
</div>
|
||||
<div class="row">
|
||||
<div class="nine columns"><label for="input-multiplayerbattles">Multiplayer battles</label></div>
|
||||
<div class="three columns"><input id="input-multiplayerbattles" type="text" class="fw" /></div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- APPLE GEMS -->
|
||||
<h3 class="red">Apple gems</h3>
|
||||
<div class="container">
|
||||
<div class="row">
|
||||
<div class="nine columns"><label for="number-applegems">Apple gems</label></div>
|
||||
<div class="three columns"><input id="number-applegems" type="text" class="fw" /></div>
|
||||
</div>
|
||||
<div class="row">
|
||||
<div class="nine columns"><label for="number-boughtapplegems">Bought apple gems <small>(affects tree)</small></label></div>
|
||||
<div class="three columns"><input id="number-boughtapplegems" type="text" class="fw" /></div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- CRYSTAL SHARDS -->
|
||||
<h3 class="green">Crystal shards</h3>
|
||||
<div class="container">
|
||||
<div class="row">
|
||||
<div class="nine columns"><label for="number-shards-red">Fire shards</label></div>
|
||||
<div class="three columns"><input id="number-shards-red" type="text" class="fw" /></div>
|
||||
</div>
|
||||
<div class="row">
|
||||
<div class="nine columns"><label for="number-shards-blue">Water shards</label></div>
|
||||
<div class="three columns"><input id="number-shards-blue" type="text" class="fw" /></div>
|
||||
</div>
|
||||
<div class="row">
|
||||
<div class="nine columns"><label for="number-shards-yellow">Light shards</label></div>
|
||||
<div class="three columns"><input id="number-shards-yellow" type="text" class="fw" /></div>
|
||||
</div>
|
||||
<div class="row">
|
||||
<div class="nine columns"><label for="number-shards-rare">Rare shards</label></div>
|
||||
<div class="three columns"><input id="number-shards-rare" type="text" class="fw" /></div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
</body>
|
||||
</html>
|
BIN
team-kirby-clash-dx/savedata.dat
Normal file
12
team-kirby-clash-dx/savegame-editor.appcache
Normal file
@ -0,0 +1,12 @@
|
||||
CACHE MANIFEST
|
||||
# last update 2017-07-06
|
||||
#CACHE:
|
||||
index.html
|
||||
favicon.png
|
||||
team-kirby-clash-dx.js
|
||||
../savegame-editor.css
|
||||
../savegame-editor.js
|
||||
|
||||
# force these files to be loaded in network
|
||||
NETWORK:
|
||||
*
|
82
team-kirby-clash-dx/team-kirby-clash-dx.js
Normal file
@ -0,0 +1,82 @@
|
||||
/*
|
||||
Team Kirby Clash Deluxe savegame editor v20170706
|
||||
by Marc Robledo 2017
|
||||
*/
|
||||
|
||||
SavegameEditor={
|
||||
Name:'Team Kirby Clash Deluxe',
|
||||
Filename:'savedata.dat',
|
||||
|
||||
/* Constants */
|
||||
Offsets:{
|
||||
APPLE_GEMS:0x199c,
|
||||
BOUGHT_APPLE_GEMS:0x19b8,
|
||||
SHARDS_RED:0x19bc,
|
||||
SHARDS_BLUE:0x19c0,
|
||||
SHARDS_YELLOW:0x19c4,
|
||||
SHARDS_RARE:0x19c8,
|
||||
PROFILE_NAME:0x1bb4,
|
||||
PROFILE_PLAYED_TIME:0x1b74,
|
||||
PROFILE_COMPLETED_MISSIONS:0x1b90,
|
||||
PROFILE_MULTIPLAYER_BATTLES:0x1b94,
|
||||
PROFILE_MULTIPLAYER_ENCOUNTERS:0x1b64
|
||||
},
|
||||
|
||||
/* check if savegame is valid */
|
||||
checkValidSavegame:function(){
|
||||
return (tempFile.fileSize===8464)
|
||||
},
|
||||
|
||||
/* preload function */
|
||||
preload:function(){
|
||||
setNumericRange('applegems', 0, 65535);
|
||||
setNumericRange('boughtapplegems', 0, 3000);
|
||||
setNumericRange('shards-red', 0, 999);
|
||||
setNumericRange('shards-blue', 0, 999);
|
||||
setNumericRange('shards-yellow', 0, 999);
|
||||
setNumericRange('shards-rare', 0, 999);
|
||||
|
||||
setNumericRange('encounters', 0, 65535);
|
||||
setNumericRange('multiplayerbattles', 0, 65535);
|
||||
setNumericRange('time', 0, 0xffffffff);
|
||||
setNumericRange('missions', 0, 0xffffffff);
|
||||
},
|
||||
|
||||
/* load function */
|
||||
load:function(){
|
||||
tempFile.littleEndian=true;
|
||||
tempFile.fileName='savedata.dat';
|
||||
|
||||
/* load data */
|
||||
setValue('name', tempFile.readU16String(this.Offsets.PROFILE_NAME, 16));
|
||||
setValue('time', tempFile.readInt(this.Offsets.PROFILE_PLAYED_TIME));
|
||||
setValue('missions', tempFile.readInt(this.Offsets.PROFILE_COMPLETED_MISSIONS));
|
||||
setValue('encounters', tempFile.readInt(this.Offsets.PROFILE_MULTIPLAYER_ENCOUNTERS));
|
||||
setValue('multiplayerbattles', tempFile.readInt(this.Offsets.PROFILE_MULTIPLAYER_BATTLES));
|
||||
|
||||
setValue('applegems', tempFile.readShort(this.Offsets.APPLE_GEMS));
|
||||
setValue('boughtapplegems', tempFile.readShort(this.Offsets.BOUGHT_APPLE_GEMS));
|
||||
|
||||
setValue('shards-red', tempFile.readShort(this.Offsets.SHARDS_RED));
|
||||
setValue('shards-blue', tempFile.readShort(this.Offsets.SHARDS_BLUE));
|
||||
setValue('shards-yellow', tempFile.readShort(this.Offsets.SHARDS_YELLOW));
|
||||
setValue('shards-rare', tempFile.readShort(this.Offsets.SHARDS_RARE));
|
||||
},
|
||||
|
||||
/* save function */
|
||||
save:function(){
|
||||
tempFile.writeU16String(this.Offsets.PROFILE_NAME, 16, getValue('name'));
|
||||
tempFile.writeInt(this.Offsets.PROFILE_PLAYED_TIME, getValue('time'));
|
||||
tempFile.writeInt(this.Offsets.PROFILE_COMPLETED_MISSIONS, getValue('missions'));
|
||||
tempFile.writeInt(this.Offsets.PROFILE_MULTIPLAYER_ENCOUNTERS, getValue('encounters'));
|
||||
tempFile.writeInt(this.Offsets.PROFILE_MULTIPLAYER_BATTLES, getValue('multiplayerbattles'));
|
||||
|
||||
tempFile.writeShort(this.Offsets.APPLE_GEMS, getValue('applegems'));
|
||||
tempFile.writeShort(this.Offsets.BOUGHT_APPLE_GEMS, getValue('boughtapplegems'));
|
||||
|
||||
tempFile.writeShort(this.Offsets.SHARDS_RED, getValue('shards-red'));
|
||||
tempFile.writeShort(this.Offsets.SHARDS_BLUE, getValue('shards-blue'));
|
||||
tempFile.writeShort(this.Offsets.SHARDS_YELLOW, getValue('shards-yellow'));
|
||||
tempFile.writeShort(this.Offsets.SHARDS_RARE, getValue('shards-rare'));
|
||||
}
|
||||
}
|
BIN
team-kirby-clash-dx/thumb.jpg
Normal file
After Width: | Height: | Size: 90 KiB |