diff --git a/hyrule-warriors/APP.BIN b/hyrule-warriors/APP.BIN new file mode 100644 index 0000000..ce836e6 Binary files /dev/null and b/hyrule-warriors/APP.BIN differ diff --git a/hyrule-warriors/_index.html b/hyrule-warriors/_index.html new file mode 100644 index 0000000..2facd27 --- /dev/null +++ b/hyrule-warriors/_index.html @@ -0,0 +1,86 @@ + + + + Savegame Editor – Hyrule Warriors + + + + + + + + + + + + + + + + + + + + diff --git a/hyrule-warriors/favicon.png b/hyrule-warriors/favicon.png new file mode 100644 index 0000000..7952e37 Binary files /dev/null and b/hyrule-warriors/favicon.png differ diff --git a/hyrule-warriors/hyrule-warriors.js b/hyrule-warriors/hyrule-warriors.js new file mode 100644 index 0000000..484dda4 --- /dev/null +++ b/hyrule-warriors/hyrule-warriors.js @@ -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 + + + Savegame Editor – Hyrule Warriors + + + + + + + + + + + + + + + + + + + + diff --git a/hyrule-warriors/savegame-editor.appcache b/hyrule-warriors/savegame-editor.appcache new file mode 100644 index 0000000..ccc7523 --- /dev/null +++ b/hyrule-warriors/savegame-editor.appcache @@ -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: +* \ No newline at end of file diff --git a/hyrule-warriors/thumb.jpg b/hyrule-warriors/thumb.jpg new file mode 100644 index 0000000..e89993d Binary files /dev/null and b/hyrule-warriors/thumb.jpg differ diff --git a/kid-icarus-uprising/01.sav b/kid-icarus-uprising/01.sav new file mode 100644 index 0000000..668cdba Binary files /dev/null and b/kid-icarus-uprising/01.sav differ diff --git a/kid-icarus-uprising/favicon.png b/kid-icarus-uprising/favicon.png new file mode 100644 index 0000000..fb52c9c Binary files /dev/null and b/kid-icarus-uprising/favicon.png differ diff --git a/kid-icarus-uprising/index.html b/kid-icarus-uprising/index.html new file mode 100644 index 0000000..1081083 --- /dev/null +++ b/kid-icarus-uprising/index.html @@ -0,0 +1,99 @@ + + + + Savegame Editor – Kid Icarus: Uprising + + + + + + + + + + + + + + + + + + + + diff --git a/kid-icarus-uprising/kid-icarus-uprising.js b/kid-icarus-uprising/kid-icarus-uprising.js new file mode 100644 index 0000000..c91894c --- /dev/null +++ b/kid-icarus-uprising/kid-icarus-uprising.js @@ -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 + + + Savegame Editor – Picross 3D: Round 2 + + + + + + + + + + + + + + + + + + + + diff --git a/picross-3d-round-2/picross-3d-round-2.js b/picross-3d-round-2/picross-3d-round-2.js new file mode 100644 index 0000000..aedb617 --- /dev/null +++ b/picross-3d-round-2/picross-3d-round-2.js @@ -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(){ + } +} \ No newline at end of file diff --git a/picross-3d-round-2/savegame-editor.appcache b/picross-3d-round-2/savegame-editor.appcache new file mode 100644 index 0000000..8deb160 --- /dev/null +++ b/picross-3d-round-2/savegame-editor.appcache @@ -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: +* \ No newline at end of file diff --git a/picross-3d-round-2/thumb.jpg b/picross-3d-round-2/thumb.jpg new file mode 100644 index 0000000..0ea29da Binary files /dev/null and b/picross-3d-round-2/thumb.jpg differ diff --git a/pokemon-picross/all.dat b/pokemon-picross/all.dat new file mode 100644 index 0000000..fea26c7 Binary files /dev/null and b/pokemon-picross/all.dat differ diff --git a/pokemon-picross/favicon.png b/pokemon-picross/favicon.png new file mode 100644 index 0000000..fcf1171 Binary files /dev/null and b/pokemon-picross/favicon.png differ diff --git a/pokemon-picross/index.html b/pokemon-picross/index.html new file mode 100644 index 0000000..4306959 --- /dev/null +++ b/pokemon-picross/index.html @@ -0,0 +1,54 @@ + + + + Savegame Editor – Pokémon Picross + + + + + + + + + + + + + + + + + + + + diff --git a/pokemon-picross/pokemon-picross.js b/pokemon-picross/pokemon-picross.js new file mode 100644 index 0000000..4b7687e --- /dev/null +++ b/pokemon-picross/pokemon-picross.js @@ -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); + } +} \ No newline at end of file diff --git a/pokemon-picross/savegame-editor.appcache b/pokemon-picross/savegame-editor.appcache new file mode 100644 index 0000000..3685e6b --- /dev/null +++ b/pokemon-picross/savegame-editor.appcache @@ -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: +* \ No newline at end of file diff --git a/pokemon-picross/thumb.jpg b/pokemon-picross/thumb.jpg new file mode 100644 index 0000000..c1552fa Binary files /dev/null and b/pokemon-picross/thumb.jpg differ diff --git a/pokemon-shuffle/favicon.png b/pokemon-shuffle/favicon.png new file mode 100644 index 0000000..9a187eb Binary files /dev/null and b/pokemon-shuffle/favicon.png differ diff --git a/pokemon-shuffle/index.html b/pokemon-shuffle/index.html new file mode 100644 index 0000000..262289a --- /dev/null +++ b/pokemon-shuffle/index.html @@ -0,0 +1,131 @@ + + + + Savegame Editor – Pokémon Shuffle + + + + + + + + + + + + + + + + + + + + diff --git a/pokemon-shuffle/pokemon-shuffle.js b/pokemon-shuffle/pokemon-shuffle.js new file mode 100644 index 0000000..5c69c97 --- /dev/null +++ b/pokemon-shuffle/pokemon-shuffle.js @@ -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 + + + Savegame Editor – Rhythm Paradise/Heaven Megamix + + + + + + + + + + + + + + + + + + + + diff --git a/rhythm-paradise-megamix/rhythm-paradise-megamix.js b/rhythm-paradise-megamix/rhythm-paradise-megamix.js new file mode 100644 index 0000000..be1f9ed --- /dev/null +++ b/rhythm-paradise-megamix/rhythm-paradise-megamix.js @@ -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')); + } +} \ No newline at end of file diff --git a/rhythm-paradise-megamix/savedataArc.txt b/rhythm-paradise-megamix/savedataArc.txt new file mode 100644 index 0000000..e8d3fd9 Binary files /dev/null and b/rhythm-paradise-megamix/savedataArc.txt differ diff --git a/rhythm-paradise-megamix/savegame-editor.appcache b/rhythm-paradise-megamix/savegame-editor.appcache new file mode 100644 index 0000000..38cb51d --- /dev/null +++ b/rhythm-paradise-megamix/savegame-editor.appcache @@ -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: +* \ No newline at end of file diff --git a/rhythm-paradise-megamix/thumb.jpg b/rhythm-paradise-megamix/thumb.jpg new file mode 100644 index 0000000..99050b7 Binary files /dev/null and b/rhythm-paradise-megamix/thumb.jpg differ diff --git a/streetpass-mii-plaza/favicon.png b/streetpass-mii-plaza/favicon.png new file mode 100644 index 0000000..d1b784d Binary files /dev/null and b/streetpass-mii-plaza/favicon.png differ diff --git a/streetpass-mii-plaza/index.html b/streetpass-mii-plaza/index.html new file mode 100644 index 0000000..d914507 --- /dev/null +++ b/streetpass-mii-plaza/index.html @@ -0,0 +1,90 @@ + + + + Savegame Editor – StreetPass Mii Plaza + + + + + + + + + + + + + + + + + + + + diff --git a/streetpass-mii-plaza/meet.dat b/streetpass-mii-plaza/meet.dat new file mode 100644 index 0000000..6db5917 Binary files /dev/null and b/streetpass-mii-plaza/meet.dat differ diff --git a/streetpass-mii-plaza/savegame-editor.appcache b/streetpass-mii-plaza/savegame-editor.appcache new file mode 100644 index 0000000..ac013f9 --- /dev/null +++ b/streetpass-mii-plaza/savegame-editor.appcache @@ -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: +* \ No newline at end of file diff --git a/streetpass-mii-plaza/streetpass-mii-plaza.js b/streetpass-mii-plaza/streetpass-mii-plaza.js new file mode 100644 index 0000000..b4eaa09 --- /dev/null +++ b/streetpass-mii-plaza/streetpass-mii-plaza.js @@ -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=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 + + + Savegame Editor – Team Kirby Clash Deluxe + + + + + + + + + + + + + + + + + + + + diff --git a/team-kirby-clash-dx/savedata.dat b/team-kirby-clash-dx/savedata.dat new file mode 100644 index 0000000..4962c4b Binary files /dev/null and b/team-kirby-clash-dx/savedata.dat differ diff --git a/team-kirby-clash-dx/savegame-editor.appcache b/team-kirby-clash-dx/savegame-editor.appcache new file mode 100644 index 0000000..2eb7741 --- /dev/null +++ b/team-kirby-clash-dx/savegame-editor.appcache @@ -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: +* \ No newline at end of file diff --git a/team-kirby-clash-dx/team-kirby-clash-dx.js b/team-kirby-clash-dx/team-kirby-clash-dx.js new file mode 100644 index 0000000..742c2b0 --- /dev/null +++ b/team-kirby-clash-dx/team-kirby-clash-dx.js @@ -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')); + } +} \ No newline at end of file diff --git a/team-kirby-clash-dx/thumb.jpg b/team-kirby-clash-dx/thumb.jpg new file mode 100644 index 0000000..8fc9000 Binary files /dev/null and b/team-kirby-clash-dx/thumb.jpg differ