idk
Some checks failed
Build Dusk / run-tests (push) Successful in 1m57s
Build Dusk / build-linux (push) Successful in 2m9s
Build Dusk / build-psp (push) Failing after 1m39s

This commit is contained in:
2026-01-26 22:54:05 -06:00
parent d1b03c4cb3
commit 81b08b2eba
19 changed files with 179 additions and 276 deletions

View File

@@ -8,12 +8,75 @@ parser.add_argument("--csv", required=True, help="Path to item CSV file")
parser.add_argument("--output", required=True, help="Path to output .h file")
args = parser.parse_args()
def csvIdToEnumName(itemId):
return "ITEM_ID_" + itemId.upper()
# Load up CSV file.
outHeader = "#pragma once\n"
outHeader += "#include \"item/item.h\"\n\n"
outHeader += '#include "dusk.h"\n\n'
itemIds = []
itemTypes = []
itemRowById = {}
with open(args.csv, newline="", encoding="utf-8") as csvfile:
reader = csv.DictReader(csvfile)
# CSV must have id and type columns.
if "id" not in reader.fieldnames or "type" not in reader.fieldnames:
raise Exception("CSV file must have 'id' and 'type' columns")
raise Exception("CSV file must have 'id' and 'type' columns")
for row in reader:
itemId = row["id"]
itemType = row["type"]
if itemId not in itemIds:
itemIds.append(itemId)
if itemType not in itemTypes:
itemTypes.append(itemType)
itemRowById[itemId] = row
# Now Prep output
outHeader = "#pragma once\n"
outHeader += '#include "dusk.h"\n\n'
# Create enum for types and ids, include null and count.
outHeader += "typedef enum {\n"
outHeader += " ITEM_TYPE_NULL = 0,\n"
for itemType in itemTypes:
outHeader += f" {csvIdToEnumName(itemType)},\n"
outHeader += f" ITEM_TYPE_COUNT\n"
outHeader += "} itemtype_t;\n\n"
outHeader += "typedef enum {\n"
outHeader += " ITEM_ID_NULL = 0,\n"
for itemId in itemIds:
outHeader += f" {csvIdToEnumName(itemId)},\n"
outHeader += f" ITEM_ID_COUNT\n"
outHeader += "} itemid_t;\n\n"
# Create struct for item data.
outHeader += "typedef struct {\n"
outHeader += " itemid_t id;\n"
outHeader += " itemtype_t type;\n"
outHeader += " const char_t *name;\n"
outHeader += "} item_t;\n\n"
# Create array of item data.
outHeader += f"static const item_t ITEMS[] = {{\n"
for itemId in itemIds:
outHeader += f" [{csvIdToEnumName(itemId)}] = {{\n"
outHeader += f" .id = {csvIdToEnumName(itemId)},\n"
itemType = itemRowById[itemId]["type"]
outHeader += f" .type = {csvIdToEnumName(itemType)},\n"
itemName = itemRowById[itemId]["id"]
outHeader += f" .name = \"{itemName}\",\n"
outHeader += f" }},\n"
outHeader += f"}};\n\n"
# Write to output file.
os.makedirs(os.path.dirname(args.output), exist_ok=True)
with open(args.output, "w", encoding="utf-8") as outFile:
outFile.write(outHeader)