summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorMichael Smith <mikesmiffy128@gmail.com>2023-05-02 19:16:22 +0100
committerMichael Smith <mikesmiffy128@gmail.com>2023-05-04 23:49:27 +0100
commit5194eeb0e7bb5d2a2086c96ed04c2a47f9594d87 (patch)
treea32ab5c832ae312cb8ddd9fb45dc3f894ac39820
parentbb5ce99e6cac43414a4bc61a636888e9f1f69b8c (diff)
Refactor the RGBA colour struct into engineapi.h
In both the engine and SST it's used in more places than just console printing, so it makes more sense to give it a more appropriate nanme and location.
-rw-r--r--src/build/codegen.c19
-rw-r--r--src/con_.c10
-rw-r--r--src/con_.h13
-rw-r--r--src/dbg.c7
-rw-r--r--src/engineapi.h12
-rw-r--r--src/portalcolours.c14
-rw-r--r--src/rinput.c12
-rw-r--r--src/sst.c8
8 files changed, 47 insertions, 48 deletions
diff --git a/src/build/codegen.c b/src/build/codegen.c
index 391f572..bf3ae1e 100644
--- a/src/build/codegen.c
+++ b/src/build/codegen.c
@@ -1,5 +1,5 @@
/*
- * Copyright © 2022 Michael Smith <mikesmiffy128@gmail.com>
+ * Copyright © 2023 Michael Smith <mikesmiffy128@gmail.com>
*
* Permission to use, copy, modify, and/or distribute this software for any
* purpose with or without fee is hereby granted, provided that the above
@@ -415,18 +415,17 @@ F( "static bool has_%s = false;", f->modname)
}
_( "")
_( "static void initfeatures(void) {")
- for (struct feature *f = features.x[0]; f; f = f->hdr.x[0]) {
- featdfs(out, f);
- }
+ for (struct feature *f = features.x[0]; f; f = f->hdr.x[0]) featdfs(out, f);
_( "")
// note: old success message is moved in here, to get the ordering right
-_( " con_colourmsg(RGBA(64, 255, 64, 255),")
+_( " con_colourmsg(&(struct rgba){64, 255, 64, 255},")
_( " LONGNAME \" v\" VERSION \" successfully loaded\");")
-_( " con_colourmsg(RGBA(255, 255, 255, 255), \" for game \");")
-_( " con_colourmsg(RGBA(0, 255, 255, 255), \"%s\\n\", gameinfo_title);")
-_( " struct con_colour white = {255, 255, 255, 255};")
-_( " struct con_colour green = {128, 255, 128, 255};")
-_( " struct con_colour red = {255, 128, 128, 255};")
+_( " con_colourmsg(&(struct rgba){255, 255, 255, 255}, \" for game \");")
+_( " con_colourmsg(&(struct rgba){0, 255, 255, 255}, \"%s\\n\", ")
+_( " gameinfo_title);")
+_( " struct rgba white = {255, 255, 255, 255};")
+_( " struct rgba green = {128, 255, 128, 255};")
+_( " struct rgba red = {255, 128, 128, 255};")
_( " con_colourmsg(&white, \"---- List of plugin features ---\\n\");");
for (const struct feature *f = features_bydesc.x[0]; f;
f = f->hdr_bydesc.x[0]) {
diff --git a/src/con_.c b/src/con_.c
index 1f6dec5..a80a2d4 100644
--- a/src/con_.c
+++ b/src/con_.c
@@ -21,7 +21,7 @@
#include "abi.h"
#include "con_.h"
-#include "engineapi.h" // only for factories - XXX: do we care this is circular?
+#include "engineapi.h" // for factories and rgba - XXX: is this a bit circular?
#include "extmalloc.h"
#include "gametype.h"
#include "mem.h"
@@ -46,7 +46,7 @@ int con_cmdclient;
// these have to be extern because of varargs nonsense - they get wrapped in a
// macro for the actual api (con_colourmsg)
void *_con_iface;
-void (*_con_colourmsgf)(void *this, const struct con_colour *c, const char *fmt,
+void (*_con_colourmsgf)(void *this, const struct rgba *c, const char *fmt,
...) _CON_PRINTF(3, 4);
// bootstrap hackery, see "GENIUS HACK" comment below :)
@@ -67,7 +67,7 @@ DECL_VFUNC_DYN(void, CallGlobalChangeCallbacks, struct con_var *, const char *,
// can't pass varargs to other varargs of course). we only get a pointer to it
// via VFUNC so just declare the typedef here - I don't wanna write any more
// macros today.
-typedef void (*ConsoleColorPrintf_func)(void *, const struct con_colour *,
+typedef void (*ConsoleColorPrintf_func)(void *, const struct rgba *,
const char *, ...);
static inline void initval(struct con_var *v) {
@@ -229,7 +229,7 @@ static void VCALLCONV InternalSetIntValue_impl(struct con_var *this, int v) {
DECL_VFUNC_DYN(void, InternalSetValue, const char *)
DECL_VFUNC_DYN(void, InternalSetFloatValue, float)
DECL_VFUNC_DYN(void, InternalSetIntValue, int)
-DECL_VFUNC_DYN(void, InternalSetColorValue, struct con_colour)
+DECL_VFUNC_DYN(void, InternalSetColorValue, struct rgba)
// Hack: IConVar things get this-adjusted pointers, we just reverse the offset
// to get the top pointer.
@@ -248,7 +248,7 @@ static void VCALLCONV SetValue_i_thunk(void *thisoff, int v) {
-offsetof(struct con_var, vtable_iconvar));
InternalSetIntValue(&this->parent->base, v);
}
-static void VCALLCONV SetValue_colour_thunk(void *thisoff, struct con_colour v) {
+static void VCALLCONV SetValue_colour_thunk(void *thisoff, struct rgba v) {
struct con_var *this = mem_offset(thisoff,
-offsetof(struct con_var, vtable_iconvar));
InternalSetColorValue(&this->parent->base, v);
diff --git a/src/con_.h b/src/con_.h
index a6b2837..6d67e51 100644
--- a/src/con_.h
+++ b/src/con_.h
@@ -38,15 +38,6 @@ struct con_cmdargs {
const char *argv[CON_CMD_MAX_ARGC];
};
-/* an RGBA colour, passed to con_colourmsg */
-struct con_colour {
- union {
- struct { u8 r, g, b, a; };
- u32 val;
- uchar bytes[4];
- };
-};
-
#define CON_CMD_MAXCOMPLETE 64
#define CON_CMD_MAXCOMPLLEN 64
@@ -196,8 +187,10 @@ void con_warn(const char *fmt, ...) _CON_PRINTF(1, 2) __asm__("Warning");
#error Need an equivalent of asm names for your compiler!
#endif
+struct rgba; // in engineapi.h - forward declare here to avoid warnings
+
extern void *_con_iface;
-extern void (*_con_colourmsgf)(void *this, const struct con_colour *c,
+extern void (*_con_colourmsgf)(void *this, const struct rgba *c,
const char *fmt, ...) _CON_PRINTF(3, 4);
/*
* This provides the same functionality as ConColorMsg which was removed from
diff --git a/src/dbg.c b/src/dbg.c
index 06b88f8..2eb88f6 100644
--- a/src/dbg.c
+++ b/src/dbg.c
@@ -1,5 +1,5 @@
/*
- * Copyright © 2022 Michael Smith <mikesmiffy128@gmail.com>
+ * Copyright © 2023 Michael Smith <mikesmiffy128@gmail.com>
*
* Permission to use, copy, modify, and/or distribute this software for any
* purpose with or without fee is hereby granted, provided that the above
@@ -19,12 +19,13 @@
#endif
#include "con_.h"
+#include "engineapi.h"
#include "intdefs.h"
#include "ppmagic.h"
#include "udis86.h"
void dbg_hexdump(char *name, const void *p, int len) {
- struct con_colour nice_colour = {160, 64, 200, 255}; // a nice purple colour
+ struct rgba nice_colour = {160, 64, 200, 255}; // a nice purple colour
con_colourmsg(&nice_colour, "Hex dump \"%s\" (%p):", name, p);
for (const uchar *cp = p; cp - (uchar *)p < len; ++cp) {
// group into words and wrap every 8 words
@@ -38,7 +39,7 @@ void dbg_hexdump(char *name, const void *p, int len) {
}
void dbg_asmdump(char *name, const void *p, int len) {
- struct con_colour nice_colour = {40, 160, 140, 255}; // a nice teal colour
+ struct rgba nice_colour = {40, 160, 140, 255}; // a nice teal colour
struct ud udis;
ud_init(&udis);
ud_set_mode(&udis, 32);
diff --git a/src/engineapi.h b/src/engineapi.h
index 05f47ea..d740c8c 100644
--- a/src/engineapi.h
+++ b/src/engineapi.h
@@ -1,5 +1,5 @@
/*
- * Copyright © 2022 Michael Smith <mikesmiffy128@gmail.com>
+ * Copyright © 2023 Michael Smith <mikesmiffy128@gmail.com>
*
* Permission to use, copy, modify, and/or distribute this software for any
* purpose with or without fee is hereby granted, provided that the above
@@ -70,6 +70,16 @@ struct edict {
};
struct vec3f { float x, y, z; };
+
+/* an RGBA colour, used for colour console messages as well as VGUI/HUD stuff */
+struct rgba {
+ union {
+ struct { u8 r, g, b, a; };
+ u32 val;
+ uchar bytes[4];
+ };
+};
+
struct CMoveData {
bool firstrun : 1, gamecodemoved : 1;
ulong playerhandle;
diff --git a/src/portalcolours.c b/src/portalcolours.c
index 2231da4..48e4ee0 100644
--- a/src/portalcolours.c
+++ b/src/portalcolours.c
@@ -1,5 +1,5 @@
/*
- * Copyright © 2022 Michael Smith <mikesmiffy128@gmail.com>
+ * Copyright © 2023 Michael Smith <mikesmiffy128@gmail.com>
*
* Permission to use, copy, modify, and/or distribute this software for any
* purpose with or without fee is hereby granted, provided that the above
@@ -40,9 +40,7 @@ DEF_CVAR(sst_portal_colour1, "Crosshair colour for left portal (hex)",
"40A0FF", CON_ARCHIVE | CON_HIDDEN)
DEF_CVAR(sst_portal_colour2, "Crosshair colour for right portal (hex)",
"FFA020", CON_ARCHIVE | CON_HIDDEN)
-// XXX: bit weird that this is still con_colour. should we move it back out to
-// engineapi as a general colour struct??
-static struct con_colour colours[3] = {
+static struct rgba colours[3] = {
{242, 202, 167, 255}, {64, 160, 255, 255}, {255, 160, 32, 255}};
static void hexparse(uchar out[static 4], const char *s) {
@@ -89,11 +87,11 @@ static void colourcb(struct con_var *v) {
}
// Original sig is the following but we wanna avoid calling convention weirdness
-//typedef struct con_colour (*UTIL_Portal_Color_func)(int);
-typedef void (*UTIL_Portal_Color_func)(struct con_colour *out, int portal);
+//typedef struct rgba (*UTIL_Portal_Color_func)(int);
+typedef void (*UTIL_Portal_Color_func)(struct rgba *out, int portal);
static UTIL_Portal_Color_func orig_UTIL_Portal_Color;
-static void hook_UTIL_Portal_Color(struct con_colour *out, int portal) {
- if (portal < 0 || portal > 2) *out = (struct con_colour){255, 255, 255, 255};
+static void hook_UTIL_Portal_Color(struct rgba *out, int portal) {
+ if (portal < 0 || portal > 2) *out = (struct rgba){255, 255, 255, 255};
else *out = colours[portal];
}
diff --git a/src/rinput.c b/src/rinput.c
index e24fc1c..53c16e3 100644
--- a/src/rinput.c
+++ b/src/rinput.c
@@ -1,5 +1,5 @@
/*
- * Copyright © 2022 Michael Smith <mikesmiffy128@gmail.com>
+ * Copyright © 2023 Michael Smith <mikesmiffy128@gmail.com>
*
* Permission to use, copy, modify, and/or distribute this software for any
* purpose with or without fee is hereby granted, provided that the above
@@ -22,11 +22,11 @@
#include <Windows.h>
#include "con_.h"
-#include "gamedata.h"
-#include "hook.h"
#include "engineapi.h"
#include "errmsg.h"
#include "feature.h"
+#include "gamedata.h"
+#include "hook.h"
#include "intdefs.h"
#include "mem.h"
#include "vcall.h"
@@ -149,9 +149,9 @@ INIT {
.lpszClassName = L"RInput"
};
if (!RegisterClassExW(&wc)) {
- struct con_colour gold = {255, 210, 0, 255};
- struct con_colour blue = {45, 190, 190, 255};
- struct con_colour white = {200, 200, 200, 255};
+ struct rgba gold = {255, 210, 0, 255};
+ struct rgba blue = {45, 190, 190, 255};
+ struct rgba white = {200, 200, 200, 255};
con_colourmsg(&gold, "SST PROTIP! ");
con_colourmsg(&blue, "It appears you're using RInput.exe.\n"
"Consider launching without that and using ");
diff --git a/src/sst.c b/src/sst.c
index 788a81d..93c194a 100644
--- a/src/sst.c
+++ b/src/sst.c
@@ -1,5 +1,5 @@
/*
- * Copyright © 2022 Michael Smith <mikesmiffy128@gmail.com>
+ * Copyright © 2023 Michael Smith <mikesmiffy128@gmail.com>
*
* Permission to use, copy, modify, and/or distribute this software for any
* purpose with or without fee is hereby granted, provided that the above
@@ -179,8 +179,6 @@ static const void *const *const plugin_obj;
static bool already_loaded = false, skip_unload = false;
-#define RGBA(r, g, b, a) (&(struct con_colour){(r), (g), (b), (a)})
-
// auto-update message. see below in do_featureinit()
static const char *updatenotes = "\
* various internal cleanup\n\
@@ -201,8 +199,8 @@ static void do_featureinit(void) {
#else
unsetenv("SST_UPDATED");
#endif
- struct con_colour gold = {255, 210, 0, 255};
- struct con_colour white = {255, 255, 255, 255};
+ struct rgba gold = {255, 210, 0, 255};
+ struct rgba white = {255, 255, 255, 255};
con_colourmsg(&white, "\n" NAME " was just ");
con_colourmsg(&gold, "UPDATED");
con_colourmsg(&white, " to version ");