/* * Copyright © 2024 Matthew Wozniak * * Permission to use, copy, modify, and/or distribute this software for any * purpose with or without fee is hereby granted, provided that the above * copyright notice and this permission notice appear in all copies. * * THE SOFTWARE IS PROVIDED “AS IS” AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH * REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY * AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, * INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM * LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR * OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR * PERFORMANCE OF THIS SOFTWARE. */ #ifndef ENGINEAPI_H #define ENGINEAPI_H #define VENGINE_SERVER_INTERFACE_VERSION "VEngineServer021" #define VENGINE_CLIENT_INTERFACE_VERSION "VEngineClient013" #define VENGINE_LAUNCHER_INTERFACE_VERSION "VENGINE_LAUNCHER_API_VERSION004" #define VENGINE_TOOL_INTERFACE_VERSION "VENGINETOOL003" #include "intdef.h" typedef void * (*createinterface_func)(const char *name, int *ret); struct engserver { struct { usize _pad[36]; void (*__thiscall server_command)(struct engserver *this, const char *str); } *vt; }; struct engclient { struct { usize _pad[75]; void (*__thiscall is_playing_demo)(struct engclient *this); } *vt; }; struct engineapi { struct { usize _pad[7]; void *set_engine_window; } *vt; }; struct enginetools { struct { usize _pad[64]; void *is_recording_movie; } *vt; }; struct movieinfo { char name[256]; int curframe; int type; int jpeg_quality; }; struct videomode { struct { usize _pad[22]; void (*__thiscall write_movie_frame)(struct videomode *this, struct movieinfo *info); } *vt; }; struct demoplayer { struct { void *_destructor; void * (*__thiscall get_demo_file)(struct demoplayer *this); int (*__thiscall get_playback_tick)(struct demoplayer *this); int (*__thiscall get_total_ticks)(struct demoplayer *this); void *_whatisthisihavenoidea; // TODO bool (*__thiscall start_playback)(struct demoplayer *this, const char *filename, bool as_time_demo); bool (*__thiscall is_playing_back)(struct demoplayer *this); bool (*__thiscall is_playback_paused)(struct demoplayer *this); bool (*__thiscall is_playing_time_demo)(struct demoplayer *this); bool (*__thiscall is_skipping)(struct demoplayer *this); bool (*__thiscall can_skip_backwards)(struct demoplayer *this); void (*__thiscall set_playback_time_scale)(struct demoplayer *this, float timescale); float (*__thiscall get_playback_time_scale)(struct demoplayer *this); void (*__thiscall pause_playback)(struct demoplayer *this, float seconds); void (*__thiscall skip_to_tick)(struct demoplayer *this, int tick, bool relative, bool pause); void (*__thiscall resume_playback)(struct demoplayer *this); void (*__thiscall stop_playback)(struct demoplayer *this); void (*__thiscall interpolate_viewpoint)(struct demoplayer *this); } *vt; }; #ifndef NO_EXTERNS extern struct engserver *engserver; extern struct engclient *engclient; extern struct engineapi *engineapi; extern struct enginetools *enginetools; extern struct demoplayer *demoplayer; extern struct videomode **videomode; extern struct movieinfo *movieinfo; extern void (*cbuf_addtext)(char *); #endif // initializes required engine apis. returns false on error. bool api_init(void); #endif // vi: sw=4 ts=4 noet tw=80 cc=80