diff --git a/autogen/convert_structs.py b/autogen/convert_structs.py
index e2ae36c4..8f1fd3c1 100644
--- a/autogen/convert_structs.py
+++ b/autogen/convert_structs.py
@@ -10,7 +10,8 @@ in_files = [
'src/game/camera.h',
'src/game/characters.h',
'src/engine/surface_collision.h',
- 'src/pc/network/network_player.h'
+ 'src/pc/network/network_player.h',
+ 'src/pc/djui/djui_hud_utils.h'
]
smlua_cobject_autogen = 'src/pc/lua/smlua_cobject_autogen'
diff --git a/bin/segment2.c b/bin/segment2.c
index 0bf7bd4d..3877dab4 100644
--- a/bin/segment2.c
+++ b/bin/segment2.c
@@ -205,7 +205,7 @@ ALIGNED8 static const u8 texture_hud_char_multiply[] = {
#include "textures/segment2/segment2.05600.rgba16.inc.c"
};
-ALIGNED8 static const u8 texture_hud_char_coin[] = {
+ALIGNED8 const u8 texture_hud_char_coin[] = {
#include "textures/segment2/segment2.05800.rgba16.inc.c"
};
@@ -229,7 +229,7 @@ ALIGNED8 const u8 texture_hud_char_wario_head[] = {
#include "textures/segment2/custom_wario_head.rgba16.inc.c"
};
-ALIGNED8 static const u8 texture_hud_char_star[] = {
+ALIGNED8 const u8 texture_hud_char_star[] = {
#include "textures/segment2/segment2.05C00.rgba16.inc.c"
};
@@ -1801,23 +1801,23 @@ ALIGNED8 static const u8 texture_font_char_us_button_C_right[] = {
};
#endif
-ALIGNED8 static const u8 texture_hud_char_camera[] = {
+ALIGNED8 const u8 texture_hud_char_camera[] = {
#include "textures/segment2/segment2.07B50.rgba16.inc.c"
};
-ALIGNED8 static const u8 texture_hud_char_lakitu[] = {
+ALIGNED8 const u8 texture_hud_char_lakitu[] = {
#include "textures/segment2/segment2.07D50.rgba16.inc.c"
};
-ALIGNED8 static const u8 texture_hud_char_no_camera[] = {
+ALIGNED8 const u8 texture_hud_char_no_camera[] = {
#include "textures/segment2/segment2.07F50.rgba16.inc.c"
};
-ALIGNED8 static const u8 texture_hud_char_arrow_up[] = {
+ALIGNED8 const u8 texture_hud_char_arrow_up[] = {
#include "textures/segment2/segment2.08150.rgba16.inc.c"
};
-ALIGNED8 static const u8 texture_hud_char_arrow_down[] = {
+ALIGNED8 const u8 texture_hud_char_arrow_down[] = {
#include "textures/segment2/segment2.081D0.rgba16.inc.c"
};
diff --git a/docs/lua/globals.md b/docs/lua/globals.md
index 39dff2ae..5d29cc62 100644
--- a/docs/lua/globals.md
+++ b/docs/lua/globals.md
@@ -30,6 +30,13 @@ The `gCharacter[]` table is an array from `0` to `(CT_MAX - 1)` that contains a
+## [gTextures](#gTextures)
+The `gTextures` table contains references to textures. Listed in [GlobalTextures](structs.md#GlobalTextures).
+
+[:arrow_up_small:](#)
+
+
+
## [gGlobalSyncTable](#gGlobalSyncTable)
The `gGlobalSyncTable` is a table used for networking. Any field set inside of this table is automatically synchronized with all other clients. Do not use this table for player-specific variables, keep those in [gPlayerSyncTable](#gPlayerSyncTable). Player-specific variable will desynchronize within this table since it doesn't automatically translate `playerIndex`.
diff --git a/docs/lua/structs.md b/docs/lua/structs.md
index daf5ce1c..004212c4 100644
--- a/docs/lua/structs.md
+++ b/docs/lua/structs.md
@@ -13,6 +13,7 @@
- [CutsceneSplinePoint](#CutsceneSplinePoint)
- [CutsceneVariable](#CutsceneVariable)
- [FloorGeometry](#FloorGeometry)
+- [GlobalTextures](#GlobalTextures)
- [GraphNode](#GraphNode)
- [GraphNodeObject](#GraphNodeObject)
- [GraphNodeObject_sub](#GraphNodeObject_sub)
@@ -296,6 +297,22 @@
+## [GlobalTextures](#GlobalTextures)
+
+| Field | Type | Access |
+| ----- | ---- | ------ |
+| arrow_down | [TextureInfo](#TextureInfo) | read-only |
+| arrow_up | [TextureInfo](#TextureInfo) | read-only |
+| camera | [TextureInfo](#TextureInfo) | read-only |
+| coin | [TextureInfo](#TextureInfo) | read-only |
+| lakitu | [TextureInfo](#TextureInfo) | read-only |
+| no_camera | [TextureInfo](#TextureInfo) | read-only |
+| star | [TextureInfo](#TextureInfo) | read-only |
+
+[:arrow_up_small:](#)
+
+
+
## [GraphNode](#GraphNode)
| Field | Type | Access |
diff --git a/src/pc/djui/djui_hud_utils.c b/src/pc/djui/djui_hud_utils.c
index 3b1938d3..82127a22 100644
--- a/src/pc/djui/djui_hud_utils.c
+++ b/src/pc/djui/djui_hud_utils.c
@@ -15,6 +15,24 @@
static enum HudUtilsResolution sResolution = RESOLUTION_DJUI;
static enum DjuiFontType sFont = FONT_NORMAL;
+extern ALIGNED8 const u8 texture_hud_char_camera[];
+extern ALIGNED8 const u8 texture_hud_char_lakitu[];
+extern ALIGNED8 const u8 texture_hud_char_no_camera[];
+extern ALIGNED8 const u8 texture_hud_char_arrow_up[];
+extern ALIGNED8 const u8 texture_hud_char_arrow_down[];
+extern ALIGNED8 const u8 texture_hud_char_coin[];
+extern ALIGNED8 const u8 texture_hud_char_star[];
+
+struct GlobalTextures gGlobalTextures = {
+ .camera = { .texture = texture_hud_char_camera, .bitSize = 8, .width = 16, .height = 16 },
+ .lakitu = { .texture = texture_hud_char_lakitu, .bitSize = 8, .width = 16, .height = 16 },
+ .no_camera = { .texture = texture_hud_char_no_camera, .bitSize = 8, .width = 16, .height = 16 },
+ .arrow_up = { .texture = texture_hud_char_arrow_up, .bitSize = 8, .width = 8, .height = 8 },
+ .arrow_down = { .texture = texture_hud_char_arrow_down, .bitSize = 8, .width = 8, .height = 8 },
+ .coin = { .texture = texture_hud_char_coin, .bitSize = 8, .width = 16, .height = 16 },
+ .star = { .texture = texture_hud_char_star, .bitSize = 8, .width = 16, .height = 16 },
+};
+
static void djui_hud_position_translate(f32* x, f32* y) {
if (sResolution == RESOLUTION_DJUI) {
djui_gfx_position_translate(x, y);
@@ -141,3 +159,4 @@ static void djui_hud_render_texture_raw(const u8* texture, u32 bitSize, u32 widt
void djui_hud_render_texture(struct TextureInfo* texInfo, f32 x, f32 y, f32 scaleW, f32 scaleH) {
djui_hud_render_texture_raw(texInfo->texture, texInfo->bitSize, texInfo->width, texInfo->width, x, y, scaleW, scaleH);
}
+
diff --git a/src/pc/djui/djui_hud_utils.h b/src/pc/djui/djui_hud_utils.h
index ca534865..5a8f3f90 100644
--- a/src/pc/djui/djui_hud_utils.h
+++ b/src/pc/djui/djui_hud_utils.h
@@ -14,6 +14,18 @@ enum DjuiFontType {
FONT_COUNT,
};
+struct GlobalTextures {
+ struct TextureInfo camera;
+ struct TextureInfo lakitu;
+ struct TextureInfo no_camera;
+ struct TextureInfo arrow_up;
+ struct TextureInfo arrow_down;
+ struct TextureInfo coin;
+ struct TextureInfo star;
+};
+
+extern struct GlobalTextures gGlobalTextures;
+
void djui_hud_set_resolution(enum HudUtilsResolution resolutionType);
void djui_hud_set_font(enum DjuiFontType fontType);
void djui_hud_set_color(u8 r, u8 g, u8 b, u8 a);
diff --git a/src/pc/lua/smlua_cobject.c b/src/pc/lua/smlua_cobject.c
index f9e3198a..bd97f5a4 100644
--- a/src/pc/lua/smlua_cobject.c
+++ b/src/pc/lua/smlua_cobject.c
@@ -5,6 +5,7 @@
#include "game/mario.h"
#include "audio/external.h"
#include "object_fields.h"
+#include "pc/djui/djui_hud_utils.h"
#define LUA_VEC3S_FIELD_COUNT 3
static struct LuaObjectField sVec3sFields[LUA_VEC3S_FIELD_COUNT] = {
@@ -222,6 +223,11 @@ void smlua_cobject_init_globals(void) {
lua_setglobal(L, "gCharacters");
}
+ {
+ smlua_push_object(L, LOT_GLOBALTEXTURES, &gGlobalTextures);
+ lua_setglobal(L, "gTextures");
+ }
+
}
void smlua_bind_cobject(void) {
diff --git a/src/pc/lua/smlua_cobject_autogen.c b/src/pc/lua/smlua_cobject_autogen.c
index d47e9fec..e6af69eb 100644
--- a/src/pc/lua/smlua_cobject_autogen.c
+++ b/src/pc/lua/smlua_cobject_autogen.c
@@ -7,6 +7,7 @@
#include "src/game/characters.h"
#include "src/engine/surface_collision.h"
#include "src/pc/network/network_player.h"
+#include "src/pc/djui/djui_hud_utils.h"
#define LUA_ANIMATION_FIELD_COUNT 9
static struct LuaObjectField sAnimationFields[LUA_ANIMATION_FIELD_COUNT] = {
@@ -207,6 +208,17 @@ static struct LuaObjectField sFloorGeometryFields[LUA_FLOOR_GEOMETRY_FIELD_COUNT
// { "unused", LOT_???, offsetof(struct FloorGeometry, unused), false, LOT_??? }, <--- UNIMPLEMENTED
};
+#define LUA_GLOBAL_TEXTURES_FIELD_COUNT 7
+static struct LuaObjectField sGlobalTexturesFields[LUA_GLOBAL_TEXTURES_FIELD_COUNT] = {
+ { "arrow_down", LVT_COBJECT, offsetof(struct GlobalTextures, arrow_down), true, LOT_TEXTUREINFO },
+ { "arrow_up", LVT_COBJECT, offsetof(struct GlobalTextures, arrow_up), true, LOT_TEXTUREINFO },
+ { "camera", LVT_COBJECT, offsetof(struct GlobalTextures, camera), true, LOT_TEXTUREINFO },
+ { "coin", LVT_COBJECT, offsetof(struct GlobalTextures, coin), true, LOT_TEXTUREINFO },
+ { "lakitu", LVT_COBJECT, offsetof(struct GlobalTextures, lakitu), true, LOT_TEXTUREINFO },
+ { "no_camera", LVT_COBJECT, offsetof(struct GlobalTextures, no_camera), true, LOT_TEXTUREINFO },
+ { "star", LVT_COBJECT, offsetof(struct GlobalTextures, star), true, LOT_TEXTUREINFO },
+};
+
#define LUA_GRAPH_NODE_FIELD_COUNT 6
static struct LuaObjectField sGraphNodeFields[LUA_GRAPH_NODE_FIELD_COUNT] = {
{ "children", LVT_COBJECT_P, offsetof(struct GraphNode, children), true, LOT_GRAPHNODE },
@@ -683,6 +695,7 @@ struct LuaObjectTable sLuaObjectAutogenTable[LOT_AUTOGEN_MAX - LOT_AUTOGEN_MIN]
{ LOT_CUTSCENESPLINEPOINT, sCutsceneSplinePointFields, LUA_CUTSCENE_SPLINE_POINT_FIELD_COUNT },
{ LOT_CUTSCENEVARIABLE, sCutsceneVariableFields, LUA_CUTSCENE_VARIABLE_FIELD_COUNT },
{ LOT_FLOORGEOMETRY, sFloorGeometryFields, LUA_FLOOR_GEOMETRY_FIELD_COUNT },
+ { LOT_GLOBALTEXTURES, sGlobalTexturesFields, LUA_GLOBAL_TEXTURES_FIELD_COUNT },
{ LOT_GRAPHNODE, sGraphNodeFields, LUA_GRAPH_NODE_FIELD_COUNT },
{ LOT_GRAPHNODEOBJECT, sGraphNodeObjectFields, LUA_GRAPH_NODE_OBJECT_FIELD_COUNT },
{ LOT_GRAPHNODEOBJECT_SUB, sGraphNodeObject_subFields, LUA_GRAPH_NODE_OBJECT_SUB_FIELD_COUNT },
diff --git a/src/pc/lua/smlua_cobject_autogen.h b/src/pc/lua/smlua_cobject_autogen.h
index 19d38f79..d5b1e22e 100644
--- a/src/pc/lua/smlua_cobject_autogen.h
+++ b/src/pc/lua/smlua_cobject_autogen.h
@@ -17,6 +17,7 @@ enum LuaObjectAutogenType {
LOT_CUTSCENESPLINEPOINT,
LOT_CUTSCENEVARIABLE,
LOT_FLOORGEOMETRY,
+ LOT_GLOBALTEXTURES,
LOT_GRAPHNODE,
LOT_GRAPHNODEOBJECT,
LOT_GRAPHNODEOBJECT_SUB,