Compare commits

..

3 Commits

Author SHA1 Message Date
mid
2e730baf33 Scriptable near and far planes 2025-09-30 11:05:33 +03:00
mid
462412c31a Already .k3m has some legacy bullshit 2025-09-30 11:05:12 +03:00
mid
e4b5f8d361 streamloader return value 2025-09-19 23:11:42 +03:00
4 changed files with 24 additions and 6 deletions

View File

@ -25,6 +25,9 @@ static int mdlloader(void *ud, struct ResManRes *res) {
} header; } header;
fread(&header, 4, 4, f); fread(&header, 4, 4, f);
// ' ' or '1'
char version = ((char*) &header.magic)[3];
int colorsEnabled = header.flags & 1; int colorsEnabled = header.flags & 1;
mat4 *invBind = _mm_malloc(sizeof(*invBind) * header.boneCount, 16); mat4 *invBind = _mm_malloc(sizeof(*invBind) * header.boneCount, 16);
@ -83,8 +86,11 @@ static int mdlloader(void *ud, struct ResManRes *res) {
fread(&meshes, sizeof(uint16_t), 1, f); fread(&meshes, sizeof(uint16_t), 1, f);
for(uint32_t i = 0; i < meshes; i++) { for(uint32_t i = 0; i < meshes; i++) {
uint16_t startnum[2]; uint32_t start = 0;
fread(startnum, sizeof(uint16_t), 2, f); uint32_t number = 0;
fread(&start, version == ' ' ? sizeof(uint16_t) : sizeof(uint32_t), 1, f);
fread(&number, version == ' ' ? sizeof(uint16_t) : sizeof(uint32_t), 1, f);
char buf[256] = {}; char buf[256] = {};
for(int c = 0; c < sizeof(buf) - 1; c++) { for(int c = 0; c < sizeof(buf) - 1; c++) {
@ -94,7 +100,7 @@ static int mdlloader(void *ud, struct ResManRes *res) {
} }
} }
k3MdlAddMesh(mdl, resman_ref(RESMAN_MATERIAL, buf), startnum[0], startnum[1]); k3MdlAddMesh(mdl, resman_ref(RESMAN_MATERIAL, buf), start, number);
} }
for(size_t i = 0; i < header.animCount; i++) { for(size_t i = 0; i < header.animCount; i++) {
@ -178,7 +184,7 @@ static int streamloader(void *ud, struct ResManRes *res) {
snprintf(namebuf, sizeof(namebuf), "assets/aud/%s", res->name); snprintf(namebuf, sizeof(namebuf), "assets/aud/%s", res->name);
res->thing = k3MixSourceFile(namebuf); res->thing = k3MixSourceFile(namebuf);
return 1; return !!res->thing;
} }
static int refresh_texture(struct ResManRes *res) { static int refresh_texture(struct ResManRes *res) {

View File

@ -385,7 +385,9 @@ static int game_addentity(lua_State *L) {
} }
double LuaapiStartTime; double LuaapiStartTime;
float LuaapiFov = 75; float LuaapiFov = 75.0f;
float LuaapiNear = 0.01f;
float LuaapiFar = 80.0f;
static int gametriggersref; static int gametriggersref;
static int luaapi_triggerfunc(size_t id, uint16_t ethis, uint16_t ethat, uint8_t event) { static int luaapi_triggerfunc(size_t id, uint16_t ethis, uint16_t ethat, uint8_t event) {
@ -1276,6 +1278,10 @@ static int game_get(lua_State *L) {
} }
} else if(!strcmp(i, "fov")) { } else if(!strcmp(i, "fov")) {
lua_pushnumber(L, LuaapiFov); lua_pushnumber(L, LuaapiFov);
} else if(!strcmp(i, "near")) {
lua_pushnumber(L, LuaapiNear);
} else if(!strcmp(i, "far")) {
lua_pushnumber(L, LuaapiFar);
} else if(!strcmp(i, "rate")) { } else if(!strcmp(i, "rate")) {
lua_pushinteger(L, GAME_TPS); lua_pushinteger(L, GAME_TPS);
} else if(!strcmp(i, "camera")) { } else if(!strcmp(i, "camera")) {
@ -1305,6 +1311,10 @@ static int game_set(lua_State *L) {
Game.spectated = lua_isnil(L, 3) ? ENT_ID_INVALID : lua_tointeger(L, 3); Game.spectated = lua_isnil(L, 3) ? ENT_ID_INVALID : lua_tointeger(L, 3);
} else if(!strcmp(i, "fov")) { } else if(!strcmp(i, "fov")) {
LuaapiFov = lua_tonumber(L, 3); LuaapiFov = lua_tonumber(L, 3);
} else if(!strcmp(i, "near")) {
LuaapiNear = lua_tonumber(L, 3);
} else if(!strcmp(i, "far")) {
LuaapiFar = lua_tonumber(L, 3);
} else if(!strcmp(i, "menu")) { } else if(!strcmp(i, "menu")) {
struct menuitem *item = lua_touserdata(L, 3); struct menuitem *item = lua_touserdata(L, 3);
UiActive = item ? item->ptr : NULL; UiActive = item ? item->ptr : NULL;

View File

@ -14,6 +14,8 @@ extern int LuaapiFirstPerson;
extern double LuaapiStartTime; extern double LuaapiStartTime;
extern float LuaapiFov; extern float LuaapiFov;
extern float LuaapiNear;
extern float LuaapiFar;
extern struct k3Tex *LuaapiSkybox; extern struct k3Tex *LuaapiSkybox;
extern vec4 LuaapiSkyboxRotation; extern vec4 LuaapiSkyboxRotation;

View File

@ -505,7 +505,7 @@ int main(int argc_, char **argv_) {
glfwGetFramebufferSize(GameWnd, &width, &height); glfwGetFramebufferSize(GameWnd, &width, &height);
mat4 proj; mat4 proj;
glm_perspective(glm_rad(LuaapiFov), (float) width / height, 0.1f, 80.f, proj); glm_perspective(glm_rad(LuaapiFov), (float) width / height, LuaapiNear, LuaapiFar, proj);
/* Third-person camera movement */ /* Third-person camera movement */
struct LocalRay camray = {}; struct LocalRay camray = {};