diff options
author | Matthew Wozniak <me@woz.blue> | 2024-11-10 22:40:14 -0500 |
---|---|---|
committer | Matthew Wozniak <me@woz.blue> | 2024-11-10 22:40:14 -0500 |
commit | de0cd8796d835061898edb3ea89d9a3c84df859f (patch) | |
tree | 14c4fa26c9a2ca3ad470d43aaf0f7fe0b68a6e57 /api.h | |
parent | 09c6eab77771198f63860aa0c612b324d5ea09d5 (diff) | |
download | rt-de0cd8796d835061898edb3ea89d9a3c84df859f.tar.gz rt-de0cd8796d835061898edb3ea89d9a3c84df859f.zip |
Small code changes; add ability to find audio functions and data.
Audio is weird. I've been working for a few days to figure out how to
correctly render the audio but in that time I've done some other minor
refactors so I figured I migth as well just push those. Audio should be
coming soon, but no promises.
Diffstat (limited to 'api.h')
-rw-r--r-- | api.h | 55 |
1 files changed, 55 insertions, 0 deletions
@@ -21,6 +21,7 @@ #define VENGINE_CLIENT_INTERFACE_VERSION "VEngineClient013" #define VENGINE_LAUNCHER_INTERFACE_VERSION "VENGINE_LAUNCHER_API_VERSION004" #define VENGINE_TOOL_INTERFACE_VERSION "VENGINETOOL003" +#define VENGINE_CVAR_INTERFACE_VERSION "VEngineCvar004" #include "intdef.h" #include "os.h" @@ -55,6 +56,34 @@ struct enginetools { } *vt; }; +struct cvar { + struct { + usize _pad[10]; + struct concommand * (*VIRTUAL find_command)(struct cvar *this, const char *name); + } *vt; +}; + +struct cmdbase { + void **vt; + struct cmdbase *next; + bool registered; + const char *name; + const char *helpstring; + int flags; +}; + +struct concommand { + struct cmdbase base; + void *callback; +}; + +struct audio_device { + struct { + usize _pad[22]; + void *transfer_samples; + } *vt; +}; + struct movieinfo { char name[256]; int curframe; @@ -132,6 +161,29 @@ struct demoplayer { } *vt; }; +/* EPIC HACK: + * Snd_WriteLinearBlastStereo16 is an inline asm function that starts with + * + * mov ebx,snd_p + * mov edi,snd_out + * mov ecx,snd_linear_count + * mov esi,snd_vol + * + * Luckily for us, these are all the things that we need!!!! + * So, we just use the instructions as a struct so we don't have to copy + * anything. It just works. + */ +struct soundstate { + u16 _mov_ebx; + int **snd_p; + u16 _mov_edi; + short **snd_out; + u16 _mov_ecx; + int *snd_linear_count; + u16 _mov_esi; + int *snd_vol; +} __attribute__((packed)); + #ifndef NO_EXTERNS extern struct engserver *engserver; extern struct engclient *engclient; @@ -141,10 +193,13 @@ extern struct demoplayer *demoplayer; extern struct videomode **videomode; extern struct movieinfo *movieinfo; extern void (*cbuf_addtext)(char *); +extern void (*snd_recordbuffer)(void); +extern struct soundstate *snd; #endif // initializes required engine apis. returns false on error. bool api_init(void); +bool api_find_snd_recordbuffer(void); #endif |