0
0
mirror of https://github.com/marcrobledo/savegame-editors.git synced 2025-04-24 16:35:10 +00:00

Added competition and walking counter

This commit is contained in:
magiczocker10 2024-10-27 18:19:53 +01:00 committed by GitHub
parent 762a325fbe
commit f422f09506
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
3 changed files with 84 additions and 13 deletions

View File

@ -36,7 +36,17 @@
<div class="columns c6"><label class="update-name" for="input-petX-personality">Personality</label></div>
<div class="columns c6"><input class="update-name" id="input-petX-personality" type="text" class="fw" style="width:90%;" readonly/></div>
<div class="columns c8"><label class="update-name" for="number-petX-level">Level</label></div>
<div class="columns c4"><input class="update-name fw text-right" id="number-petX-level" type="text" /></div>
<div class="columns c4"><input class="update-name fw text-right" id="number-petX-level" type="text" /></div>
<div class="row container update-name" id="petX_comp_outer" style="width:100%;padding-left:0;padding-right:0">
<h3 class="orange" style="width:100%;">Times played (max 2 per day)</h3>
<div class="columns c8"><label class="update-name" for="number-petX-disc-played">Disc Competition</label></div>
<div class="update-name columns c4" data-global="1" data-var="PETX_COMP_DISC_PLAYED", data-size="8"><input class="update-name fw text-right" id="number-petX-disc-played" type="text" /></div>
<div class="columns c8"><label class="update-name" for="number-petX-lure-played">Lure Coursing</label></div>
<div class="update-name columns c4" data-global="1" data-var="PETX_COMP_LURE_PLAYED", data-size="8"><input class="update-name fw text-right" id="number-petX-lure-played" type="text" /></div>
<div class="columns c8"><label class="update-name" for="number-petX-obedience-played">Obedience Trial</label></div>
<div class="update-name columns c4" data-global="1" data-var="PETX_COMP_OBED_PLAYED", data-size="8"><input class="update-name fw text-right" id="number-petX-obed-played" type="text" /></div>
</div>
</div>
</div>
</template>
@ -275,6 +285,10 @@
<div class="columns c8"><label for="number-streetpass-met">People Met</label></div>
<div class="columns c4"><input id="number-streetpass-met" type="text" class="fw text-right" /></div>
</div>
<div class="row" id="row-walking-counter">
<div class="columns c7"><label for="input-walking-counter">Walking Counter</label></div>
<div class="columns c4"><input id="number-walking-counter" type="text" class="fw text-right" /></div>
</div>
</div>
<h3 class="orange">Pets</h3>
<div id="pet_tabs"></div>

View File

@ -11,6 +11,12 @@
height: 50px;
display: inline-table;
text-align: center;
transition: background-color .15s;
}
#pet_tabs input:not(:checked) + label:hover {
background: #6e7177;
cursor: pointer;
}
.pet_label .sprite {

View File

@ -60,10 +60,29 @@ SavegameEditor={
PET_BREED_STYLE_OFFSET: 0x34, // 52 = Hairstyle
PET_BREED_EYE_COLOR_OFFSET: 0x35, // 53 = Eye Color (Cats: 0=gray, 1=yellow, 2=blue; Dogs: 255)
PET_BREED_COLOR_OFFSET: 0x36, // 54 = Fur Color
PET1_COMP_DISC_PLAYED: 0x24E,
PET1_COMP_OBED_PLAYED: 0x24F,
PET1_COMP_LURE_PLAYED: 0x250,
PET2_COMP_DISC_PLAYED: 0x251,
PET2_COMP_OBED_PLAYED: 0x252,
PET2_COMP_LURE_PLAYED: 0x253,
PET3_COMP_DISC_PLAYED: 0x254,
PET3_COMP_OBED_PLAYED: 0x255,
PET3_COMP_LURE_PLAYED: 0x256,
PET4_COMP_DISC_PLAYED: 0x257,
PET4_COMP_OBED_PLAYED: 0x258,
PET4_COMP_LURE_PLAYED: 0x259,
PET5_COMP_DISC_PLAYED: 0x25A,
PET5_COMP_OBED_PLAYED: 0x25B,
PET5_COMP_LURE_PLAYED: 0x25C,
PET6_COMP_DISC_PLAYED: 0x25D,
PET6_COMP_OBED_PLAYED: 0x25E,
PET6_COMP_LURE_PLAYED: 0x25F,
PET_PERSONALITIES_OFFSET_DOG1: 0x1F6,
PET_PERSONALITIES_OFFSET_DOG2: 0x1FA,
PET_PERSONALITIES_OFFSET_CAT1: 0x1EE,
PET_PERSONALITIES_OFFSET_CAT2: 0x1F2,
WALKING_COUNTER_OFFSET: 0x215
},
_write_money:function(){
@ -84,6 +103,12 @@ SavegameEditor={
getValue('pedometer')
);
},
_write_walking_counter:function(){
tempFile.writeU8(
SavegameEditor.Constants.WALKING_COUNTER_OFFSET,
getValue('walking-counter')
);
},
_write_supply_amount:function(e){
tempFile.writeU8(
Number(e.target.dataset.offset),
@ -101,16 +126,20 @@ SavegameEditor={
document.getElementsByClassName('pet' + index + '_name')[0].innerText = getValue(e.target.id);
},
_write_u_number:function(e, n, o){
_write_u_number:function(e, n, o, g){
var index = Number((e.target.id).match(reg)[0]);
var offset = SavegameEditor.Constants.PET_OFFSET[index-1]+SavegameEditor.Constants[o];
var pet_offset = SavegameEditor.Constants.PET_OFFSET[index-1];
if (g) {
pet_offset = 0;
}
var offset = pet_offset+SavegameEditor.Constants[o];
tempFile['writeU' + n](
offset,
Number(getValue(e.target.id))
);
},
_write_pet_value:function(e){
SavegameEditor._write_u_number(e, Number(e.target.parentElement.dataset.size), e.target.parentElement.dataset.var);
SavegameEditor._write_u_number(e, Number(e.target.parentElement.dataset.size), e.target.parentElement.dataset.var, e.target.parentElement.dataset.global);
},
_getPetData(petOffset, value, size) {
return tempFile['readU' + (size || 8)](SavegameEditor.Constants.PET_OFFSET[petOffset]+SavegameEditor.Constants[value]);
@ -192,16 +221,19 @@ SavegameEditor={
setValue('pedometer', tempFile.readU32(SavegameEditor.Constants.PEDOMETER_OFFSET));
setNumericRange('pedometer', 0, 9999999);
setValue('walking-counter', tempFile.readU8(SavegameEditor.Constants.WALKING_COUNTER_OFFSET));
setNumericRange('walking-counter', 0, 255);
setNumericRange('owner-points', 0, 99999);
var points = tempFile.readU32(SavegameEditor.Constants.OWNER_POINTS_OFFSET);
for (var j = 0; j < level_borders.length; j++) {
if (points >= level_borders[j][0] && points <= level_borders[j][1]) {
setValue('owner-points', j);
var owner_points = tempFile.readU32(SavegameEditor.Constants.OWNER_POINTS_OFFSET);
for (var k = 0; k < level_borders.length; k++) {
if (owner_points >= level_borders[k][0] && owner_points <= level_borders[k][1]) {
setValue('owner-points', k);
break;
}
}
var level_ele = get('number-owner-points');
level_ele.addEventListener('change', SavegameEditor._mark_as_changed);
var level_ele_ = get('number-owner-points');
level_ele_.addEventListener('change', SavegameEditor._mark_as_changed);
var a = new Date (Number(tempFile.readU32(SavegameEditor.Constants.LASTSAVED_OFFSET)) * 1000);
setValue('lastsaved', a.toLocaleString("en-GB", {
@ -218,6 +250,7 @@ SavegameEditor={
pet_tabs.innerText = '';
var pet_tabs_content_seperator = document.createElement('div');
pet_tabs.appendChild(pet_tabs_content_seperator);
var first_pet = true;
for (var i=1; i<7; i++){
var pet_present = tempFile.readU8(SavegameEditor.Constants.PET_OFFSET[i-1]) > 0;
if (!pet_present) {continue;}
@ -225,7 +258,10 @@ SavegameEditor={
pet_tab_input.name = 'pet_tabgroup';
pet_tab_input.type = 'radio';
pet_tab_input.id = 'pet_tab' + i;
pet_tab_input.checked = i === 1;
if (first_pet) {
pet_tab_input.checked = true;
first_pet = false;
}
pet_tab_input.className = 'pet_tab';
pet_tabs.insertBefore(pet_tab_input, pet_tabs_content_seperator);
var pet_tab_label = document.createElement('label');
@ -238,9 +274,13 @@ SavegameEditor={
for (var ele of templateClone.querySelectorAll('.update-name')) {
if ((ele.id || '').includes('petX')) {
ele.id = ele.id.replaceAll('petX', 'pet' + i);
} else if (ele.getAttribute('for')) {
}
if (ele.getAttribute('for')) {
ele.setAttribute('for', ele.getAttribute('for').replaceAll('petX', 'pet' + i));
}
if ((ele.dataset && ele.dataset.var || '').includes('PETX')) {
ele.dataset.var = ele.dataset.var.replaceAll('PETX', 'PET' + i);
}
}
var breed = SavegameEditor._getPetData(i-1, 'PET_BREED_OFFSET');
var isDog = true;
@ -308,6 +348,17 @@ SavegameEditor={
pet_tab_label.appendChild(pet_tab_label_name);
setValue('pet' + i + '-gender', SavegameEditor._getPetData(i-1, 'PET_GENDER_OFFSET'));
get('input-pet' + i + '-name').addEventListener('change', SavegameEditor._write_pet_name);
setNumericRange('pet' + i + '-disc-played', 0, 2);
setValue('pet' + i + '-disc-played', tempFile.readU8(SavegameEditor.Constants['PET' + i + '_COMP_DISC_PLAYED']));
get('number-pet' + i + '-disc-played').addEventListener('change', SavegameEditor._write_pet_value);
setNumericRange('pet' + i + '-lure-played', 0, 2);
setValue('pet' + i + '-lure-played', tempFile.readU8(SavegameEditor.Constants['PET' + i + '_COMP_LURE_PLAYED']));
get('number-pet' + i + '-lure-played').addEventListener('change', SavegameEditor._write_pet_value);
setNumericRange('pet' + i + '-obed-played', 0, 2);
setValue('pet' + i + '-obed-played', tempFile.readU8(SavegameEditor.Constants['PET' + i + '_COMP_OBED_PLAYED']));
get('number-pet' + i + '-obed-played').addEventListener('change', SavegameEditor._write_pet_value);
var personality = window.personalities[SavegameEditor._getPetData(i-1, 'PET_PERSONALITIES_OFFSET_' + (isDog ? 'DOG' : 'CAT') + '1', 8)][SavegameEditor._getPetData(i-1, 'PET_PERSONALITIES_OFFSET_' + (isDog ? 'DOG' : 'CAT') + '2', 8)];
setValue('pet' + i + '-personality', personality[Number(SavegameEditor._getPetData(i-1, 'PET_GENDER_OFFSET'))]);
@ -323,7 +374,7 @@ SavegameEditor={
level_ele.dataset.is_dog = isDog;
level_ele.addEventListener('change', SavegameEditor._mark_as_changed);
}
pet_tabs.removeChild(pet_tabs_content_seperator)
pet_tabs.removeChild(pet_tabs_content_seperator);
},
/* save function */