        function openTab(event, tabId) {
            // すべてのタブの内容を非表示にする
            document.querySelectorAll('.tab-content').forEach(tab => {
                tab.classList.remove('active');
            });

            // すべてのタブボタンの "active" クラスを削除
            document.querySelectorAll('.tab-button').forEach(button => {
                button.classList.remove('active');
            });

            // 選択されたタブの内容を表示
            document.getElementById(tabId).classList.add('active');

            // クリックされたボタンをアクティブにする
            event.currentTarget.classList.add('active');
        }


        // キャッツアイの変更処理
function changeCatsEye() {
    let value = prompt("設定したい数値を入力してください");

    if (value === null || isNaN(value)) {
        alert("無効な入力です。");
        return;
    }

    value = parseInt(value, 10);

    // 1つ飛ばしで6個の値をユーザーが指定した値に設定
    for (let i = 0; i < 6; i++) {
        h5gg.setValue(catsEyeOffset + (i * 8), value, "I32");
    }

    // その次の6個の値を0に設定
    for (let i = 0; i < 6; i++) {
        h5gg.setValue(catsEyeOffset + (i * 8) + 4, 0, "I32");
    }

    alert("キャッツアイの数を " + value + " に設定しました");
}

        function changeEnemyBase() {
            let input = prompt("敵城の数値を入力または固定と入力してください");

            if (input === "固定") {
                // 固定入力時の動作
                setInterval(() => {
                    h5gg.setValue(enemyBase, 0, "I32");  // 0にリセット
                    console.log("敵城がリセットされました");
                }, 500);  // 0.5秒おきにリセット
            } else {
                let value = Number(input);
                if (!isNaN(value)) {
                    h5gg.setValue(enemyBase, value, "I32");
                    alert("敵城を変更しました");
                } else {
                    alert("有効な数値を入力してください");
                }
            }
        }

        function changeValue(name, addr) {
            let value = Number(prompt(name + "の数値を入力してください"));
            if (!isNaN(value)) {
                h5gg.setValue(addr, value, "I32");
                h5gg.setValue(addr + 4, 0, "I32");  // 隣接アドレスを0にする
                alert(name + "を変更しました");
            } else {
                alert("有効な数値を入力してください");
            }
        }

let isGachaSkipRunning = false; 
let intervalId = null; 

function startGachaSkip() {
    if (!isGachaSkipRunning) {

        intervalId = setInterval(function() {
            let currentValue = h5gg.getValue(gachaSkipOffset, "I32");
            h5gg.setValue(gachaSkipOffset, 0, "I32"); 
        }, 100); // 0.1秒おきに実行

        isGachaSkipRunning = true; 
        alert("ガチャスキップを開始しました"); 
    } else {
              clearInterval(intervalId); 

        isGachaSkipRunning = false; 
        alert("ガチャスキップを停止しました"); 
    }
}

let isSinkaSkipRunning = false; 
let sinkaIntervalId = null; 

function startSinkaSkip() {
    if (!isSinkaSkipRunning) {
        
        sinkaIntervalId = setInterval(function() {
            let currentValue = h5gg.getValue(startSinkaoffset, "I32");
            h5gg.setValue(startSinkaoffset, 0, "I32");
        }, 100); 

        isSinkaSkipRunning = true; // フラグを実行中に設定
        alert("進化スキップを開始しました"); 
    } else {
      
        clearInterval(sinkaIntervalId); 
        isSinkaSkipRunning = false; 
        alert("進化スキップを停止しました"); 
    }
}

function nekobitan() {

    let value = prompt("設定したい数値を入力してください");

    if (value === null || isNaN(value)) {
        alert("無効な入力です。");
        return;
    }


    value = parseInt(value, 10);


    for (let i = 0; i < 3; i++) {
        h5gg.setValue(nekobitanAddr + (i * 8), value, "I32");
    }

    for (let i = 0; i < 3; i++) {
        h5gg.setValue(nekobitanAddr + (i * 8) + 4, 0, "I32");
    }

    alert("ネコビタンの数を " + value + " に設定しました");
}

        function matt() {
            var value = prompt("数値を入力してください");

            // 入力値が空の場合、アラートを表示
            if (!value) {
                alert("数値が入力されていません！");
                return;
            }

            // h5ggをクリア
            window.parent.h5gg.clearResults();

            // 検索条件を設定
            window.parent.h5gg.searchNumber('28', 'I32', '0x280000000', '0x360000000');
            window.parent.h5gg.searchNearby('27', 'I32', '0x8');
            window.parent.h5gg.searchNearby('26', 'I32', '0x16');
            window.parent.h5gg.searchNearby('25', 'I32', '0x24');
            window.parent.h5gg.searchNumber('28', 'I32', '0x280000000', '0x360000000');

            // 結果取得
            var count = window.parent.h5gg.getResultsCount();
            var results = window.parent.h5gg.getResults(count);
            var updatedCount = 0;

            for (var i = 0; i < count; i++) {
                var addr1 = results[i].address;
                var shuzhi1 = window.parent.h5gg.getValue((Number(addr1) - 8), "I32");
                var shuzhi2 = window.parent.h5gg.getValue((Number(addr1) - 16), "I32");
                var shuzhi3 = window.parent.h5gg.getValue((Number(addr1) - 24), "I32");
                var shuzhi4 = window.parent.h5gg.getValue((Number(addr1) - 32), "I32");
                
                var dizhi1 = (Number(addr1) - 220);
                if (shuzhi1 == 27 && shuzhi2 == 26 && shuzhi3 == 25 && shuzhi4 == 24) { 
                    for (let j = 0; j < 30; j++) {
                        window.parent.h5gg.setValue(dizhi1 + (j * 8), value, "I32");
                        updatedCount++;
                    }
                }
            }

            // 結果を表示
            if (updatedCount > 0) {
                alert("完了: " + updatedCount + "個のアドレスを変更しました");
            } else {
                alert("条件に一致するアドレスは見つかりませんでした");
            }

            // 検索結果をクリア
            window.parent.h5gg.clearResults();
        }

let isSaiseisanRunning = false; 
let saiseisanIntervalId = null; 

function saiseisan() {
    if (!isSaiseisanRunning) {

        saiseisanIntervalId = setInterval(function() {
            let currentValue = h5gg.getValue(saiseisanOffset, "I32");
            h5gg.setValue(saiseisanOffset, 1, "I32"); 
        }, 100); 

        isSaiseisanRunning = true; 
        alert("再生産時間の設定を開始しました"); 
    } else {
        
        clearInterval(saiseisanIntervalId); 
        isSaiseisanRunning = false; 
        alert("再生産時間の設定を停止しました"); 
    }
}

function unlockAllCharacters() {
    // 最初のオフセットの値を取得
    let firstValue = h5gg.getValue(characterUnlockOffset, "I32"); // 基準値を取得
    if (isNaN(firstValue)) {
        alert("オフセットの取得に失敗しました");
        return;
    }

    // 780個の数値をその取得した値に設定
    for (let i = 0; i < 787; i++) {
        h5gg.setValue(characterUnlockOffset + (i * 4), firstValue, "I32"); // 基準値で設定
    }

    alert("全キャラを解放しました");
}

        // 全ステージ開放
        function unlockStages() {
            let startOffset = stageUnlockOffset;
            for (let i = 0; i < 10; i++) {
                h5gg.setValue(startOffset + (i * 4), 0, "I32");
            }
            h5gg.setValue(startOffset + 40, 48, "I32"); // 48に設定
            alert("全ステージを解放しました");
        }

        // レベル一括上げ
        function levelUpAllCharacters() {
            let startOffset = levelUpOffset;
            for (let i = 0; i < 1574; i++) {
                h5gg.setValue(startOffset + (i * 4), 999, "I32");
            }
            alert("全キャラのレベルを一括で999にしました");
        }

        function changeCharacterForms() {
            for (let i = 0; i < 787; i++) {
                h5gg.setValue(charOffset + (i * 4), 2, "I32");
            }
            alert("キャラを第3形態に変更しました");
        }

    function changeClearCount() {
        let clearValue = Number(prompt("設定したいクリア回数を入力してください"));

        if (isNaN(clearValue) || clearValue <= 0) {
            alert("無効な数値です。操作を中断します。");
            return;
        }

        let currentOffset = clearCountOffset;

        for (let repeat = 0; repeat < 10; repeat++) { // 10回繰り返し
            // 48個の数値を設定
            for (let i = 0; i < 48; i++) {
                h5gg.setValue(currentOffset + (i * 4), clearValue, "I32");
            }

            // 48個目の数値から3つ空けた下の数値を0に設定
            let zeroOffset = currentOffset + (48 * 4) + (3 * 4); // 48個分+3つ分
            h5gg.setValue(zeroOffset, 0, "I32");

            // 次の処理用にオフセットを更新
            currentOffset = zeroOffset + 4; // 次のオフセット開始地点（4バイト分進む）
        }

        alert("クリア回数を " + clearValue + " に設定しました");
    }

function koukoku() {
    let value = 999999; // 設定する値
    h5gg.setValue(koukokuAddr, value, "I32");
    h5gg.setValue(koukokuAddr + 4, 0, "I32");
    alert("広告削除が成功しました");
}

function itemBatchChange() {
    let value = Number(prompt("変更する値を入力してください"));
    if (!isNaN(value)) {
        for (let i = 0; i < 6; i++) {
            let currentOffset = itemBatchOffset + (i * 8);
            h5gg.setValue(currentOffset, value, "I32"); // 数値を変更
            // 変更された数値のすぐ下のオフセットに0を設定
            h5gg.setValue(currentOffset + 4, 0, "I32"); // 次の6個の数値を0に設定
        }
        alert("アイテムを一括変更しました");
    } else {
        alert("有効な数値を入力してください");
    }
}

function changeCastleMaterial() {
       let currentOffset = castleMaterialOffset;

    let value = prompt("設定したい数値を入力してください");

    if (value === null || isNaN(value)) {
        alert("無効な入力です。");
        return;
    }

    value = parseInt(value, 10);

    for (let i = 0; i < 8; i++) {
        h5gg.setValue(currentOffset + (i * 8), value, "I32");
    }

    for (let i = 0; i < 8; i++) {
        h5gg.setValue(currentOffset + (i * 8) + 4, 0, "I32");
    }

    alert("城素材の数を " + value + " に設定しました");
}


function changeLeadership() {
    // ユーザーに値を入力してもらう
    const value = prompt("変更する値を入力してください:");

    // 入力が無効（キャンセルや空）だった場合は終了
    if (value === null || value.trim() === "") {
        alert("値が入力されていません。処理を中断します。");
        return;
    }

    let count = 0; // 値を変更した数をカウント

        const TargetOffset = baseOffset

    for (let i = 0; i < 9; i++) {
        const targetOffset = baseOffset + (4 * 4) + (i * 8); // 4個下の位置から1個飛ばしで計算
        const skippedOffset = targetOffset + 4; // 飛ばした位置の計算
        const SkippedOffset = TargetOffset + 4 // 飛ばした数値

        // ターゲット位置にユーザーが指定した値を設定
        
h5gg.setValue(TargetOffset, Number(value), "I32");

h5gg.setValue(targetOffset, Number(value), "I32");
        count++;

        // 飛ばした位置に0を設定
        
h5gg.setValue(SkippedOffset, 0, "I32");

h5gg.setValue(skippedOffset, 0, "I32");
        count++;
    }

    // 完了メッセージを表示
    alert(`変更が完了しました: ${count}個のアドレスを変更しました`);
}


function changeTreasures() {
    let currentOffset = treasureOffset; // 初期オフセット

    // ユーザーにお宝の状態を入力させる
    let input = prompt("お宝の状態を入力してください（無し=0, 銅=1, 銀=2, 金=3）");
    let value = parseInt(input);

    // 無効な値の場合は処理を終了
    if (![0, 1, 2, 3].includes(value)) {
        alert("無効な値です。もう一度入力してください。");
        return;
    }

    for (let repeat = 0; repeat < 10; repeat++) { // 10回繰り返し
        // 48個の数値を指定された値に設定
        for (let i = 0; i < 48; i++) {
            h5gg.setValue(currentOffset + (i * 4), value, "I32");
        }

        // 48個分の次の2個の数値を0に設定
        let zeroOffset1 = currentOffset + (48 * 4); // 48個分進んだ位置
        let zeroOffset2 = zeroOffset1 + 4;          // 次の1つ分の位置

        h5gg.setValue(zeroOffset1, 0, "I32");
        h5gg.setValue(zeroOffset2, 0, "I32");

        // 次の処理用にオフセットを更新
        currentOffset = zeroOffset2 + 4; // 次のオフセット開始地点（2つ分進む）
    }

    alert("お宝を変更しました");
}

    function multiplyAndChangeValue(name, addr) {
        let value = Number(prompt(name + "の数値を入力してください"));
        if (!isNaN(value)) {
            // 入力された数値に108000を掛ける
            let newValue = value * 108000;
            h5gg.setValue(addr, newValue, "I32");
            h5gg.setValue(addr + 4, 0, "I32");  // 隣接アドレスを0にする
            alert(name + "を変更しました");
        } else {
            alert("有効な数値を入力してください");
        }
    }

    function modifyGlassCat() {
        h5gg.setValue(glassCatOffset, 0, "I32"); // オフセットの数値を0
        h5gg.setValue(glassCatOffset - 4, 180, "I32"); // 1つ上の数値を180
        h5gg.setValue(glassCatOffset - 8, 0, "I32"); // 2つ上の数値を0
        h5gg.setValue(glassCatOffset - 12, 1800000, "I32"); // 3つ上の数値を1800000

h5gg.setValue(glassCatOffset - 16, 800, "I32"); // 4つ上の数値を800
        h5gg.setValue(glassCatOffset + 4, 0, "I32"); // 1つ下の数値を0
        h5gg.setValue(glassCatOffset + 16, 1, "I32"); // 4つ下の数値を1
        h5gg.setValue(glassCatOffset + 24, 1, "I32"); // オフセットから6個目を1

        // 10個目から90個目の間で31個目から70個目をスキップ
        for (let i = 10; i <= 90; i++) {
            if (i >= 31 && i <= 70) {
                continue; // 31個目から70個目をスキップ
            }
            h5gg.setValue(glassCatOffset + i * 4, 1, "I32");
        }

h5gg.setValue(glassCatOffset + 320, 1, "I32"); // 80個目
            h5gg.setValue(glassCatOffset + 324, 200, "I32"); // 81個目
            h5gg.setValue(glassCatOffset + 328, 200, "I32"); // 82個目
            h5gg.setValue(glassCatOffset + 332, 10, "I32"); // 83個目

            // 18個目から22個目までの数値を100に設定
            for (let i = 18; i <= 22; i++) {
                h5gg.setValue(glassCatOffset + i * 4, 100, "I32");
            }

            // 25個目の数値を100に設定
            h5gg.setValue(glassCatOffset + 25 * 4, 100, "I32");

            // 31個目から36個目までの数値を100に設定
            for (let i = 31; i <= 36; i++) {
                h5gg.setValue(glassCatOffset + i * 4, 100, "I32");
            }

            // 64個目、76個目、86個目など、指定された位置に100を設定
            h5gg.setValue(glassCatOffset + 64 * 4, 100, "I32"); // 64個目
            for (let i = 76; i <= 80; i++) {
                h5gg.setValue(glassCatOffset + i * 4, 100, "I32"); // 76個目から79個目
            }
            h5gg.setValue(glassCatOffset + 86 * 4, 100, "I32"); // 86個目
            h5gg.setValue(glassCatOffset + 87 * 4, 100, "I32"); // 87個目
            h5gg.setValue(glassCatOffset + 89 * 4, 100, "I32"); // 89個目


        alert("ガラス猫を改造しました");
    }