From 9544d15a1865f237bfe13ec6b9eb19daeaa550a4 Mon Sep 17 00:00:00 2001 From: Dominic Masters Date: Mon, 26 Jan 2026 08:48:17 -0600 Subject: [PATCH] Dynamically assign script values for items and inputs --- assets/init.lua | 60 ++++++++++++++------------------- src/input/input.c | 1 + src/item/item.h | 1 + src/script/module/moduleinput.h | 31 +++++++++++------ src/script/module/moduleitem.h | 9 ++++- 5 files changed, 55 insertions(+), 47 deletions(-) diff --git a/assets/init.lua b/assets/init.lua index 457140c..d05291c 100644 --- a/assets/init.lua +++ b/assets/init.lua @@ -1,51 +1,41 @@ module('platform') module('input') module('scene') -module('item') -- Default Input bindings. if PLATFORM == "psp" then - inputBind("up", "up") - inputBind("down", "down") - inputBind("left", "left") - inputBind("right", "right") - inputBind("circle", "cancel") - inputBind("cross", "accept") - inputBind("select", "ragequit") - inputBind("lstick_up", "up") - inputBind("lstick_down", "down") - inputBind("lstick_left", "left") - inputBind("lstick_right", "right") + inputBind("up", INPUT_ACTION_UP) + inputBind("down", INPUT_ACTION_DOWN) + inputBind("left", INPUT_ACTION_LEFT) + inputBind("right", INPUT_ACTION_RIGHT) + inputBind("circle", INPUT_ACTION_CANCEL) + inputBind("cross", INPUT_ACTION_ACCEPT) + inputBind("select", INPUT_ACTION_RAGEQUIT) + inputBind("lstick_up", INPUT_ACTION_UP) + inputBind("lstick_down", INPUT_ACTION_DOWN) + inputBind("lstick_left", INPUT_ACTION_LEFT) + inputBind("lstick_right", INPUT_ACTION_RIGHT) else if INPUT_KEYBOARD then - inputBind("w", "up") - inputBind("s", "down") - inputBind("a", "left") - inputBind("d", "right") + inputBind("w", INPUT_ACTION_UP) + inputBind("s", INPUT_ACTION_DOWN) + inputBind("a", INPUT_ACTION_LEFT) + inputBind("d", INPUT_ACTION_RIGHT) - inputBind("left", "left") - inputBind("right", "right") - inputBind("up", "up") - inputBind("down", "down") + inputBind("left", INPUT_ACTION_LEFT) + inputBind("right", INPUT_ACTION_RIGHT) + inputBind("up", INPUT_ACTION_UP) + inputBind("down", INPUT_ACTION_DOWN) - inputBind("enter", "accept") - inputBind("e", "accept" ) + inputBind("enter", INPUT_ACTION_ACCEPT) + inputBind("e", INPUT_ACTION_ACCEPT) + + inputBind("escape", INPUT_ACTION_CANCEL) + inputBind("q", INPUT_ACTION_CANCEL) - inputBind("escape", "cancel") - inputBind("q", "cancel") - - inputBind("z", "ragequit") + inputBind("z", INPUT_ACTION_RAGEQUIT) end end -print("Backpack:", BACKPACK) -print('Has Potion?', inventoryItemExists(BACKPACK, 1)) -inventoryAdd(BACKPACK, 1, 3) -print('Has Potion?', inventoryItemExists(BACKPACK, 1)) -inventoryRemove(BACKPACK, 1) -print('Has Potion?', inventoryItemExists(BACKPACK, 1)) -print('Potion Count:', inventoryGetCount(BACKPACK, 1)) -print('Is Backpack Full?', inventoryIsFull(BACKPACK)) - -- sceneSet('map') -- mapLoad('map/testmap/testmap.dmf') \ No newline at end of file diff --git a/src/input/input.c b/src/input/input.c index e2bdd7d..0073e13 100644 --- a/src/input/input.c +++ b/src/input/input.c @@ -149,6 +149,7 @@ void inputBind(const inputbutton_t button, const inputaction_t act) { act < INPUT_ACTION_COUNT, "Invalid input action" ); + assertTrue(act != INPUT_ACTION_NULL, "Cannot bind to NULL action"); // Get the button data for this button. inputbuttondata_t *data = INPUT_BUTTON_DATA; diff --git a/src/item/item.h b/src/item/item.h index f89de77..568c202 100644 --- a/src/item/item.h +++ b/src/item/item.h @@ -13,6 +13,7 @@ #include "item/itemtype.h" #include "item/itemid.h" +#include "item/itemname.h" typedef struct { itemtype_t type; diff --git a/src/script/module/moduleinput.h b/src/script/module/moduleinput.h index 4bd3e1f..051ebd5 100644 --- a/src/script/module/moduleinput.h +++ b/src/script/module/moduleinput.h @@ -18,13 +18,20 @@ int moduleInputBind(lua_State *L) { return 0; } - if(!lua_isstring(L, 2)) { - luaL_error(L, "inputBind: Expected action name as second argument"); + // Expect action ID + if(!lua_isinteger(L, 2)) { + luaL_error(L, "inputBind: Expected action ID as second argument"); return 0; } const char_t *strBtn = lua_tostring(L, 1); - const char_t *strAct = lua_tostring(L, 2); + const inputaction_t action = (inputaction_t)lua_tointeger(L, 2); + + // Validate action + if(action < INPUT_ACTION_NULL || action >= INPUT_ACTION_COUNT) { + luaL_error(L, "inputBind: Invalid action ID %d", (int)action); + return 0; + } // Get button by name inputbutton_t btn = inputButtonGetByName(strBtn); @@ -33,20 +40,22 @@ int moduleInputBind(lua_State *L) { return 0; } - // Get action by name - inputaction_t act = inputActionGetByName(strAct); - if(act == INPUT_ACTION_COUNT) { - printf("inputBind: Unknown action name '%s'\n", strAct); - return 0; - } - - inputBind(btn, act); + inputBind(btn, action); return 0; } void moduleInput(scriptcontext_t *context) { + char_t buffer[128]; assertNotNull(context, "Script context cannot be NULL"); + // Set input information + for(inputaction_t act = INPUT_ACTION_NULL + 1; act < INPUT_ACTION_COUNT; act++) { + const char_t *actName = INPUT_ACTION_NAMES[act]; + assertStrLenMax(actName, 64, "Input action name too long for buffer"); + snprintf(buffer, sizeof(buffer), "INPUT_ACTION_%s = %d\n", actName, act); + scriptContextExec(context, buffer); + } + // Input values. scriptContextExec(context, #if INPUT_KEYBOARD == 1 diff --git a/src/script/module/moduleitem.h b/src/script/module/moduleitem.h index 9c22234..53a477e 100644 --- a/src/script/module/moduleitem.h +++ b/src/script/module/moduleitem.h @@ -238,9 +238,16 @@ int moduleInventorySort(lua_State *L) { } void moduleItem(scriptcontext_t *context) { + char_t buffer[128]; assertNotNull(context, "Script context cannot be NULL"); - // Item information + // Set item information + for(itemid_t itemId = ITEM_ID_NULL + 1; itemId < ITEM_ID_COUNT; itemId++) { + const char_t *itemName = ITEM_NAMES[itemId]; + assertStrLenMax(itemName, 64, "Item name too long for buffer"); + snprintf(buffer, sizeof(buffer), "ITEM_ID_%s = %d\n", itemName, itemId); + scriptContextExec(context, buffer); + } // Bind BACKPACK const pointer scriptContextRegPointer(context, "BACKPACK", (void *)&BACKPACK);