diff --git a/engine/joint/v4k.h b/engine/joint/v4k.h
index caed168..2c5cd71 100644
--- a/engine/joint/v4k.h
+++ b/engine/joint/v4k.h
@@ -14028,7 +14028,7 @@ extern "C" {
//-----------------------------------------------------------------------------
// Headers
-#line 1 "v4k_config.h"
+#line 1 "engine/split/v4k_config.h"
// -----------------------------------------------------------------------------
// config directives
@@ -14060,6 +14060,10 @@ extern "C" {
#define ENABLE_TESTS 0 // ifdef(debug, 1, 0) ///+
#endif
+#ifndef ENABLE_RETAIL
+#define ENABLE_RETAIL 0
+#endif
+
// -----------------------------------------------------------------------------
// if/n/def hell
@@ -14362,7 +14366,7 @@ typedef char bool;
#endif
#line 0
-#line 1 "v4k_ds.h"
+#line 1 "engine/split/v4k_ds.h"
// data structures and utils: array, set, map, hash, sort.
// - rlyeh, public domain
@@ -14826,7 +14830,7 @@ enum {
#line 0
-#line 1 "v4k_math.h"
+#line 1 "engine/split/v4k_math.h"
// -----------------------------------------------------------------------------
// math framework: rand, ease, vec2, vec3, vec4, quat, mat2, mat33, mat34, mat4
// - rlyeh, public domain
@@ -15186,7 +15190,7 @@ API void swapf4(vec4 *a, vec4 *b);
#line 0
-#line 1 "v4k_ai.h"
+#line 1 "engine/split/v4k_ai.h"
typedef enum SWARM_DISTANCE {
SWARM_DISTANCE_LINEAR,
SWARM_DISTANCE_INVERSE_LINEAR,
@@ -15239,7 +15243,7 @@ API int ui_swarm(swarm_t *self);
API int pathfind_astar(int width, int height, const unsigned* map, vec2i src, vec2i dst, vec2i* path, size_t maxpath);
#line 0
-#line 1 "v4k_bt.h"
+#line 1 "engine/split/v4k_bt.h"
// Behavior trees: decision planning and decision making.
// Supersedes finite state-machines (FSM) and hierarchical finite state-machines (HFSM).
// - rlyeh, public domain.
@@ -15265,7 +15269,7 @@ API char *bt_funcname(bt_func fn);
API int ui_bt(bt_t *b);
#line 0
-#line 1 "v4k_audio.h"
+#line 1 "engine/split/v4k_audio.h"
// -----------------------------------------------------------------------------
// audio framework
// - rlyeh, public domain
@@ -15326,7 +15330,7 @@ enum AUDIO_FLAGS {
API int audio_queue( const void *samples, int num_samples, int flags );
#line 0
-#line 1 "v4k_buffer.h"
+#line 1 "engine/split/v4k_buffer.h"
// ----------------------------------------------------------------------------
// compression api
@@ -15424,7 +15428,7 @@ API uint64_t crc64(uint64_t h, const void *ptr, uint64_t len);
API void entropy( void *buf, unsigned n );
#line 0
-#line 1 "v4k_collide.h"
+#line 1 "engine/split/v4k_collide.h"
// -----------------------------------------------------------------------------
// original code by @vurtun (PD) and @barerose (CC0).
// [src] https://gist.github.com/vurtun/95f088e4889da2474ad1ce82d7911fee
@@ -15585,7 +15589,7 @@ API poly diamond(vec3 from, vec3 to, float size); // poly_free() required
API void collide_demo(); // debug draw collisions
#line 0
-#line 1 "v4k_cooker.h"
+#line 1 "engine/split/v4k_cooker.h"
// -----------------------------------------------------------------------------
// asset pipeline framework
// - rlyeh, public domain.
@@ -15620,7 +15624,7 @@ API int cook_progress(); // [0..100]
#line 0
-#line 1 "v4k_data.h"
+#line 1 "engine/split/v4k_data.h"
// -----------------------------------------------------------------------------
// data framework (json5, xml, compression) @todo:kvdb
// - rlyeh, public domain
@@ -15659,7 +15663,7 @@ API void xml_pop();
API bool data_tests();
#line 0
-#line 1 "v4k_dll.h"
+#line 1 "engine/split/v4k_dll.h"
// dll utils
// - rlyeh, public domain
@@ -15674,7 +15678,7 @@ API bool data_tests();
API void* dll(const char *filename, const char *symbol);
#line 0
-#line 1 "v4k_editor.h"
+#line 1 "engine/split/v4k_editor.h"
// -----------------------------------------------------------------------------
// in-game editor
// - rlyeh, public domain.
@@ -15719,7 +15723,7 @@ API char* kit_translate2( const char *id, const char *langcode_iso639_1 ); // pe
API void kit_dump_state( FILE *fp );
#line 0
-#line 1 "v4k_file.h"
+#line 1 "engine/split/v4k_file.h"
// -----------------------------------------------------------------------------
// files, cache and virtual filesystem (registered directories and/or compressed zip archives).
// - rlyeh, public domain.
@@ -15819,7 +15823,7 @@ API void ini_destroy(ini_t);
API bool ini_write(const char *filename, const char *section, const char *key, const char *value);
#line 0
-#line 1 "v4k_font.h"
+#line 1 "engine/split/v4k_font.h"
// -----------------------------------------------------------------------------
// font framework
// - rlyeh, public domain
@@ -15911,7 +15915,7 @@ API void* font_colorize(const char *text, const char *comma_types, const char *c
API vec2 font_highlight(const char *text, const void *colors);
#line 0
-#line 1 "v4k_id.h"
+#line 1 "engine/split/v4k_id.h"
// -----------------------------------------------------------------------------
// factory of handle ids, based on code by randy gaul (PD/Zlib licensed)
// - rlyeh, public domain
@@ -15940,7 +15944,7 @@ bool id_valid(uintptr_t id);
#define ID_DATA_BITS (64-ID_COUNT_BITS)
#line 0
-#line 1 "v4k_pack.h"
+#line 1 "engine/split/v4k_pack.h"
// ----------------------------------------------------------------------------
// endianness
@@ -16131,7 +16135,7 @@ API int loadf(FILE *file, const char *format, ...);
API int loadb(const unsigned char *buf, const char *format, ...);
#line 0
-#line 1 "v4k_input.h"
+#line 1 "engine/split/v4k_input.h"
// -----------------------------------------------------------------------------
// input framework
// - rlyeh, public domain
@@ -16251,7 +16255,7 @@ enum INPUT_ENUMS {
};
#line 0
-#line 1 "v4k_memory.h"
+#line 1 "engine/split/v4k_memory.h"
// -----------------------------------------------------------------------------
// memory framework
// - rlyeh, public domain
@@ -16291,7 +16295,7 @@ static FORCE_INLINE void *(CALLOC_)(size_t m, size_t n) { return n *= m, memset(
static FORCE_INLINE char *(STRDUP_)(const char *s) { size_t n = strlen(s)+1; return ((char*)memcpy(REALLOC(0,n), s, n)); } ///-
#line 0
-#line 1 "v4k_network.h"
+#line 1 "engine/split/v4k_network.h"
// -----------------------------------------------------------------------------
// network framework
// - rlyeh, public domain
@@ -16343,7 +16347,7 @@ API int tcp_debug(int); // toggle traffic monitoring on/off for given socket
//API int tcp_crypt(int,uint64_t); // set shared secret
#line 0
-#line 1 "v4k_netsync.h"
+#line 1 "engine/split/v4k_netsync.h"
// high-level, socket-less networking api. inspired by Quake, MPI and RenderBuckets theories.
// - rlyeh, public domain
//
@@ -16429,7 +16433,7 @@ API int64_t client_join(const char *ip, int port);
#define LOCALHOST_IPV6 "::1"
#line 0
-#line 1 "v4k_obj.h"
+#line 1 "engine/split/v4k_obj.h"
// -----------------------------------------------------------------------------
// semantic versioning in a single byte (octal)
// - rlyeh, public domain.
@@ -16489,7 +16493,7 @@ typedef struct double4 { double x,y,z,w; } double4;
#define double4(x,y,z,w) M_CAST(double4, (double)(x), (double)(y), (double)(z), (double)(w) )
#line 0
-#line 1 "v4k_profile.h"
+#line 1 "engine/split/v4k_profile.h"
// -----------------------------------------------------------------------------
// profiler & stats (@fixme: threadsafe)
@@ -16521,7 +16525,7 @@ extern API int profiler_enabled; ///-
#endif
#line 0
-#line 1 "v4k_reflect.h"
+#line 1 "engine/split/v4k_reflect.h"
// C reflection: enums, functions, structs, members and anotations.
// - rlyeh, public domain
//
@@ -16583,7 +16587,7 @@ API void reflected_printf(reflected_t *r);
API void reflected_printf_all();
#line 0
-#line 1 "v4k_render.h"
+#line 1 "engine/split/v4k_render.h"
// -----------------------------------------------------------------------------
// naive rendering framework
// - rlyeh, public domain
@@ -17285,7 +17289,7 @@ API void* screenshot(int components); // 3 RGB, 4 RGBA, -3 BGR, -4 BGRA
API void* screenshot_async(int components); // 3 RGB, 4 RGBA, -3 BGR, -4 BGRA
#line 0
-#line 1 "v4k_renderdd.h"
+#line 1 "engine/split/v4k_renderdd.h"
// -----------------------------------------------------------------------------
// debugdraw framework
// - rlyeh, public domain.
@@ -17352,7 +17356,7 @@ API void ddraw_flush();
API void ddraw_flush_projview(mat44 proj, mat44 view);
#line 0
-#line 1 "v4k_scene.h"
+#line 1 "engine/split/v4k_scene.h"
// -----------------------------------------------------------------------------
// scene framework
// - rlyeh, public domain
@@ -17489,7 +17493,7 @@ API unsigned scene_count_light();
API light_t* scene_index_light(unsigned index);
#line 0
-#line 1 "v4k_script.h"
+#line 1 "engine/split/v4k_script.h"
// -----------------------------------------------------------------------------
// script framework
// - rlyeh, public domain
@@ -17505,7 +17509,7 @@ API void script_call(const char *lua_function);
API bool script_tests();
#line 0
-#line 1 "v4k_string.h"
+#line 1 "engine/split/v4k_string.h"
// string framework
// - rlyeh, public domain
@@ -17599,7 +17603,7 @@ unsigned quark_intern( quarks_db*, const char *string );
const char *quark_string( quarks_db*, unsigned key );
#line 0
-#line 1 "v4k_time.h"
+#line 1 "engine/split/v4k_time.h"
// -----------------------------------------------------------------------------
// time framework utils
// - rlyeh, public domain.
@@ -17646,7 +17650,7 @@ AUTORUN {
*/
#line 0
-#line 1 "v4k_system.h"
+#line 1 "engine/split/v4k_system.h"
// -----------------------------------------------------------------------------
// system framework utils
// - rlyeh, public domain.
@@ -17727,7 +17731,7 @@ API int (test)(const char *file, int line, const char *expr, bool result);
#line 0
-#line 1 "v4k_ui.h"
+#line 1 "engine/split/v4k_ui.h"
// -----------------------------------------------------------------------------
// immediate ui framework
// - rlyeh, public domain
@@ -17817,7 +17821,7 @@ API int ui_active(); // ui_is_active()?
API int ui_demo(int do_windows);
#line 0
-#line 1 "v4k_video.h"
+#line 1 "engine/split/v4k_video.h"
// -----------------------------------------------------------------------------
// video decoder (mpeg)
// - rlyeh, public domain
@@ -17860,7 +17864,7 @@ API bool record_active();
API void record_stop(void);
#line 0
-#line 1 "v4k_window.h"
+#line 1 "engine/split/v4k_window.h"
// -----------------------------------------------------------------------------
// window framework
// - rlyeh, public domain
@@ -17993,7 +17997,7 @@ API void window_cursor_shape(unsigned shape);
#define GLAD_GL_IMPLEMENTATION // glad
#endif
-#line 1 "3rd_glad.h"
+#line 1 "engine/split/3rd_glad.h"
#ifndef __EMSCRIPTEN__
#ifndef _GNU_SOURCE // juicy linux headers
@@ -29675,7 +29679,7 @@ int gladLoadGL( GLADloadfunc load) {
#endif /* __EMSCRIPTEN__ */
#line 0
-#line 1 "3rd_icon_md.h"
+#line 1 "engine/split/3rd_icon_md.h"
// Generated by https://github.com/juliettef/IconFontCppHeaders script GenerateIconFontCppHeaders.py for languages C and C++
// from https://github.com/google/material-design-icons/raw/master/font/MaterialIcons-Regular.codepoints
// for use with https://github.com/google/material-design-icons/blob/master/font/MaterialIcons-Regular.ttf
@@ -32017,7 +32021,7 @@ errno_t fopen_s(
//---
-#line 1 "3rd_glfw3.h"
+#line 1 "engine/split/3rd_glfw3.h"
#ifndef __EMSCRIPTEN__
// forked from https://github.com/SasLuca/glfw-single-header (CC0-1.0 licensed)
@@ -71214,7 +71218,7 @@ uint32_t _glfwKeySym2Unicode(unsigned int keysym)
#line 0
#undef timeGetTime
//---
-#line 1 "3rd_swrap.h"
+#line 1 "engine/split/3rd_swrap.h"
// https://github.com/BareRose/swrap/blob/master/swrap.h
/*
@@ -71507,7 +71511,7 @@ SWDEF int swrapMultiSelect (int* socks, size_t socks_size, double timeout) {
#endif //SWRAP_H
#line 0
//---
-#line 1 "3rd_jo_mp1.h"
+#line 1 "engine/split/3rd_jo_mp1.h"
/* public domain Simple, Minimalistic MPEG Layer 1 decoder - http://jonolick.com
*
* Revision History:
@@ -71918,7 +71922,7 @@ bool jo_read_mp1(const void *input, int inputSize, short **output_, int *outputS
#line 0
#define get_bits stb_vorbis_get_bits
#define error stb_vorbis_error
-#line 1 "3rd_stb_vorbis.h"
+#line 1 "engine/split/3rd_stb_vorbis.h"
// Ogg Vorbis audio decoder - v1.19 - public domain
// http://nothings.org/stb_vorbis/
//
@@ -77479,7 +77483,7 @@ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
#line 0
#undef error
#undef DEBUG
-#line 1 "3rd_sts_mixer.h"
+#line 1 "engine/split/3rd_sts_mixer.h"
///////////////////////////////////////////////////////////////////////////////
// sts_mixer.h - v0.02
// written 2016 by Sebastian Steinhauer
@@ -77992,7 +77996,7 @@ int main(int argc, char *argv[]) {
For more information, please refer to
*/
#line 0
-#line 1 "3rd_miniaudio.h"
+#line 1 "engine/split/3rd_miniaudio.h"
/*
Audio playback and capture library. Choice of public domain or MIT-0. See license statements at the end of this file.
miniaudio - v0.11.18 - 2023-08-07
@@ -170537,7 +170541,7 @@ SOFTWARE.
#undef R
#define error l_error
#define panic l_panic
-#line 1 "3rd_lua.h"
+#line 1 "engine/split/3rd_lua.h"
/*
minilua.h -- Lua in a single header
Project URL: https://github.com/edubart/minilua
@@ -199515,7 +199519,7 @@ int main (int argc, char **argv) {
#undef cast
#undef G
//---
-#line 1 "3rd_stb_image.h"
+#line 1 "engine/split/3rd_stb_image.h"
/* stb_image - v2.26 - public domain image loader - http://nothings.org/stb
no warranty implied; use at your own risk
@@ -207279,7 +207283,7 @@ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
------------------------------------------------------------------------------
*/
#line 0
-#line 1 "3rd_stb_image_write.h"
+#line 1 "engine/split/3rd_stb_image_write.h"
/* stb_image_write - v1.15 - public domain - http://nothings.org/stb
writes out PNG/BMP/TGA/JPEG/HDR images to C stdio - Sean Barrett 2010-2015
no warranty implied; use at your own risk
@@ -208977,7 +208981,7 @@ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
#define STBTT_free(x,u) ((void)(u),FREE(x))
#define NK_ASSERT ASSERT
#define NK_DTOA(s,n) strcpy(s, va("%f", n)) // override cos built-in nk_dtoa() will freeze while parsing UINT_MAX otherwise
-#line 1 "3rd_nuklear.h"
+#line 1 "engine/split/3rd_nuklear.h"
/*
/// # Nuklear
/// ![](https://cloud.githubusercontent.com/assets/8057201/11761525/ae06f0ca-a0c6-11e5-819d-5610b25f6ef4.gif)
@@ -239338,7 +239342,7 @@ nk_tooltipfv(struct nk_context *ctx, const char *fmt, va_list args)
/// for his single header file packer.
*/
#line 0
-#line 1 "3rd_nuklear_glfw_gl3.h"
+#line 1 "engine/split/3rd_nuklear_glfw_gl3.h"
/*
* Nuklear - 1.32.0 - public domain
@@ -239889,7 +239893,7 @@ void nk_glfw3_shutdown(struct nk_glfw* glfw)
#endif
#endif
#line 0
-#line 1 "3rd_nuklear_filebrowser.h"
+#line 1 "engine/split/3rd_nuklear_filebrowser.h"
// file browser for nuklear, based on https://github.com/vurtun/nuklear/blob/master/example/file_browser.c (public domain)
// - rlyeh, public domain
//
@@ -240300,7 +240304,7 @@ static struct nk_image icon_load_rect(unsigned id, unsigned w, unsigned h, unsig
//#include "3rd_assimp/postprocess.h"
//#pragma comment(lib, "3rd/3rd_assimp/x64/assimp")
#endif
-#line 1 "3rd_json5.h"
+#line 1 "engine/split/3rd_json5.h"
// JSON5 + SJSON parser module
//
// License:
@@ -240740,7 +240744,7 @@ int main() {
#endif // JSON5_C
#line 0
-#line 1 "3rd_gjk.h"
+#line 1 "engine/split/3rd_gjk.h"
// GJK distance algorithm. original code by @vurtun and @randygaul, public domain.
// [src] https://gist.github.com/vurtun/29727217c269a2fbf4c0ed9a1d11cb40
// - rlyeh, public domain.
@@ -241349,7 +241353,7 @@ gjk_result gjk_quad(float a_radius, float b_radius) {
#endif
#line 0
-#line 1 "3rd_compress.h"
+#line 1 "engine/split/3rd_compress.h"
// compress.c de/compressors into a single-file header
// - rlyeh, public domain
//
@@ -252198,7 +252202,7 @@ unsigned file_decode(FILE* in, FILE* out, FILE *logfile) { // multi decoder
#endif // COMPRESS_C
#line 0
-#line 1 "3rd_archive.h"
+#line 1 "engine/split/3rd_archive.h"
// archive.c pak/zip/tar/dir archivers
// - rlyeh, public domain
@@ -253802,7 +253806,7 @@ int main( int argc, char **argv ) {
#if is(win32)
#include // timeapi.h
#endif
-#line 1 "3rd_thread.h"
+#line 1 "engine/split/3rd_thread.h"
/*
------------------------------------------------------------------------------
Licensing information can be found at the end of the file.
@@ -255532,7 +255536,7 @@ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
------------------------------------------------------------------------------
*/
#line 0
-#line 1 "3rd_plmpeg.h"
+#line 1 "engine/split/3rd_plmpeg.h"
/*
PL_MPEG - MPEG1 Video decoder, MP2 Audio decoder, MPEG-PS demuxer
@@ -259798,7 +259802,7 @@ void plm_audio_matrix_transform(int s[32][3], int ss, float *d, int dp) {
#endif // PL_MPEG_IMPLEMENTATION
#line 0
-#line 1 "3rd_jo_mpeg.h"
+#line 1 "engine/split/3rd_jo_mpeg.h"
/* public domain Simple, Minimalistic, No Allocations MPEG writer - http://jonolick.com
*
* Latest revisions:
@@ -260065,7 +260069,7 @@ void jo_write_mpeg(FILE *fp, const unsigned char *bgrx, int width, int height, i
#endif
#line 0
//#define _RTL_RUN_ONCE _RTL_RUN_ONCE2 // __MINGW64__
-#line 1 "3rd_https.h"
+#line 1 "engine/split/3rd_https.h"
/*
------------------------------------------------------------------------------
Licensing information can be found at the end of the file.
@@ -307048,7 +307052,7 @@ int main() {
#line 0
#undef F2
#undef F3
-#line 1 "3rd_enet.h"
+#line 1 "engine/split/3rd_enet.h"
/**
* include/enet.h - a Single-Header auto-generated variant of enet.h library.
*
@@ -313189,7 +313193,7 @@ extern "C" {
#endif // ENET_INCLUDE_H
#line 0
#define tls_init tls_init2
-#line 1 "3rd_bq_websocket.h"
+#line 1 "engine/split/3rd_bq_websocket.h"
/*
------------------------------------------------------------------------------
This software is available under 2 licenses -- choose whichever you prefer.
@@ -319552,7 +319556,7 @@ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
#endif // BQ_PLATFORM_IMPLEMENTATION
#line 0
-#line 1 "3rd_simplex.h"
+#line 1 "engine/split/3rd_simplex.h"
/** 1D, 2D, 3D and 4D float Perlin Simplex noise */
/** Original code, stefan gustavson (PD). */
@@ -320035,7 +320039,7 @@ float snoise4(float x, float y, float z, float w) {
#endif
#line 0
-#line 1 "3rd_tfd.h"
+#line 1 "engine/split/3rd_tfd.h"
/* If you are using a C++ compiler to compile tinyfiledialogs.c (maybe renamed with an extension ".cpp")
then comment out << extern "C" >> bellow in this header file) */
@@ -328095,7 +328099,7 @@ tinyfd_messageBox("The selected hexcolor is",
#endif // TFD_IMPLEMENTATION
#line 0
-#line 1 "3rd_stb_sprintf.h"
+#line 1 "engine/split/3rd_stb_sprintf.h"
// stb_sprintf - v1.10 - public domain snprintf() implementation
// originally by Jeff Roberts / RAD Game Tools, 2015/10/20
// http://github.com/nothings/stb
@@ -330004,7 +330008,7 @@ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
#line 0
#define g g2
-#line 1 "3rd_xml.h"
+#line 1 "engine/split/3rd_xml.h"
// original xml.h/xml.c files by tor andersson, public domain
#ifndef xml_h
@@ -330535,7 +330539,7 @@ struct xml *xml_parse(char *s, int preserve_white, char **errorp)
#endif
#line 0
#undef g
-#line 1 "3rd_polychop.h"
+#line 1 "engine/split/3rd_polychop.h"
/* Progressive Mesh type Polygon Reduction Algorithm
*
* 1998: Original version by Stan Melax (c) 1998
@@ -331067,7 +331071,7 @@ for( int lock_ = (thread_mutex_lock( mutexptr ), 1); lock_; lock_ = (thread_mute
//-----------------------------------------------------------------------------
// C files
-#line 1 "v4k_ds.c"
+#line 1 "engine/split/v4k_ds.c"
// -----------------------------------------------------------------------------
// sort/less
@@ -331476,7 +331480,7 @@ char *cc8str(uint64_t x) {
#line 0
-#line 1 "v4k_string.c"
+#line 1 "engine/split/v4k_string.c"
#include
char* tempvl(const char *fmt, va_list vl) {
@@ -331897,7 +331901,7 @@ AUTORUN {
#endif
#line 0
-#line 1 "v4k_compat.c"
+#line 1 "engine/split/v4k_compat.c"
//-----------------------------------------------------------------------------
// compat (unix & stdio.h)
@@ -332014,7 +332018,7 @@ static void v4k_pre_init();
static void v4k_post_init(float);
#line 0
-#line 1 "v4k_audio.c"
+#line 1 "engine/split/v4k_audio.c"
// @fixme: really shutdown audio & related threads before quitting. ma_dr_wav crashes.
@@ -332607,7 +332611,7 @@ int ui_audio() {
}
#line 0
-#line 1 "v4k_buffer.c"
+#line 1 "engine/split/v4k_buffer.c"
// ----------------------------------------------------------------------------
// compression api
@@ -333363,7 +333367,7 @@ AUTORUN {
#endif
#line 0
-#line 1 "v4k_collide.c"
+#line 1 "engine/split/v4k_collide.c"
/* poly */
poly poly_alloc(int cnt) {
poly p = {0};
@@ -334791,7 +334795,7 @@ void collide_demo() { // debug draw collisions // @fixme: fix leaks: poly_free()
}
#line 0
-#line 1 "v4k_cooker.c"
+#line 1 "engine/split/v4k_cooker.c"
// data pipeline
// - rlyeh, public domain.
// ----------------------------------------------------------------------------
@@ -335608,7 +335612,7 @@ void cook_config( const char *pathfile_to_cook_ini ) { // @todo: test run-from-"
}
#line 0
-#line 1 "v4k_data.c"
+#line 1 "engine/split/v4k_data.c"
static
array(char) base64__decode(const char *in_, unsigned inlen) {
@@ -335911,7 +335915,7 @@ bool data_tests() {
}
#line 0
-#line 1 "v4k_dll.c"
+#line 1 "engine/split/v4k_dll.c"
#if is(win32)
# include
# define dlopen(name,mode) (void*)( (name) ? LoadLibraryA(name) : GetModuleHandle(NULL))
@@ -335943,7 +335947,7 @@ int main() { int (*adder)() = dll("demo.dll", "add2"); printf("%d\n", adder(2,3)
#endif
#line 0
-#line 1 "v4k_file.c"
+#line 1 "engine/split/v4k_file.c"
// -----------------------------------------------------------------------------
// file
@@ -337083,7 +337087,7 @@ bool ini_write(const char *filename, const char *section, const char *key, const
#line 0
-#line 1 "v4k_font.c"
+#line 1 "engine/split/v4k_font.c"
// font framework. original code by Vassvik (UNLICENSED)
// - rlyeh, public domain.
//
@@ -339433,7 +339437,7 @@ vec2 font_rect(const char *str) {
}
#line 0
-#line 1 "v4k_input.c"
+#line 1 "engine/split/v4k_input.c"
// input framework
// - rlyeh, public domain
//
@@ -340166,7 +340170,7 @@ int ui_gamepads() {
}
#line 0
-#line 1 "v4k_math.c"
+#line 1 "engine/split/v4k_math.c"
// -----------------------------------------------------------------------------
// math framework: rand, ease, vec2, vec3, vec4, quat, mat2, mat33, mat34, mat4
// - rlyeh, public domain
@@ -341172,7 +341176,7 @@ void print34( float *m ) { print_(m,3,4); }
void print44( float *m ) { print_(m,4,4); }
#line 0
-#line 1 "v4k_memory.c"
+#line 1 "engine/split/v4k_memory.c"
size_t dlmalloc_usable_size(void*); // __ANDROID_API__
#if is(bsd) || is(osx) // bsd or osx
@@ -341270,7 +341274,7 @@ void* forget( void *ptr ) {
}
#line 0
-#line 1 "v4k_network.c"
+#line 1 "engine/split/v4k_network.c"
#if is(tcc) && is(win32) // @fixme: https lib is broken with tcc. replaced with InternetReadFile() api for now
@@ -341580,7 +341584,7 @@ static void network_init() {
}
#line 0
-#line 1 "v4k_netsync.c"
+#line 1 "engine/split/v4k_netsync.c"
typedef void* (*rpc_function)();
typedef struct rpc_call {
@@ -342266,7 +342270,7 @@ void network_rpc_send(unsigned id, const char *cmdline) {
}
#line 0
-#line 1 "v4k_pack.c"
+#line 1 "engine/split/v4k_pack.c"
// endianness -----------------------------------------------------------------
// - rlyeh, public domain
@@ -343726,7 +343730,7 @@ AUTORUN {
#endif
#line 0
-#line 1 "v4k_reflect.c"
+#line 1 "engine/split/v4k_reflect.c"
// C reflection: enums, functions, structs, members and anotations.
// - rlyeh, public domain
//
@@ -343838,7 +343842,7 @@ AUTOTEST {
}
#line 0
-#line 1 "v4k_render.c"
+#line 1 "engine/split/v4k_render.c"
// -----------------------------------------------------------------------------
// opengl
@@ -348606,7 +348610,7 @@ anims_t animations(const char *pathfile, int flags) {
}
#line 0
-#line 1 "v4k_renderdd.c"
+#line 1 "engine/split/v4k_renderdd.c"
static const char *dd_vs = "//" FILELINE "\n"
"in vec3 att_position;\n"
"uniform mat4 u_MVP;\n"
@@ -349454,7 +349458,7 @@ void ddraw_demo() {
}
#line 0
-#line 1 "v4k_scene.c"
+#line 1 "engine/split/v4k_scene.c"
//
// @todo: remove explicit GL code from here
@@ -350026,7 +350030,7 @@ void scene_render(int flags) {
}
#line 0
-#line 1 "v4k_script.c"
+#line 1 "engine/split/v4k_script.c"
typedef lua_State lua;
// the Lua interpreter
@@ -350207,7 +350211,7 @@ bool script_tests() {
#undef XMACRO
#line 0
-#line 1 "v4k_time.c"
+#line 1 "engine/split/v4k_time.c"
// ----------------------------------------------------------------------------
// time
@@ -350458,7 +350462,7 @@ guid guid_create() {
}
#line 0
-#line 1 "v4k_system.c"
+#line 1 "engine/split/v4k_system.c"
#if (is(tcc) && is(linux)) || (is(gcc) && !is(mingw)) // || is(clang)
int __argc; char **__argv;
#if !is(ems)
@@ -351343,7 +351347,7 @@ int (test)(const char *file, int line, const char *expr, bool result) {
}
#line 0
-#line 1 "v4k_id.c"
+#line 1 "engine/split/v4k_id.c"
// -----------------------------------------------------------------------------
// factory of handle ids, based on code by randy gaul (PD/Zlib licensed)
// - rlyeh, public domain
@@ -351513,7 +351517,7 @@ bool id_valid(uintptr_t id) {
}
#line 0
-#line 1 "v4k_ui.c"
+#line 1 "engine/split/v4k_ui.c"
#ifndef UI_ICONS_SMALL
//#define UI_ICONS_SMALL 1
@@ -353978,7 +353982,7 @@ int ui_demo(int do_windows) {
}
#line 0
-#line 1 "v4k_profile.c"
+#line 1 "engine/split/v4k_profile.c"
#if ENABLE_PROFILER
profiler_t profiler;
int profiler_enabled = 1;
@@ -354034,7 +354038,7 @@ void (ui_profiler)() {
#endif
#line 0
-#line 1 "v4k_video.c"
+#line 1 "engine/split/v4k_video.c"
// tip: convert video to x265/mp4. note: higher crf to increase compression (default crf is 28)
// ffmpeg -i {{infile}} -c:v libx265 -crf 24 -c:a copy {{outfile}}
@@ -354266,7 +354270,7 @@ void record_frame() {
}
#line 0
-#line 1 "v4k_window.c"
+#line 1 "engine/split/v4k_window.c"
//-----------------------------------------------------------------------------
// fps locking
@@ -355252,9 +355256,9 @@ void window_color(unsigned color) {
winbgcolor = vec4(r / 255.0, g / 255.0, b / 255.0, a / 255.0);
}
void window_icon(const char *file_icon) {
- unsigned len = file_size(file_icon); // len = len ? len : vfs_size(file_icon); // @fixme: reenable this to allow icons to be put in cooked .zipfiles
+ unsigned len = file_size(file_icon); len = len ? len : vfs_size(file_icon); // @fixme: reenable this to allow icons to be put in cooked .zipfiles
if( len ) {
- void *data = file_read(file_icon); // data = data ? data : vfs_read(file_icon); // @fixme: reenable this to allow icons to be put in cooked .zipfiles
+ void *data = file_read(file_icon); data = data ? data : vfs_read(file_icon); // @fixme: reenable this to allow icons to be put in cooked .zipfiles
if( data ) {
image_t img = image_from_mem(data, len, IMAGE_RGBA);
if( img.w && img.h && img.pixels ) {
@@ -355539,7 +355543,7 @@ int window_has_maximize() {
#line 0
-#line 1 "v4k_obj.c"
+#line 1 "engine/split/v4k_obj.c"
// -----------------------------------------------------------------------------
// semantic versioning in a single byte (octal)
// - rlyeh, public domain.
@@ -355586,7 +355590,7 @@ AUTORUN {
#endif
#line 0
-#line 1 "v4k_ai.c"
+#line 1 "engine/split/v4k_ai.c"
// AI framework
// - rlyeh, public domain.
//
@@ -356162,7 +356166,7 @@ int pathfind_astar(int width, int height, const unsigned* map, vec2i src, vec2i
}
#line 0
-#line 1 "v4k_bt.c"
+#line 1 "engine/split/v4k_bt.c"
// Behavior trees: decision planning and decision making.
// Supersedes finite state-machines (FSM) and hierarchical finite state-machines (HFSM).
// - rlyeh, public domain.
@@ -356426,7 +356430,7 @@ int ui_bt(bt_t *b) {
}
#line 0
-#line 1 "v4k_editor.c"
+#line 1 "engine/split/v4k_editor.c"
// editing:
// nope > functions: add/rem property
@@ -356880,13 +356884,14 @@ int main() {
// editor is last in place, so it can use all internals from above headers
-#line 1 "v4k_main.c"
+#line 1 "engine/split/v4k_main.c"
// ----------------------------------------------------------------------------
static void v4k_pre_init() {
const char *appname = app_name();
- window_icon(va("%s.png", appname));
- ifdef(win32,window_icon(va("%s.ico", appname)));
+ const char *appdir = app_path();
+ window_icon(va("%s/%s.png", appdir, appname));
+ ifdef(win32,window_icon(va("%s/%s.ico", appdir, appname)));
glfwPollEvents();
@@ -356922,8 +356927,9 @@ static void v4k_post_init(float refresh_rate) {
}
// @todo
- // window_icon(vfs_file(va("%s.png", app)));
- // window_icon(vfs_file(va("%s.ico", app)));
+ const char *appname = app_name();
+ window_icon(va("%s.png", appname));
+ window_icon(va("%s.ico", appname));
// display window
glfwShowWindow(window);
@@ -356972,7 +356978,7 @@ void v4k_init() {
__argc = 0;
}
- #ifdef COOK_DISABLED
+ #if defined(COOK_DISABLED) || ENABLE_RETAIL
cook_disable();
#endif
diff --git a/engine/split/v4k_config.h b/engine/split/v4k_config.h
index b7dc834..a897ce9 100644
--- a/engine/split/v4k_config.h
+++ b/engine/split/v4k_config.h
@@ -29,6 +29,10 @@
#define ENABLE_TESTS 0 // ifdef(debug, 1, 0) ///+
#endif
+#ifndef ENABLE_RETAIL
+#define ENABLE_RETAIL 0
+#endif
+
// -----------------------------------------------------------------------------
// if/n/def hell
diff --git a/engine/split/v4k_main.c b/engine/split/v4k_main.c
index 98dd244..6269b31 100644
--- a/engine/split/v4k_main.c
+++ b/engine/split/v4k_main.c
@@ -2,8 +2,9 @@
static void v4k_pre_init() {
const char *appname = app_name();
- window_icon(va("%s.png", appname));
- ifdef(win32,window_icon(va("%s.ico", appname)));
+ const char *appdir = app_path();
+ window_icon(va("%s/%s.png", appdir, appname));
+ ifdef(win32,window_icon(va("%s/%s.ico", appdir, appname)));
glfwPollEvents();
@@ -39,8 +40,9 @@ static void v4k_post_init(float refresh_rate) {
}
// @todo
- // window_icon(vfs_file(va("%s.png", app)));
- // window_icon(vfs_file(va("%s.ico", app)));
+ const char *appname = app_name();
+ window_icon(va("%s.png", appname));
+ window_icon(va("%s.ico", appname));
// display window
glfwShowWindow(window);
@@ -89,7 +91,7 @@ void v4k_init() {
__argc = 0;
}
- #ifdef COOK_DISABLED
+ #if defined(COOK_DISABLED) || ENABLE_RETAIL
cook_disable();
#endif
diff --git a/engine/split/v4k_window.c b/engine/split/v4k_window.c
index 3efe0a0..0ecee67 100644
--- a/engine/split/v4k_window.c
+++ b/engine/split/v4k_window.c
@@ -983,9 +983,9 @@ void window_color(unsigned color) {
winbgcolor = vec4(r / 255.0, g / 255.0, b / 255.0, a / 255.0);
}
void window_icon(const char *file_icon) {
- unsigned len = file_size(file_icon); // len = len ? len : vfs_size(file_icon); // @fixme: reenable this to allow icons to be put in cooked .zipfiles
+ unsigned len = file_size(file_icon); len = len ? len : vfs_size(file_icon); // @fixme: reenable this to allow icons to be put in cooked .zipfiles
if( len ) {
- void *data = file_read(file_icon); // data = data ? data : vfs_read(file_icon); // @fixme: reenable this to allow icons to be put in cooked .zipfiles
+ void *data = file_read(file_icon); data = data ? data : vfs_read(file_icon); // @fixme: reenable this to allow icons to be put in cooked .zipfiles
if( data ) {
image_t img = image_from_mem(data, len, IMAGE_RGBA);
if( img.w && img.h && img.pixels ) {
diff --git a/engine/v4k b/engine/v4k
index a3cd2a4..80af2a3 100644
--- a/engine/v4k
+++ b/engine/v4k
@@ -6,7 +6,7 @@
#define GLAD_GL_IMPLEMENTATION // glad
#endif
-#line 1 "3rd_glad.h"
+#line 1 "engine/split/3rd_glad.h"
#ifndef __EMSCRIPTEN__
#ifndef _GNU_SOURCE // juicy linux headers
@@ -11688,7 +11688,7 @@ int gladLoadGL( GLADloadfunc load) {
#endif /* __EMSCRIPTEN__ */
#line 0
-#line 1 "3rd_icon_md.h"
+#line 1 "engine/split/3rd_icon_md.h"
// Generated by https://github.com/juliettef/IconFontCppHeaders script GenerateIconFontCppHeaders.py for languages C and C++
// from https://github.com/google/material-design-icons/raw/master/font/MaterialIcons-Regular.codepoints
// for use with https://github.com/google/material-design-icons/blob/master/font/MaterialIcons-Regular.ttf
@@ -14030,7 +14030,7 @@ errno_t fopen_s(
//---
-#line 1 "3rd_glfw3.h"
+#line 1 "engine/split/3rd_glfw3.h"
#ifndef __EMSCRIPTEN__
// forked from https://github.com/SasLuca/glfw-single-header (CC0-1.0 licensed)
@@ -53227,7 +53227,7 @@ uint32_t _glfwKeySym2Unicode(unsigned int keysym)
#line 0
#undef timeGetTime
//---
-#line 1 "3rd_swrap.h"
+#line 1 "engine/split/3rd_swrap.h"
// https://github.com/BareRose/swrap/blob/master/swrap.h
/*
@@ -53520,7 +53520,7 @@ SWDEF int swrapMultiSelect (int* socks, size_t socks_size, double timeout) {
#endif //SWRAP_H
#line 0
//---
-#line 1 "3rd_jo_mp1.h"
+#line 1 "engine/split/3rd_jo_mp1.h"
/* public domain Simple, Minimalistic MPEG Layer 1 decoder - http://jonolick.com
*
* Revision History:
@@ -53931,7 +53931,7 @@ bool jo_read_mp1(const void *input, int inputSize, short **output_, int *outputS
#line 0
#define get_bits stb_vorbis_get_bits
#define error stb_vorbis_error
-#line 1 "3rd_stb_vorbis.h"
+#line 1 "engine/split/3rd_stb_vorbis.h"
// Ogg Vorbis audio decoder - v1.19 - public domain
// http://nothings.org/stb_vorbis/
//
@@ -59492,7 +59492,7 @@ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
#line 0
#undef error
#undef DEBUG
-#line 1 "3rd_sts_mixer.h"
+#line 1 "engine/split/3rd_sts_mixer.h"
///////////////////////////////////////////////////////////////////////////////
// sts_mixer.h - v0.02
// written 2016 by Sebastian Steinhauer
@@ -60005,7 +60005,7 @@ int main(int argc, char *argv[]) {
For more information, please refer to
*/
#line 0
-#line 1 "3rd_miniaudio.h"
+#line 1 "engine/split/3rd_miniaudio.h"
/*
Audio playback and capture library. Choice of public domain or MIT-0. See license statements at the end of this file.
miniaudio - v0.11.18 - 2023-08-07
@@ -152550,7 +152550,7 @@ SOFTWARE.
#undef R
#define error l_error
#define panic l_panic
-#line 1 "3rd_lua.h"
+#line 1 "engine/split/3rd_lua.h"
/*
minilua.h -- Lua in a single header
Project URL: https://github.com/edubart/minilua
@@ -181528,7 +181528,7 @@ int main (int argc, char **argv) {
#undef cast
#undef G
//---
-#line 1 "3rd_stb_image.h"
+#line 1 "engine/split/3rd_stb_image.h"
/* stb_image - v2.26 - public domain image loader - http://nothings.org/stb
no warranty implied; use at your own risk
@@ -189292,7 +189292,7 @@ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
------------------------------------------------------------------------------
*/
#line 0
-#line 1 "3rd_stb_image_write.h"
+#line 1 "engine/split/3rd_stb_image_write.h"
/* stb_image_write - v1.15 - public domain - http://nothings.org/stb
writes out PNG/BMP/TGA/JPEG/HDR images to C stdio - Sean Barrett 2010-2015
no warranty implied; use at your own risk
@@ -190990,7 +190990,7 @@ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
#define STBTT_free(x,u) ((void)(u),FREE(x))
#define NK_ASSERT ASSERT
#define NK_DTOA(s,n) strcpy(s, va("%f", n)) // override cos built-in nk_dtoa() will freeze while parsing UINT_MAX otherwise
-#line 1 "3rd_nuklear.h"
+#line 1 "engine/split/3rd_nuklear.h"
/*
/// # Nuklear
/// ![](https://cloud.githubusercontent.com/assets/8057201/11761525/ae06f0ca-a0c6-11e5-819d-5610b25f6ef4.gif)
@@ -221351,7 +221351,7 @@ nk_tooltipfv(struct nk_context *ctx, const char *fmt, va_list args)
/// for his single header file packer.
*/
#line 0
-#line 1 "3rd_nuklear_glfw_gl3.h"
+#line 1 "engine/split/3rd_nuklear_glfw_gl3.h"
/*
* Nuklear - 1.32.0 - public domain
@@ -221902,7 +221902,7 @@ void nk_glfw3_shutdown(struct nk_glfw* glfw)
#endif
#endif
#line 0
-#line 1 "3rd_nuklear_filebrowser.h"
+#line 1 "engine/split/3rd_nuklear_filebrowser.h"
// file browser for nuklear, based on https://github.com/vurtun/nuklear/blob/master/example/file_browser.c (public domain)
// - rlyeh, public domain
//
@@ -222313,7 +222313,7 @@ static struct nk_image icon_load_rect(unsigned id, unsigned w, unsigned h, unsig
//#include "3rd_assimp/postprocess.h"
//#pragma comment(lib, "3rd/3rd_assimp/x64/assimp")
#endif
-#line 1 "3rd_json5.h"
+#line 1 "engine/split/3rd_json5.h"
// JSON5 + SJSON parser module
//
// License:
@@ -222753,7 +222753,7 @@ int main() {
#endif // JSON5_C
#line 0
-#line 1 "3rd_gjk.h"
+#line 1 "engine/split/3rd_gjk.h"
// GJK distance algorithm. original code by @vurtun and @randygaul, public domain.
// [src] https://gist.github.com/vurtun/29727217c269a2fbf4c0ed9a1d11cb40
// - rlyeh, public domain.
@@ -223362,7 +223362,7 @@ gjk_result gjk_quad(float a_radius, float b_radius) {
#endif
#line 0
-#line 1 "3rd_compress.h"
+#line 1 "engine/split/3rd_compress.h"
// compress.c de/compressors into a single-file header
// - rlyeh, public domain
//
@@ -234211,7 +234211,7 @@ unsigned file_decode(FILE* in, FILE* out, FILE *logfile) { // multi decoder
#endif // COMPRESS_C
#line 0
-#line 1 "3rd_archive.h"
+#line 1 "engine/split/3rd_archive.h"
// archive.c pak/zip/tar/dir archivers
// - rlyeh, public domain
@@ -235815,7 +235815,7 @@ int main( int argc, char **argv ) {
#if is(win32)
#include // timeapi.h
#endif
-#line 1 "3rd_thread.h"
+#line 1 "engine/split/3rd_thread.h"
/*
------------------------------------------------------------------------------
Licensing information can be found at the end of the file.
@@ -237545,7 +237545,7 @@ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
------------------------------------------------------------------------------
*/
#line 0
-#line 1 "3rd_plmpeg.h"
+#line 1 "engine/split/3rd_plmpeg.h"
/*
PL_MPEG - MPEG1 Video decoder, MP2 Audio decoder, MPEG-PS demuxer
@@ -241811,7 +241811,7 @@ void plm_audio_matrix_transform(int s[32][3], int ss, float *d, int dp) {
#endif // PL_MPEG_IMPLEMENTATION
#line 0
-#line 1 "3rd_jo_mpeg.h"
+#line 1 "engine/split/3rd_jo_mpeg.h"
/* public domain Simple, Minimalistic, No Allocations MPEG writer - http://jonolick.com
*
* Latest revisions:
@@ -242078,7 +242078,7 @@ void jo_write_mpeg(FILE *fp, const unsigned char *bgrx, int width, int height, i
#endif
#line 0
//#define _RTL_RUN_ONCE _RTL_RUN_ONCE2 // __MINGW64__
-#line 1 "3rd_https.h"
+#line 1 "engine/split/3rd_https.h"
/*
------------------------------------------------------------------------------
Licensing information can be found at the end of the file.
@@ -289061,7 +289061,7 @@ int main() {
#line 0
#undef F2
#undef F3
-#line 1 "3rd_enet.h"
+#line 1 "engine/split/3rd_enet.h"
/**
* include/enet.h - a Single-Header auto-generated variant of enet.h library.
*
@@ -295202,7 +295202,7 @@ extern "C" {
#endif // ENET_INCLUDE_H
#line 0
#define tls_init tls_init2
-#line 1 "3rd_bq_websocket.h"
+#line 1 "engine/split/3rd_bq_websocket.h"
/*
------------------------------------------------------------------------------
This software is available under 2 licenses -- choose whichever you prefer.
@@ -301565,7 +301565,7 @@ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
#endif // BQ_PLATFORM_IMPLEMENTATION
#line 0
-#line 1 "3rd_simplex.h"
+#line 1 "engine/split/3rd_simplex.h"
/** 1D, 2D, 3D and 4D float Perlin Simplex noise */
/** Original code, stefan gustavson (PD). */
@@ -302048,7 +302048,7 @@ float snoise4(float x, float y, float z, float w) {
#endif
#line 0
-#line 1 "3rd_tfd.h"
+#line 1 "engine/split/3rd_tfd.h"
/* If you are using a C++ compiler to compile tinyfiledialogs.c (maybe renamed with an extension ".cpp")
then comment out << extern "C" >> bellow in this header file) */
@@ -310108,7 +310108,7 @@ tinyfd_messageBox("The selected hexcolor is",
#endif // TFD_IMPLEMENTATION
#line 0
-#line 1 "3rd_stb_sprintf.h"
+#line 1 "engine/split/3rd_stb_sprintf.h"
// stb_sprintf - v1.10 - public domain snprintf() implementation
// originally by Jeff Roberts / RAD Game Tools, 2015/10/20
// http://github.com/nothings/stb
@@ -312017,7 +312017,7 @@ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
#line 0
#define g g2
-#line 1 "3rd_xml.h"
+#line 1 "engine/split/3rd_xml.h"
// original xml.h/xml.c files by tor andersson, public domain
#ifndef xml_h
@@ -312548,7 +312548,7 @@ struct xml *xml_parse(char *s, int preserve_white, char **errorp)
#endif
#line 0
#undef g
-#line 1 "3rd_polychop.h"
+#line 1 "engine/split/3rd_polychop.h"
/* Progressive Mesh type Polygon Reduction Algorithm
*
* 1998: Original version by Stan Melax (c) 1998
diff --git a/engine/v4k.c b/engine/v4k.c
index a32f370..e39628b 100644
--- a/engine/v4k.c
+++ b/engine/v4k.c
@@ -105,7 +105,7 @@ for( int lock_ = (thread_mutex_lock( mutexptr ), 1); lock_; lock_ = (thread_mute
//-----------------------------------------------------------------------------
// C files
-#line 1 "v4k_ds.c"
+#line 1 "engine/split/v4k_ds.c"
// -----------------------------------------------------------------------------
// sort/less
@@ -514,7 +514,7 @@ char *cc8str(uint64_t x) {
#line 0
-#line 1 "v4k_string.c"
+#line 1 "engine/split/v4k_string.c"
#include
char* tempvl(const char *fmt, va_list vl) {
@@ -935,7 +935,7 @@ AUTORUN {
#endif
#line 0
-#line 1 "v4k_compat.c"
+#line 1 "engine/split/v4k_compat.c"
//-----------------------------------------------------------------------------
// compat (unix & stdio.h)
@@ -1052,7 +1052,7 @@ static void v4k_pre_init();
static void v4k_post_init(float);
#line 0
-#line 1 "v4k_audio.c"
+#line 1 "engine/split/v4k_audio.c"
// @fixme: really shutdown audio & related threads before quitting. ma_dr_wav crashes.
@@ -1645,7 +1645,7 @@ int ui_audio() {
}
#line 0
-#line 1 "v4k_buffer.c"
+#line 1 "engine/split/v4k_buffer.c"
// ----------------------------------------------------------------------------
// compression api
@@ -2401,7 +2401,7 @@ AUTORUN {
#endif
#line 0
-#line 1 "v4k_collide.c"
+#line 1 "engine/split/v4k_collide.c"
/* poly */
poly poly_alloc(int cnt) {
poly p = {0};
@@ -3829,7 +3829,7 @@ void collide_demo() { // debug draw collisions // @fixme: fix leaks: poly_free()
}
#line 0
-#line 1 "v4k_cooker.c"
+#line 1 "engine/split/v4k_cooker.c"
// data pipeline
// - rlyeh, public domain.
// ----------------------------------------------------------------------------
@@ -4646,7 +4646,7 @@ void cook_config( const char *pathfile_to_cook_ini ) { // @todo: test run-from-"
}
#line 0
-#line 1 "v4k_data.c"
+#line 1 "engine/split/v4k_data.c"
static
array(char) base64__decode(const char *in_, unsigned inlen) {
@@ -4949,7 +4949,7 @@ bool data_tests() {
}
#line 0
-#line 1 "v4k_dll.c"
+#line 1 "engine/split/v4k_dll.c"
#if is(win32)
# include
# define dlopen(name,mode) (void*)( (name) ? LoadLibraryA(name) : GetModuleHandle(NULL))
@@ -4981,7 +4981,7 @@ int main() { int (*adder)() = dll("demo.dll", "add2"); printf("%d\n", adder(2,3)
#endif
#line 0
-#line 1 "v4k_file.c"
+#line 1 "engine/split/v4k_file.c"
// -----------------------------------------------------------------------------
// file
@@ -6121,7 +6121,7 @@ bool ini_write(const char *filename, const char *section, const char *key, const
#line 0
-#line 1 "v4k_font.c"
+#line 1 "engine/split/v4k_font.c"
// font framework. original code by Vassvik (UNLICENSED)
// - rlyeh, public domain.
//
@@ -8471,7 +8471,7 @@ vec2 font_rect(const char *str) {
}
#line 0
-#line 1 "v4k_input.c"
+#line 1 "engine/split/v4k_input.c"
// input framework
// - rlyeh, public domain
//
@@ -9204,7 +9204,7 @@ int ui_gamepads() {
}
#line 0
-#line 1 "v4k_math.c"
+#line 1 "engine/split/v4k_math.c"
// -----------------------------------------------------------------------------
// math framework: rand, ease, vec2, vec3, vec4, quat, mat2, mat33, mat34, mat4
// - rlyeh, public domain
@@ -10210,7 +10210,7 @@ void print34( float *m ) { print_(m,3,4); }
void print44( float *m ) { print_(m,4,4); }
#line 0
-#line 1 "v4k_memory.c"
+#line 1 "engine/split/v4k_memory.c"
size_t dlmalloc_usable_size(void*); // __ANDROID_API__
#if is(bsd) || is(osx) // bsd or osx
@@ -10308,7 +10308,7 @@ void* forget( void *ptr ) {
}
#line 0
-#line 1 "v4k_network.c"
+#line 1 "engine/split/v4k_network.c"
#if is(tcc) && is(win32) // @fixme: https lib is broken with tcc. replaced with InternetReadFile() api for now
@@ -10618,7 +10618,7 @@ static void network_init() {
}
#line 0
-#line 1 "v4k_netsync.c"
+#line 1 "engine/split/v4k_netsync.c"
typedef void* (*rpc_function)();
typedef struct rpc_call {
@@ -11304,7 +11304,7 @@ void network_rpc_send(unsigned id, const char *cmdline) {
}
#line 0
-#line 1 "v4k_pack.c"
+#line 1 "engine/split/v4k_pack.c"
// endianness -----------------------------------------------------------------
// - rlyeh, public domain
@@ -12764,7 +12764,7 @@ AUTORUN {
#endif
#line 0
-#line 1 "v4k_reflect.c"
+#line 1 "engine/split/v4k_reflect.c"
// C reflection: enums, functions, structs, members and anotations.
// - rlyeh, public domain
//
@@ -12876,7 +12876,7 @@ AUTOTEST {
}
#line 0
-#line 1 "v4k_render.c"
+#line 1 "engine/split/v4k_render.c"
// -----------------------------------------------------------------------------
// opengl
@@ -17644,7 +17644,7 @@ anims_t animations(const char *pathfile, int flags) {
}
#line 0
-#line 1 "v4k_renderdd.c"
+#line 1 "engine/split/v4k_renderdd.c"
static const char *dd_vs = "//" FILELINE "\n"
"in vec3 att_position;\n"
"uniform mat4 u_MVP;\n"
@@ -18492,7 +18492,7 @@ void ddraw_demo() {
}
#line 0
-#line 1 "v4k_scene.c"
+#line 1 "engine/split/v4k_scene.c"
//
// @todo: remove explicit GL code from here
@@ -19064,7 +19064,7 @@ void scene_render(int flags) {
}
#line 0
-#line 1 "v4k_script.c"
+#line 1 "engine/split/v4k_script.c"
typedef lua_State lua;
// the Lua interpreter
@@ -19245,7 +19245,7 @@ bool script_tests() {
#undef XMACRO
#line 0
-#line 1 "v4k_time.c"
+#line 1 "engine/split/v4k_time.c"
// ----------------------------------------------------------------------------
// time
@@ -19496,7 +19496,7 @@ guid guid_create() {
}
#line 0
-#line 1 "v4k_system.c"
+#line 1 "engine/split/v4k_system.c"
#if (is(tcc) && is(linux)) || (is(gcc) && !is(mingw)) // || is(clang)
int __argc; char **__argv;
#if !is(ems)
@@ -20381,7 +20381,7 @@ int (test)(const char *file, int line, const char *expr, bool result) {
}
#line 0
-#line 1 "v4k_id.c"
+#line 1 "engine/split/v4k_id.c"
// -----------------------------------------------------------------------------
// factory of handle ids, based on code by randy gaul (PD/Zlib licensed)
// - rlyeh, public domain
@@ -20551,7 +20551,7 @@ bool id_valid(uintptr_t id) {
}
#line 0
-#line 1 "v4k_ui.c"
+#line 1 "engine/split/v4k_ui.c"
#ifndef UI_ICONS_SMALL
//#define UI_ICONS_SMALL 1
@@ -23016,7 +23016,7 @@ int ui_demo(int do_windows) {
}
#line 0
-#line 1 "v4k_profile.c"
+#line 1 "engine/split/v4k_profile.c"
#if ENABLE_PROFILER
profiler_t profiler;
int profiler_enabled = 1;
@@ -23072,7 +23072,7 @@ void (ui_profiler)() {
#endif
#line 0
-#line 1 "v4k_video.c"
+#line 1 "engine/split/v4k_video.c"
// tip: convert video to x265/mp4. note: higher crf to increase compression (default crf is 28)
// ffmpeg -i {{infile}} -c:v libx265 -crf 24 -c:a copy {{outfile}}
@@ -23304,7 +23304,7 @@ void record_frame() {
}
#line 0
-#line 1 "v4k_window.c"
+#line 1 "engine/split/v4k_window.c"
//-----------------------------------------------------------------------------
// fps locking
@@ -24290,9 +24290,9 @@ void window_color(unsigned color) {
winbgcolor = vec4(r / 255.0, g / 255.0, b / 255.0, a / 255.0);
}
void window_icon(const char *file_icon) {
- unsigned len = file_size(file_icon); // len = len ? len : vfs_size(file_icon); // @fixme: reenable this to allow icons to be put in cooked .zipfiles
+ unsigned len = file_size(file_icon); len = len ? len : vfs_size(file_icon); // @fixme: reenable this to allow icons to be put in cooked .zipfiles
if( len ) {
- void *data = file_read(file_icon); // data = data ? data : vfs_read(file_icon); // @fixme: reenable this to allow icons to be put in cooked .zipfiles
+ void *data = file_read(file_icon); data = data ? data : vfs_read(file_icon); // @fixme: reenable this to allow icons to be put in cooked .zipfiles
if( data ) {
image_t img = image_from_mem(data, len, IMAGE_RGBA);
if( img.w && img.h && img.pixels ) {
@@ -24577,7 +24577,7 @@ int window_has_maximize() {
#line 0
-#line 1 "v4k_obj.c"
+#line 1 "engine/split/v4k_obj.c"
// -----------------------------------------------------------------------------
// semantic versioning in a single byte (octal)
// - rlyeh, public domain.
@@ -24624,7 +24624,7 @@ AUTORUN {
#endif
#line 0
-#line 1 "v4k_ai.c"
+#line 1 "engine/split/v4k_ai.c"
// AI framework
// - rlyeh, public domain.
//
@@ -25200,7 +25200,7 @@ int pathfind_astar(int width, int height, const unsigned* map, vec2i src, vec2i
}
#line 0
-#line 1 "v4k_bt.c"
+#line 1 "engine/split/v4k_bt.c"
// Behavior trees: decision planning and decision making.
// Supersedes finite state-machines (FSM) and hierarchical finite state-machines (HFSM).
// - rlyeh, public domain.
@@ -25464,7 +25464,7 @@ int ui_bt(bt_t *b) {
}
#line 0
-#line 1 "v4k_editor.c"
+#line 1 "engine/split/v4k_editor.c"
// editing:
// nope > functions: add/rem property
@@ -25918,13 +25918,14 @@ int main() {
// editor is last in place, so it can use all internals from above headers
-#line 1 "v4k_main.c"
+#line 1 "engine/split/v4k_main.c"
// ----------------------------------------------------------------------------
static void v4k_pre_init() {
const char *appname = app_name();
- window_icon(va("%s.png", appname));
- ifdef(win32,window_icon(va("%s.ico", appname)));
+ const char *appdir = app_path();
+ window_icon(va("%s/%s.png", appdir, appname));
+ ifdef(win32,window_icon(va("%s/%s.ico", appdir, appname)));
glfwPollEvents();
@@ -25960,8 +25961,9 @@ static void v4k_post_init(float refresh_rate) {
}
// @todo
- // window_icon(vfs_file(va("%s.png", app)));
- // window_icon(vfs_file(va("%s.ico", app)));
+ const char *appname = app_name();
+ window_icon(va("%s.png", appname));
+ window_icon(va("%s.ico", appname));
// display window
glfwShowWindow(window);
@@ -26010,7 +26012,7 @@ void v4k_init() {
__argc = 0;
}
- #ifdef COOK_DISABLED
+ #if defined(COOK_DISABLED) || ENABLE_RETAIL
cook_disable();
#endif
diff --git a/engine/v4k.h b/engine/v4k.h
index c7080c6..96ebad8 100644
--- a/engine/v4k.h
+++ b/engine/v4k.h
@@ -95,7 +95,7 @@ extern "C" {
//-----------------------------------------------------------------------------
// Headers
-#line 1 "v4k_config.h"
+#line 1 "engine/split/v4k_config.h"
// -----------------------------------------------------------------------------
// config directives
@@ -127,6 +127,10 @@ extern "C" {
#define ENABLE_TESTS 0 // ifdef(debug, 1, 0) ///+
#endif
+#ifndef ENABLE_RETAIL
+#define ENABLE_RETAIL 0
+#endif
+
// -----------------------------------------------------------------------------
// if/n/def hell
@@ -429,7 +433,7 @@ typedef char bool;
#endif
#line 0
-#line 1 "v4k_ds.h"
+#line 1 "engine/split/v4k_ds.h"
// data structures and utils: array, set, map, hash, sort.
// - rlyeh, public domain
@@ -893,7 +897,7 @@ enum {
#line 0
-#line 1 "v4k_math.h"
+#line 1 "engine/split/v4k_math.h"
// -----------------------------------------------------------------------------
// math framework: rand, ease, vec2, vec3, vec4, quat, mat2, mat33, mat34, mat4
// - rlyeh, public domain
@@ -1253,7 +1257,7 @@ API void swapf4(vec4 *a, vec4 *b);
#line 0
-#line 1 "v4k_ai.h"
+#line 1 "engine/split/v4k_ai.h"
typedef enum SWARM_DISTANCE {
SWARM_DISTANCE_LINEAR,
SWARM_DISTANCE_INVERSE_LINEAR,
@@ -1306,7 +1310,7 @@ API int ui_swarm(swarm_t *self);
API int pathfind_astar(int width, int height, const unsigned* map, vec2i src, vec2i dst, vec2i* path, size_t maxpath);
#line 0
-#line 1 "v4k_bt.h"
+#line 1 "engine/split/v4k_bt.h"
// Behavior trees: decision planning and decision making.
// Supersedes finite state-machines (FSM) and hierarchical finite state-machines (HFSM).
// - rlyeh, public domain.
@@ -1332,7 +1336,7 @@ API char *bt_funcname(bt_func fn);
API int ui_bt(bt_t *b);
#line 0
-#line 1 "v4k_audio.h"
+#line 1 "engine/split/v4k_audio.h"
// -----------------------------------------------------------------------------
// audio framework
// - rlyeh, public domain
@@ -1393,7 +1397,7 @@ enum AUDIO_FLAGS {
API int audio_queue( const void *samples, int num_samples, int flags );
#line 0
-#line 1 "v4k_buffer.h"
+#line 1 "engine/split/v4k_buffer.h"
// ----------------------------------------------------------------------------
// compression api
@@ -1491,7 +1495,7 @@ API uint64_t crc64(uint64_t h, const void *ptr, uint64_t len);
API void entropy( void *buf, unsigned n );
#line 0
-#line 1 "v4k_collide.h"
+#line 1 "engine/split/v4k_collide.h"
// -----------------------------------------------------------------------------
// original code by @vurtun (PD) and @barerose (CC0).
// [src] https://gist.github.com/vurtun/95f088e4889da2474ad1ce82d7911fee
@@ -1652,7 +1656,7 @@ API poly diamond(vec3 from, vec3 to, float size); // poly_free() required
API void collide_demo(); // debug draw collisions
#line 0
-#line 1 "v4k_cooker.h"
+#line 1 "engine/split/v4k_cooker.h"
// -----------------------------------------------------------------------------
// asset pipeline framework
// - rlyeh, public domain.
@@ -1687,7 +1691,7 @@ API int cook_progress(); // [0..100]
#line 0
-#line 1 "v4k_data.h"
+#line 1 "engine/split/v4k_data.h"
// -----------------------------------------------------------------------------
// data framework (json5, xml, compression) @todo:kvdb
// - rlyeh, public domain
@@ -1726,7 +1730,7 @@ API void xml_pop();
API bool data_tests();
#line 0
-#line 1 "v4k_dll.h"
+#line 1 "engine/split/v4k_dll.h"
// dll utils
// - rlyeh, public domain
@@ -1741,7 +1745,7 @@ API bool data_tests();
API void* dll(const char *filename, const char *symbol);
#line 0
-#line 1 "v4k_editor.h"
+#line 1 "engine/split/v4k_editor.h"
// -----------------------------------------------------------------------------
// in-game editor
// - rlyeh, public domain.
@@ -1786,7 +1790,7 @@ API char* kit_translate2( const char *id, const char *langcode_iso639_1 ); // pe
API void kit_dump_state( FILE *fp );
#line 0
-#line 1 "v4k_file.h"
+#line 1 "engine/split/v4k_file.h"
// -----------------------------------------------------------------------------
// files, cache and virtual filesystem (registered directories and/or compressed zip archives).
// - rlyeh, public domain.
@@ -1886,7 +1890,7 @@ API void ini_destroy(ini_t);
API bool ini_write(const char *filename, const char *section, const char *key, const char *value);
#line 0
-#line 1 "v4k_font.h"
+#line 1 "engine/split/v4k_font.h"
// -----------------------------------------------------------------------------
// font framework
// - rlyeh, public domain
@@ -1978,7 +1982,7 @@ API void* font_colorize(const char *text, const char *comma_types, const char *c
API vec2 font_highlight(const char *text, const void *colors);
#line 0
-#line 1 "v4k_id.h"
+#line 1 "engine/split/v4k_id.h"
// -----------------------------------------------------------------------------
// factory of handle ids, based on code by randy gaul (PD/Zlib licensed)
// - rlyeh, public domain
@@ -2007,7 +2011,7 @@ bool id_valid(uintptr_t id);
#define ID_DATA_BITS (64-ID_COUNT_BITS)
#line 0
-#line 1 "v4k_pack.h"
+#line 1 "engine/split/v4k_pack.h"
// ----------------------------------------------------------------------------
// endianness
@@ -2198,7 +2202,7 @@ API int loadf(FILE *file, const char *format, ...);
API int loadb(const unsigned char *buf, const char *format, ...);
#line 0
-#line 1 "v4k_input.h"
+#line 1 "engine/split/v4k_input.h"
// -----------------------------------------------------------------------------
// input framework
// - rlyeh, public domain
@@ -2318,7 +2322,7 @@ enum INPUT_ENUMS {
};
#line 0
-#line 1 "v4k_memory.h"
+#line 1 "engine/split/v4k_memory.h"
// -----------------------------------------------------------------------------
// memory framework
// - rlyeh, public domain
@@ -2358,7 +2362,7 @@ static FORCE_INLINE void *(CALLOC_)(size_t m, size_t n) { return n *= m, memset(
static FORCE_INLINE char *(STRDUP_)(const char *s) { size_t n = strlen(s)+1; return ((char*)memcpy(REALLOC(0,n), s, n)); } ///-
#line 0
-#line 1 "v4k_network.h"
+#line 1 "engine/split/v4k_network.h"
// -----------------------------------------------------------------------------
// network framework
// - rlyeh, public domain
@@ -2410,7 +2414,7 @@ API int tcp_debug(int); // toggle traffic monitoring on/off for given socket
//API int tcp_crypt(int,uint64_t); // set shared secret
#line 0
-#line 1 "v4k_netsync.h"
+#line 1 "engine/split/v4k_netsync.h"
// high-level, socket-less networking api. inspired by Quake, MPI and RenderBuckets theories.
// - rlyeh, public domain
//
@@ -2496,7 +2500,7 @@ API int64_t client_join(const char *ip, int port);
#define LOCALHOST_IPV6 "::1"
#line 0
-#line 1 "v4k_obj.h"
+#line 1 "engine/split/v4k_obj.h"
// -----------------------------------------------------------------------------
// semantic versioning in a single byte (octal)
// - rlyeh, public domain.
@@ -2556,7 +2560,7 @@ typedef struct double4 { double x,y,z,w; } double4;
#define double4(x,y,z,w) M_CAST(double4, (double)(x), (double)(y), (double)(z), (double)(w) )
#line 0
-#line 1 "v4k_profile.h"
+#line 1 "engine/split/v4k_profile.h"
// -----------------------------------------------------------------------------
// profiler & stats (@fixme: threadsafe)
@@ -2588,7 +2592,7 @@ extern API int profiler_enabled; ///-
#endif
#line 0
-#line 1 "v4k_reflect.h"
+#line 1 "engine/split/v4k_reflect.h"
// C reflection: enums, functions, structs, members and anotations.
// - rlyeh, public domain
//
@@ -2650,7 +2654,7 @@ API void reflected_printf(reflected_t *r);
API void reflected_printf_all();
#line 0
-#line 1 "v4k_render.h"
+#line 1 "engine/split/v4k_render.h"
// -----------------------------------------------------------------------------
// naive rendering framework
// - rlyeh, public domain
@@ -3352,7 +3356,7 @@ API void* screenshot(int components); // 3 RGB, 4 RGBA, -3 BGR, -4 BGRA
API void* screenshot_async(int components); // 3 RGB, 4 RGBA, -3 BGR, -4 BGRA
#line 0
-#line 1 "v4k_renderdd.h"
+#line 1 "engine/split/v4k_renderdd.h"
// -----------------------------------------------------------------------------
// debugdraw framework
// - rlyeh, public domain.
@@ -3419,7 +3423,7 @@ API void ddraw_flush();
API void ddraw_flush_projview(mat44 proj, mat44 view);
#line 0
-#line 1 "v4k_scene.h"
+#line 1 "engine/split/v4k_scene.h"
// -----------------------------------------------------------------------------
// scene framework
// - rlyeh, public domain
@@ -3556,7 +3560,7 @@ API unsigned scene_count_light();
API light_t* scene_index_light(unsigned index);
#line 0
-#line 1 "v4k_script.h"
+#line 1 "engine/split/v4k_script.h"
// -----------------------------------------------------------------------------
// script framework
// - rlyeh, public domain
@@ -3572,7 +3576,7 @@ API void script_call(const char *lua_function);
API bool script_tests();
#line 0
-#line 1 "v4k_string.h"
+#line 1 "engine/split/v4k_string.h"
// string framework
// - rlyeh, public domain
@@ -3666,7 +3670,7 @@ unsigned quark_intern( quarks_db*, const char *string );
const char *quark_string( quarks_db*, unsigned key );
#line 0
-#line 1 "v4k_time.h"
+#line 1 "engine/split/v4k_time.h"
// -----------------------------------------------------------------------------
// time framework utils
// - rlyeh, public domain.
@@ -3713,7 +3717,7 @@ AUTORUN {
*/
#line 0
-#line 1 "v4k_system.h"
+#line 1 "engine/split/v4k_system.h"
// -----------------------------------------------------------------------------
// system framework utils
// - rlyeh, public domain.
@@ -3794,7 +3798,7 @@ API int (test)(const char *file, int line, const char *expr, bool result);
#line 0
-#line 1 "v4k_ui.h"
+#line 1 "engine/split/v4k_ui.h"
// -----------------------------------------------------------------------------
// immediate ui framework
// - rlyeh, public domain
@@ -3884,7 +3888,7 @@ API int ui_active(); // ui_is_active()?
API int ui_demo(int do_windows);
#line 0
-#line 1 "v4k_video.h"
+#line 1 "engine/split/v4k_video.h"
// -----------------------------------------------------------------------------
// video decoder (mpeg)
// - rlyeh, public domain
@@ -3927,7 +3931,7 @@ API bool record_active();
API void record_stop(void);
#line 0
-#line 1 "v4k_window.h"
+#line 1 "engine/split/v4k_window.h"
// -----------------------------------------------------------------------------
// window framework
// - rlyeh, public domain
diff --git a/tools/join.py b/tools/join.py
index d97c740..1bb6413 100644
--- a/tools/join.py
+++ b/tools/join.py
@@ -35,7 +35,7 @@ def process_command(name, value):
file_path = os.path.join(input_path, value)
print("Appending file: " + value)
with open(file_path, "r") as file:
- res = "#line 1 \"" + value + "\"\n"
+ res = "#line 1 \"engine/split/" + value + "\"\n"
res += file.read()
res += "#line 0"
return res