←3DSのHBL用アプリ開発 トップへ

ROMに埋め込まれたファイルを開く

romfs内のファイルを読み込みます。

最終更新:2017/10/27




はじめに


市販ゲームソフトのROMにはすべてと言っていいほど何かしらのファイルが埋め込まれています。
一般的には、フォント、音声、テクスチャ、画像、メッセージなどが入っています。
これを必要な時にロードします。
ファイル名は日本語でもかまいませんが、一般的にASCII文字のみが使われます。
※3DSRomHackの「RomFSExtractor」で抽出できます。

romfsの準備


romfsの中に入れておきたいものは、Makefileがあるディレクトリに「romfs」フォルダを作成してその中に入れます。
romfsフォルダの中にもフォルダを入れてかまいません。
romfsの構造の例)
romfs
├Message
│└1.txt
└img
 └img.png

romfsを開く


romfsInit関数で初期化をし、終了時にromfsExit関数で閉じます。
romfs内へのファイルのアクセス方法は、fopen関数などでromfs:/で始まるファイルパスを指定します。

上のツリーの 1.txt を開く例)
FILE* f = fopen(path, "romfs:/Message/1.txt");

注意:romfsは読み取り専用です。

サンプル


Message/1.txt に記録したメッセージを上画面に表示します。
#include <3ds.h>
#include <string.h>
#include <stdio.h>
#include <unistd.h>

int main() {
    gfxInitDefault();
    consoleInit(GFX_TOP, NULL);
    
    Result rc = romfsInit(); //romfsを初期化
    if (rc) //初期化できなかった
        return 1;
    
    char stringBuf[0x200]; //1.txtの1行分をここに格納する
    
    FILE* hFile = fopen("romfs:/Message/1.txt", "r"); //1.txtを開く
    if (hFile) {
        while (fgets(stringBuf, sizeof(stringBuf), hFile)) //1行分を読み取り
            printf("%s",stringBuf); //1行分を出力
        printf("[EOF]\n");
        fclose(hFile);
    }
    
    //メインループ
    while (aptMainLoop()) {
        hidScanInput();
        unsigned int key = hidKeysDown();
        if (key & KEY_START) break;
        gspWaitForVBlank();
    }
    
    romfsExit(); //romfsを閉じる
    gfxExit();
    return 0;
}




[前へ] [次へ(作成中)]

(C)2017 InoueSoftware / 無断転載禁止