deleted old editors

This commit is contained in:
Marc Robledo
2017-07-07 00:03:02 +02:00
parent f4e21032ed
commit 5ac26096e6
22 changed files with 0 additions and 2484 deletions

Binary file not shown.

Before

Width:  |  Height:  |  Size: 22 KiB

View File

@@ -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));
}
}
}
}
}

Binary file not shown.

Before

Width:  |  Height:  |  Size: 28 KiB

View File

@@ -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));
}
}
}
}

Binary file not shown.

Before

Width:  |  Height:  |  Size: 18 KiB

View File

@@ -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(){
}
}

Binary file not shown.

Before

Width:  |  Height:  |  Size: 26 KiB

View File

@@ -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);
}
}

Binary file not shown.

Before

Width:  |  Height:  |  Size: 30 KiB

View File

@@ -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'));
}
}

Binary file not shown.

Before

Width:  |  Height:  |  Size: 30 KiB

View File

@@ -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'));
}
}

Binary file not shown.

Before

Width:  |  Height:  |  Size: 22 KiB

View File

@@ -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'));
}
}

Binary file not shown.

Before

Width:  |  Height:  |  Size: 27 KiB

View File

@@ -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'));
}
}

Binary file not shown.

Before

Width:  |  Height:  |  Size: 19 KiB

View File

@@ -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(){}
}

Binary file not shown.

Before

Width:  |  Height:  |  Size: 19 KiB

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

Binary file not shown.

Before

Width:  |  Height:  |  Size: 9.9 KiB