KV

v0.0.5·Updated 2025-05-21

A simple KV Store for N64Recomp projects

About this mod Author’s original text

KV

A simple KV Store for N64Recomp projects

Usage

Note, this interface may change in the future, or I may provide additional shorthands for getting/setting primitive datatypes

Add the dependency in your mod.toml

dependencies = [

"ProxyMM_KV:0.0.5"

]

Add the header to your project

ifndef PROXYMM_KV_H

define PROXYMM_KV_H

include "modding.h"

include "global.h"

// Global

RECOMP_IMPORT("ProxyMM_KV", bool KV_Global_Get(const char key, void dest, u32 size));

RECOMP_IMPORT("ProxyMM_KV", u32 KV_Global_Get_U32(const char* key, u32 defaultValue));

RECOMP_IMPORT("ProxyMM_KV", s32 KV_Global_Get_S32(const char* key, s32 defaultValue));

RECOMP_IMPORT("ProxyMM_KV", bool KV_Global_Set(const char key, void data, u32 size));

RECOMP_IMPORT("ProxyMM_KV", bool KV_Global_Set_U8(const char* key, u8 value));

RECOMP_IMPORT("ProxyMM_KV", bool KV_Global_Set_S8(const char* key, s8 value));

RECOMP_IMPORT("ProxyMM_KV", bool KV_Global_Set_U16(const char* key, u16 value));

RECOMP_IMPORT("ProxyMM_KV", bool KV_Global_Set_S16(const char* key, s16 value));

RECOMP_IMPORT("ProxyMM_KV", bool KV_Global_Set_U32(const char* key, u32 value));

RECOMP_IMPORT("ProxyMM_KV", bool KV_Global_Set_S32(const char* key, s32 value));

RECOMP_IMPORT("ProxyMM_KV", bool KV_Global_Has(const char* key));

RECOMP_IMPORT("ProxyMM_KV", bool KV_Global_Remove(const char* key));

// Save Slot based

RECOMP_IMPORT("ProxyMM_KV", bool KV_Slot_Get(const char key, void dest, u32 size));

RECOMP_IMPORT("ProxyMM_KV", u32 KV_Slot_Get_U32(const char* key, u32 defaultValue));

RECOMP_IMPORT("ProxyMM_KV", s32 KV_Slot_Get_S32(const char* key, s32 defaultValue));

RECOMP_IMPORT("ProxyMM_KV", bool KV_Slot_Set(const char key, void data, u32 size));

RECOMP_IMPORT("ProxyMM_KV", bool KV_Slot_Set_U8(const char* key, u8 value));

RECOMP_IMPORT("ProxyMM_KV", bool KV_Slot_Set_S8(const char* key, s8 value));

RECOMP_IMPORT("ProxyMM_KV", bool KV_Slot_Set_U16(const char* key, u16 value));

RECOMP_IMPORT("ProxyMM_KV", bool KV_Slot_Set_S16(const char* key, s16 value));

RECOMP_IMPORT("ProxyMM_KV", bool KV_Slot_Set_U32(const char* key, u32 value));

RECOMP_IMPORT("ProxyMM_KV", bool KV_Slot_Set_S32(const char* key, s32 value));

RECOMP_IMPORT("ProxyMM_KV", bool KV_Slot_Has(const char* key));

RECOMP_IMPORT("ProxyMM_KV", bool KV_Slot_Remove(const char* key));

endif // PROXYMM_KV_H

Start Getting/Setting values

u32 myValue = 4941;

KV_Slot_Set_U32("MyMod.MyValue", myValue);

u32 otherValue = KV_Slot_Get_U32("MyMod.MyValue", 1337);

assert(myValue == otherValue);

Getting complex values

struct MyStruct {

u32 a;

u32 b;

};

MyStruct myStruct = { 1, 2 };

KV_Slot_Set("MyMod.MyStruct", &myStruct, sizeof(MyStruct));

MyStruct otherStruct;

// Get returns truthy if the value was retrieved

if (KV_Slot_Get("MyMod.MyStruct", &otherStruct, sizeof(MyStruct))) {

assert(myStruct.a == otherStruct.a);

assert(myStruct.b == otherStruct.b);

}

Install & use Install: follow the bundled instructions

  1. Unzip the archive from playbuff and read the bundled readme / instructions first.
  2. Most mods rely on the game's mod loader — the usual route is a community mod manager (such as r2modman): pick this game, install, and it handles the loader and dependencies.
  3. For a manual install, put the mod files into the matching Mod / plugins folder inside the game directory.
  4. Launch the game to confirm it loaded; mods with listed dependencies need those installed as well.

Install locations vary a lot between mods — the bundled readme is the most reliable guide.

File & checksum

Filename
KV-0.0.5.zip
File size
9.4 MiB