deleted old editors
Before Width: | Height: | Size: 22 KiB |
@@ -1,690 +0,0 @@
|
||||
/*
|
||||
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(){
|
||||
m('#button-discover-materials').hide();
|
||||
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('hw-weapon-type', tempFile.readByte(offset+0x00));
|
||||
setValue('hw-weapon-id', tempFile.readInt(offset+0x04));
|
||||
setValue('hw-weapon-base-power', tempFile.readShort(offset+0x08));
|
||||
setValue('hw-weapon-stars', tempFile.readShort(offset+0x0a));
|
||||
for(var i=0; i<8; i++){
|
||||
setValue('hw-weapon-skill'+i, tempFile.readInt(offset+0x0c+0x04*i));
|
||||
setValue('hw-weapon-koskill'+i, tempFile.readInt(offset+0x2c+0x04*i));
|
||||
}
|
||||
|
||||
SavegameEditor._calculateWeaponPower();
|
||||
},
|
||||
_writeWeapon:function(){
|
||||
var offset=SavegameEditor._getWeaponOffset();
|
||||
tempFile.writeByte(offset+0x00, getValue('hw-weapon-type'));
|
||||
tempFile.writeInt(offset+0x04, getValue('hw-weapon-id'));
|
||||
tempFile.writeShort(offset+0x08, getValue('hw-weapon-base-power'));
|
||||
tempFile.writeShort(offset+0x0a, getValue('hw-weapon-stars'));
|
||||
for(var i=0; i<8; i++){
|
||||
tempFile.writeInt(offset+0x0c+0x04*i, getValue('hw-weapon-skill'+i));
|
||||
tempFile.writeInt(offset+0x2c+0x04*i, getValue('hw-weapon-koskill'+i));
|
||||
}
|
||||
|
||||
SavegameEditor._calculateWeaponPower();
|
||||
},
|
||||
_calculateWeaponPower:function(){
|
||||
var legendaryType=getValue('hw-weapon-type') & 0x10;
|
||||
var legendarySkill=false;
|
||||
var evilsBane=getValue('hw-weapon-type') & 0x20;
|
||||
var evilsBaneSkill=false;
|
||||
for(var i=0;i<8;i++){
|
||||
if(getValue('hw-weapon-skill'+i)==0x2a && getValue('hw-weapon-koskill'+i)==0){
|
||||
legendarySkill=true;
|
||||
}else if(getValue('hw-weapon-skill'+i)==0x29 && getValue('hw-weapon-koskill'+i)==0){
|
||||
evilsBaneSkill=true;
|
||||
}
|
||||
}
|
||||
var actualBasePower=0;
|
||||
var basePower=parseInt(getValue('hw-weapon-base-power'));
|
||||
|
||||
if(legendaryType && legendarySkill){
|
||||
actualBasePower=300
|
||||
}else{
|
||||
actualBasePower=basePower
|
||||
}
|
||||
|
||||
var stars=parseInt(getValue('hw-weapon-stars'));
|
||||
var starBonus=actualBasePower/10;
|
||||
|
||||
if(evilsBane && evilsBaneSkill){
|
||||
actualBasePower+=200
|
||||
}
|
||||
var finalPower = Math.ceil(actualBasePower+(starBonus*stars))
|
||||
|
||||
setValue('hw-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('hw-rupees', tempFile.readInt(this.Constants.RUPEES_OFFSET), 0, 9999999);
|
||||
for(var i=0; i<this.Constants.MATERIALS.length; i++){
|
||||
m('#row-hw-materials').append(
|
||||
col(4, create('label','number-hw-material'+i, this.Constants.MATERIALS[i]))
|
||||
).append(
|
||||
col(2, create('number', 'hw-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]){
|
||||
m('#row-hw-characters').append(
|
||||
row([3,3,3,3],
|
||||
create('span',names[j]),
|
||||
create('number', 'hw-characters'+i+'_damage'+j, 0, 99999999, tempFile.readShort(offset)),
|
||||
create('number', 'hw-characters'+i+'_level'+j, 1, 255, level+1),
|
||||
create('number', 'hw-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=mCreate('div', {class:'row map',id:'hw-map'+i}).appendTo('#hw-maps').hide();
|
||||
|
||||
for(var j=0; j<map.Items.length; j++){
|
||||
if(map.Items[j]){
|
||||
mapDiv.append(
|
||||
col(4, create('label','number-hw-map'+i+'-item'+j, map.Items[j]))
|
||||
).append(
|
||||
col(2, create('number','hw-map'+i+'-item'+j, 0, 5, tempFile.readByte(map.Offset+j)))
|
||||
);
|
||||
}
|
||||
}
|
||||
}
|
||||
m('#container-hw-select-map').append(create('select','hw-map', maps, function(){m('div.map').hide();m('#hw-map'+this.value).show()}));
|
||||
m('#hw-map0').show();
|
||||
|
||||
/* WEAPONS */
|
||||
for(var i=0; i<8; i++){
|
||||
var KOsToUnlockInput=create('number','hw-weapon-koskill'+i, 0, 9999999);
|
||||
KOsToUnlockInput.addEventListener('change', this._writeWeapon, false);
|
||||
|
||||
document.getElementById('hw-weapons-skills-container').appendChild(
|
||||
row(
|
||||
[3,3,3,3],
|
||||
create('label','hw-weapon-skill'+i, 'Skill '+(i+1)),
|
||||
create('select','hw-weapon-skill'+i, this.Constants.WEAPON_SKILLS, this._writeWeapon),
|
||||
create('label','hw-weapon-koskill'+i, 'KOs to unlock'),
|
||||
KOsToUnlockInput
|
||||
)
|
||||
);
|
||||
}
|
||||
m('#hw-container-select-weapon').append(m(create('select', 'weapon', genRange(0,this.Constants.MAX_WEAPONS-1), function(){SavegameEditor._selectWeapon(this.value)})).addClass('medium'));
|
||||
m(create('select', 'hw-weapon-type', this.Constants.WEAPON_TYPES, this._writeWeapon))
|
||||
.appendTo(m('#container-hw-weapon-type'));
|
||||
m(create('select', 'hw-weapon-id', this.Constants.WEAPON_IDS, this._writeWeapon))
|
||||
.appendTo(m('#container-hw-weapon-id'));
|
||||
m(create('select', 'hw-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))
|
||||
.appendTo(m('#container-hw-weapon-base-power'));
|
||||
m(create('select', 'hw-weapon-stars', genRange(0,5), this._writeWeapon))
|
||||
.appendTo(m('#container-hw-weapon-stars'));
|
||||
|
||||
this._selectWeapon(0);
|
||||
},
|
||||
|
||||
|
||||
/* save function */
|
||||
save:function(){
|
||||
/* MATERIALS */
|
||||
tempFile.writeInt(this.Constants.RUPEES_OFFSET, getValue('hw-rupees'));
|
||||
for(var i=0; i<this.Constants.MATERIALS.length; i++){
|
||||
tempFile.writeShort(this.Constants.MATERIALS_OFFSET+i*2, getValue('hw-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('hw-characters'+i+'_damage'+j));
|
||||
tempFile.writeByte(offset+this.Constants.CHARACTER_LEVEL_OFFSET, getValue('hw-characters'+i+'_level'+j)-1);
|
||||
tempFile.writeInt(offset+this.Constants.CHARACTER_EXP_OFFSET, getValue('hw-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('hw-map'+i+'-item'+j));
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
Before Width: | Height: | Size: 28 KiB |
@@ -1,747 +0,0 @@
|
||||
/*
|
||||
Kid Icarus: Uprising for HTML5 Save Editor v20160704
|
||||
by Marc Robledo 2016
|
||||
*/
|
||||
|
||||
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(){
|
||||
m('#button-kiu-unlock-trophies').get().disabled=true;
|
||||
m('#button-kiu-unlock-trophies').get().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);
|
||||
m('#kiu-weapon-unknown').html('0x'+weaponType.toString(16)).get().value=weaponType;
|
||||
|
||||
m('#select-kiu-weapon-type').get().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;
|
||||
}
|
||||
m('#select-kiu-weapon-stars-ranged').get().value=starsRanged;
|
||||
m('#select-kiu-weapon-stars-melee').get().value=starsMelee;
|
||||
|
||||
for(var i=0; i<6; i++){
|
||||
m('#select-kiu-weapon-modifier'+i).get().value=tempFile.readShort(offset+0x14+i*2);
|
||||
}
|
||||
|
||||
this._calculateWeaponValue();
|
||||
},
|
||||
_writeWeapon:function(){
|
||||
var offset=SavegameEditor._getWeaponOffset();
|
||||
|
||||
var weaponType=parseInt(getValue('kiu-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('kiu-weapon-stars-ranged'));
|
||||
tempFile.writeShort(offset+0x0a, getValue('kiu-weapon-stars-melee'));
|
||||
|
||||
for(var i=0; i<6; i++)
|
||||
tempFile.writeShort(offset+0x14+i*2, getValue('kiu-weapon-modifier'+i));
|
||||
|
||||
SavegameEditor._calculateWeaponValue();
|
||||
},
|
||||
_calculateWeaponValue:function(){
|
||||
var val=100;
|
||||
for(var i=0; i<6; i++){
|
||||
val+=this.Constants.MODIFIERS_VALUES[m('#select-kiu-weapon-modifier'+i).get().value];
|
||||
}
|
||||
val+=this.Constants.STAR_RANGED_VALUES[m('#select-kiu-weapon-stars-ranged').get().selectedIndex];
|
||||
val+=this.Constants.STAR_MELEE_VALUES[m('#select-kiu-weapon-stars-melee').get().selectedIndex];
|
||||
|
||||
//val=parseInt(val);
|
||||
val=Math.ceil(val);
|
||||
if(val<351){
|
||||
m('#kiu-weapon-value').css('color','initial').html(val);
|
||||
}else{
|
||||
m('#kiu-weapon-value').css('color','red').html(val+' (invalid weapon!)');
|
||||
}
|
||||
},
|
||||
|
||||
/* check if savegame is valid */
|
||||
checkValidSavegame:function(){
|
||||
return (tempFile.fileSize==66296)
|
||||
},
|
||||
|
||||
|
||||
/* load function */
|
||||
load:function(){
|
||||
tempFile.littleEndian=true;
|
||||
|
||||
setValue('kiu-hearts', tempFile.readInt(this.Offsets.CURRENT_HEARTS), 0, 9999999);
|
||||
setValue('kiu-hearts-for-palutena', tempFile.readInt(this.Offsets.HEARTS_OFFERED_TO_PALUTENA), 0, 9999999);
|
||||
setValue('kiu-hearts-for-viridi', tempFile.readInt(this.Offsets.HEARTS_OFFERED_TO_VIRIDI), 0, 9999999);
|
||||
|
||||
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=create('float','kiu-stat'+i, 0.0, 9.0, val);
|
||||
}else{
|
||||
val=tempFile.readInt(this.Offsets.STATS+i*4);
|
||||
input=create('number','kiu-stat'+i, 0, 0xffffffff, val);
|
||||
}
|
||||
|
||||
document.getElementById('kiu-stats').appendChild(
|
||||
row(
|
||||
[8,4],
|
||||
create('label', 'kiu-stat'+i, this.Constants.STATS[i]),
|
||||
input
|
||||
)
|
||||
);
|
||||
}
|
||||
|
||||
|
||||
/* WEAPONS */
|
||||
var selectWeaponType=m('#select-kiu-weapon-type');
|
||||
for(var i=0; i<this.Constants.WEAPON_TYPES.length; i++){
|
||||
var GROUP=this.Constants.WEAPON_TYPES[i];
|
||||
var optGroup=mCreate('optgroup',{label:GROUP.name}).appendTo(selectWeaponType);
|
||||
for(var j=0; j<GROUP.weapons.length; j++){
|
||||
var WEAPON=GROUP.weapons[j];
|
||||
var option=mCreate('option',{value:WEAPON.id,html:(j+1)+'. '+WEAPON.name}).appendTo(optGroup);
|
||||
}
|
||||
}
|
||||
var option=mCreate('option',{value:0x000000,html:'???',id:'kiu-weapon-unknown'}).appendTo(selectWeaponType);
|
||||
|
||||
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=create('select','kiu-weapon', validWeapons);
|
||||
selectWeapon.className+=' medium';
|
||||
selectWeapon.addEventListener('change', function(){SavegameEditor._readWeapon(this.value)}, false);
|
||||
|
||||
m('#kiu-container-select-weapon').append(selectWeapon);
|
||||
|
||||
currentWeapon=m('#select-kiu-weapon').children().first().get().value;
|
||||
|
||||
var selectStarsRanged=create('select','kiu-weapon-stars-ranged', this.Constants.STARS);
|
||||
selectStarsRanged.addEventListener('change', this._writeWeapon, false);
|
||||
m('#container-kiu-weapon-stars-ranged').append(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=create('select','kiu-weapon-stars-melee', MELEE_STARS);
|
||||
selectStarsMelee.addEventListener('change', this._writeWeapon, false);
|
||||
m('#container-kiu-weapon-stars-melee').append(selectStarsMelee);
|
||||
|
||||
for(var i=0; i<6; i++){
|
||||
var selectWeaponModifier=create('select','kiu-weapon-modifier'+i, this.Constants.MODIFIERS);
|
||||
selectWeaponModifier.addEventListener('change', this._writeWeapon, false);
|
||||
m('#container-kiu-weapon-modifier'+i).append(selectWeaponModifier);
|
||||
}
|
||||
this._readWeapon(0);
|
||||
},
|
||||
|
||||
|
||||
/* save function */
|
||||
save:function(){
|
||||
tempFile.writeInt(this.Offsets.CURRENT_HEARTS, getValue('kiu-hearts'));
|
||||
tempFile.writeInt(this.Offsets.HEARTS_OFFERED_TO_PALUTENA, getValue('kiu-hearts-for-palutena'));
|
||||
tempFile.writeInt(this.Offsets.HEARTS_OFFERED_TO_VIRIDI, getValue('kiu-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('kiu-stat'+i));
|
||||
}else{
|
||||
tempFile.writeInt(this.Offsets.STATS+i*4, getValue('kiu-stat'+i));
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
Before Width: | Height: | Size: 18 KiB |
@@ -1,45 +0,0 @@
|
||||
/*
|
||||
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);
|
||||
}
|
||||
}
|
||||
m('#picross3d2-amiibocount').html(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++;
|
||||
}
|
||||
}
|
||||
m('#picross3d2-amiibocount').html(unlockedAmiibos);
|
||||
},
|
||||
|
||||
|
||||
/* save function */
|
||||
save:function(){
|
||||
}
|
||||
}
|
Before Width: | Height: | Size: 26 KiB |
@@ -1,39 +0,0 @@
|
||||
/*
|
||||
Pokémon Picross for HTML5 Save Editor v20170304
|
||||
by Marc Robledo 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)
|
||||
},
|
||||
|
||||
/* load function */
|
||||
load:function(){
|
||||
tempFile.fileName='all.dat';
|
||||
|
||||
setValue('pokemonpicross-picrites', tempFile.readShort(this.Offsets.PICRITES), 0, 9999);
|
||||
setValue('pokemonpicross-boughtpicrites', tempFile.readShort(this.Offsets.BOUGHTPICRITES), 0, 5000);
|
||||
},
|
||||
|
||||
|
||||
/* save function */
|
||||
save:function(){
|
||||
tempFile.writeShort(this.Offsets.PICRITES, getValue('pokemonpicross-picrites'));
|
||||
var boughtPicrites=getValue('pokemonpicross-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);
|
||||
}
|
||||
}
|
Before Width: | Height: | Size: 30 KiB |
@@ -1,136 +0,0 @@
|
||||
/*
|
||||
Pokemon Shuffle for HTML5 Save Editor v20160704
|
||||
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)
|
||||
},
|
||||
|
||||
|
||||
/* load function */
|
||||
load:function(){
|
||||
tempFile.littleEndian=true;
|
||||
tempFile.fileName='savedata.bin';
|
||||
|
||||
setValue('poke-shuffle-coins', this._readVariable(this.Offsets.Coins, 0), 0, 99999);
|
||||
setValue('poke-shuffle-jewels', this._readVariable(this.Offsets.Jewels, 0), 0, 150);
|
||||
setValue('poke-shuffle-hearts', this._readVariable(this.Offsets.Hearts, 0), 0, 99);
|
||||
|
||||
for(var i=0; i<7; i++)
|
||||
setValue('poke-shuffle-item'+i, this._readVariable(this.Offsets.Items, 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++)
|
||||
setValue('poke-shuffle-enhancement'+i, this._readVariable(this.Offsets.Enhancements, i), 0, 99);
|
||||
|
||||
setValue('poke-shuffle-scalationlvl', this._readVariable(this.Offsets.CurrentScalationLevel, 0), 1, 999);
|
||||
},
|
||||
|
||||
|
||||
/* save function */
|
||||
save:function(){
|
||||
this._storeVariable(this.Offsets.Coins, 0, getValue('poke-shuffle-coins'));
|
||||
this._storeVariable(this.Offsets.Jewels, 0, getValue('poke-shuffle-jewels'));
|
||||
this._storeVariable(this.Offsets.Hearts, 0, getValue('poke-shuffle-hearts'));
|
||||
|
||||
for(var i=0; i<7; i++)
|
||||
this._storeVariable(this.Offsets.Items, i, getValue('poke-shuffle-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('poke-shuffle-enhancement'+i));
|
||||
|
||||
this._storeVariable(this.Offsets.CurrentScalationLevel, 0, getValue('poke-shuffle-scalationlvl'));
|
||||
}
|
||||
}
|
Before Width: | Height: | Size: 30 KiB |
@@ -1,45 +0,0 @@
|
||||
/*
|
||||
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)
|
||||
},
|
||||
|
||||
|
||||
/* load function */
|
||||
load:function(){
|
||||
tempFile.littleEndian=true;
|
||||
tempFile.fileName='savedataArc.txt';
|
||||
|
||||
setValue('rhythm-megamix-coins', tempFile.readShort(this.Offsets.COINS), 0, 9999);
|
||||
setValue('rhythm-megamix-flowballs', tempFile.readShort(this.Offsets.FLOWBALLS), 0, 255);
|
||||
setValue('rhythm-megamix-onions1', tempFile.readByte(this.Offsets.ONIONS1), 0, 255);
|
||||
setValue('rhythm-megamix-onions2', tempFile.readByte(this.Offsets.ONIONS2), 0, 255);
|
||||
setValue('rhythm-megamix-onions3', tempFile.readByte(this.Offsets.ONIONS3), 0, 255);
|
||||
},
|
||||
|
||||
|
||||
/* save function */
|
||||
save:function(){
|
||||
tempFile.writeShort(this.Offsets.COINS, getValue('rhythm-megamix-coins'));
|
||||
tempFile.writeShort(this.Offsets.FLOWBALLS, getValue('rhythm-megamix-flowballs'));
|
||||
tempFile.writeByte(this.Offsets.ONIONS1, getValue('rhythm-megamix-onions1'));
|
||||
tempFile.writeByte(this.Offsets.ONIONS2, getValue('rhythm-megamix-onions2'));
|
||||
tempFile.writeByte(this.Offsets.ONIONS3, getValue('rhythm-megamix-onions3'));
|
||||
}
|
||||
}
|
Before Width: | Height: | Size: 22 KiB |
@@ -1,296 +0,0 @@
|
||||
/*
|
||||
Streetpass Mii Plaza for HTML5 Save Editor v20161009
|
||||
by Marc Robledo 2016
|
||||
*/
|
||||
|
||||
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:'Katachi Shinkahhen! Rittai Picross 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(m('#select-miiplaza-panel').get().selectedIndex<=6){
|
||||
panelOffset=SavegameEditor.Offsets.PANELS;
|
||||
panelSize=SavegameEditor.Offsets.PANEL_SIZE;
|
||||
panelId=getValue('miiplaza-panel');
|
||||
}else{
|
||||
panelOffset=SavegameEditor.Offsets.SPOTPASS_PANELS;
|
||||
panelSize=SavegameEditor.Offsets.SPOTPASS_PANEL_SIZE;
|
||||
panelId=getValue('miiplaza-panel')-7;
|
||||
}
|
||||
|
||||
return panelOffset+parseInt(panelId)*panelSize;
|
||||
},
|
||||
_countCurrentPanelPieces:function(){
|
||||
var panelSize=SavegameEditor.Constants.PANELS[getValue('miiplaza-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('miiplaza-pieces',count);
|
||||
getField('miiplaza-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(m('#select-miiplaza-panel').get().selectedIndex>=7){
|
||||
arrayStr+='SPOTPASS_';
|
||||
}
|
||||
arrayStr+=SavegameEditor.Constants.PANELS[parseInt(getValue('miiplaza-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-miiplaza-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-miiplaza-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-miiplaza-unlockspeechbubbles2').disabled=true;
|
||||
MarcDialogs.alert('Speech bubbles 17-22 were unlocked.');
|
||||
},
|
||||
_unlockHats2:function(){
|
||||
tempFile.writeBytes(this.Offsets.HATS2, this.Constants.ALL_HATS2);
|
||||
getField('button-miiplaza-unlockhats2').disabled=true;
|
||||
MarcDialogs.alert('All hats (pack 2) were unlocked.');
|
||||
},
|
||||
_unlockHats3:function(){
|
||||
tempFile.writeBytes(this.Offsets.HATS3, this.Constants.ALL_HATS3);
|
||||
getField('button-miiplaza-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)
|
||||
},
|
||||
|
||||
|
||||
/* load function */
|
||||
load:function(){
|
||||
tempFile.littleEndian=true;
|
||||
|
||||
setValue('miiplaza-sptags', tempFile.readInt(this.Offsets.STREETPASS_TAGS), 0, 65535);
|
||||
setValue('miiplaza-tickets', tempFile.readShort(this.Offsets.TICKETS), 0, 156);
|
||||
setValue('miiplaza-fantastic', tempFile.readShort(this.Offsets.FANTASTIC_RATINGS), 0, 65535);
|
||||
|
||||
var panels=[];
|
||||
for(var i=0; i<this.Constants.PANELS.length; i++)
|
||||
panels.push((i+1)+'. '+this.Constants.PANELS[i].Name);
|
||||
|
||||
m('#container-select-panel').append(m([create('select','miiplaza-panel',panels)]).css('width','auto').addEvent('change', this._countCurrentPanelPieces));
|
||||
|
||||
getField('button-miiplaza-unlockticketshop').disabled=(tempFile.readByte(this.Offsets.SHOP_UNLOCKED) & 0x01);
|
||||
getField('button-miiplaza-unlockspeechbubbles').disabled=(compareBytes(this.Offsets.SPEECH_BUBBLES, this.Constants.ALL_SPEECH_BUBBLES));
|
||||
getField('button-miiplaza-unlockspeechbubbles2').disabled=(compareBytes(this.Offsets.SPEECH_BUBBLES2, this.Constants.ALL_SPEECH_BUBBLES2));
|
||||
getField('button-miiplaza-unlockhats2').disabled=(compareBytes(this.Offsets.HATS2, this.Constants.ALL_HATS2));
|
||||
getField('button-miiplaza-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('miiplaza-sptags'));
|
||||
tempFile.writeShort(this.Offsets.TICKETS, getValue('miiplaza-tickets'));
|
||||
tempFile.writeShort(this.Offsets.FANTASTIC_RATINGS, getValue('miiplaza-fantastic'));
|
||||
}
|
||||
}
|
Before Width: | Height: | Size: 27 KiB |
@@ -1,75 +0,0 @@
|
||||
/*
|
||||
Team Kirby Clash Deluxe savegame editor v20170416
|
||||
by Marc Robledo 2017
|
||||
*/
|
||||
|
||||
var currentBOTWItem=0;
|
||||
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 /* not tested? */
|
||||
},
|
||||
|
||||
/* check if savegame is valid */
|
||||
checkValidSavegame:function(){
|
||||
return (tempFile.fileSize===8464)
|
||||
},
|
||||
|
||||
|
||||
/* load function */
|
||||
load:function(){
|
||||
tempFile.littleEndian=true;
|
||||
tempFile.fileName='savedata.dat';
|
||||
|
||||
/* prepare editor */
|
||||
card(
|
||||
'Apple gems',
|
||||
row([9,3],
|
||||
label('number-applegems', 'Apple gems'),
|
||||
inputNumber('applegems', 0, 65535, tempFile.readShort(this.Offsets.APPLE_GEMS))
|
||||
),
|
||||
row([9,3],
|
||||
label('number-boughtapplegems', 'Bought apple gems (affects tree)'),
|
||||
inputNumber('boughtapplegems', 0, 3000, tempFile.readShort(this.Offsets.BOUGHT_APPLE_GEMS))
|
||||
)
|
||||
);
|
||||
card(
|
||||
'Crystal shards',
|
||||
row([9,3],
|
||||
label('number-shards-red', 'Fire shards'),
|
||||
inputNumber('shards-red', 0, 999, tempFile.readShort(this.Offsets.SHARDS_RED))
|
||||
),
|
||||
row([9,3],
|
||||
label('number-shards-blue', 'Water shards'),
|
||||
inputNumber('shards-blue', 0, 999, tempFile.readShort(this.Offsets.SHARDS_BLUE))
|
||||
),
|
||||
row([9,3],
|
||||
label('number-shards-yellow', 'Light shards'),
|
||||
inputNumber('shards-yellow', 0, 999, tempFile.readShort(this.Offsets.SHARDS_YELLOW))
|
||||
),
|
||||
row([9,3],
|
||||
label('number-shards-rare', 'Rare shards'),
|
||||
inputNumber('shards-rare', 0, 999, tempFile.readShort(this.Offsets.SHARDS_RARE))
|
||||
)
|
||||
);
|
||||
},
|
||||
|
||||
/* save function */
|
||||
save:function(){
|
||||
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'));
|
||||
}
|
||||
}
|
Before Width: | Height: | Size: 19 KiB |
@@ -1,23 +0,0 @@
|
||||
/*
|
||||
The legend of Zelda: Breath of the wild (DEPRECATED) v20170521
|
||||
by Marc Robledo 2017
|
||||
*/
|
||||
|
||||
SavegameEditor={
|
||||
Name:'The legend of Zelda: Breath of the wild',
|
||||
Filename:'game_data.sav',
|
||||
|
||||
/* check if savegame is valid */
|
||||
checkValidSavegame:function(){
|
||||
return (tempFile.fileSize===896976 || tempFile.fileSize===897160 || tempFile.fileSize===897112)
|
||||
},
|
||||
|
||||
|
||||
/* load function */
|
||||
load:function(){
|
||||
window.location.href = 'http://www.marcrobledo.com/savegame-editors/zelda-botw/';
|
||||
},
|
||||
|
||||
/* save function */
|
||||
save:function(){}
|
||||
}
|
BIN
favicon.png
Before Width: | Height: | Size: 19 KiB |
Before Width: | Height: | Size: 9.9 KiB |