("name",c_byte*16)]
#}
+class array_file_header(Structure):
+#{
+ _fields_ = [("version",c_uint32),
+ ("index",array_file_meta)]
+#}
+
def str_into_buf( str, buf ):
#{
for i in range(len(str)):
("glname",c_uint32)]
#}
-class mdl_header(Structure):
-#{
- _fields_ = [("version",c_uint32),
- ("index",array_file_meta)]
-#}
-
class ent_spawn(Structure):
#{
_fields_ = [("transform",mdl_transform),
os.makedirs(os.path.dirname(path),exist_ok=True)
- header = mdl_header()
+ header = array_file_header()
header.version = MDL_VERSION_NR
array_file_write( path, header, arrays )
_ms_compiler.overrides = []
#}
-class ms_header(Structure):
+class ms_scene_info(Structure):
#{
- _fields_ = [("version",c_uint32),
- ("framerate",c_float),
- ("index",array_file_meta)]
+ _fields_ = [("framerate",c_float)]
#}
class ms_curve_keyframe(Structure):
_ms_compiler.strips.sort( key=lambda s: s.offset )
+ info = ms_scene_info()
+ info.framerate = bpy.context.scene.render.fps
+
arrays = {
'strings': _ms_compiler.strings.buffer,
'ms_strip': _ms_compiler.strips,
'ms_keyframe': _ms_compiler.keyframes,
'ms_curves': _ms_compiler.curve_keyframes,
'ms_instance': _ms_compiler.instances,
- 'ms_override': _ms_compiler.overrides
+ 'ms_override': _ms_compiler.overrides,
+ 'ms_scene_info': [ info ]
}
- header = ms_header()
- header.version = 1
- header.framerate = bpy.context.scene.render.fps
+ header = array_file_header()
+ header.version = 2
array_file_write( path, header, arrays )
_ms_compiler.status = F"Written to {path}"
#include "array_file.h"
+#include <errno.h>
const char *ps_get( array_file_ptr *strings, u32 pstr )
{
else return 0;
}
-static void af_load_array_file_buffer( FILE *fp, array_file_meta *arr,
+static void af_load_array_file_buffer( array_file_context *ctx,
+ array_file_meta *arr,
void *buffer, u32 stride )
{
if( arr->item_count )
{
- fseek( fp, arr->file_offset, SEEK_SET );
+ fseek( ctx->fp, arr->file_offset, SEEK_SET );
if( stride == arr->item_size )
{
- u64 l = fread( buffer, arr->item_size*arr->item_count, 1, fp );
+ u64 l = fread( buffer, arr->item_size*arr->item_count, 1, ctx->fp );
if( l != 1 )
{
- vg_file_error_info( fp );
- fclose( fp );
+ vg_file_error_info( ctx->fp );
+ fclose( ctx->fp );
vg_fatal_exit();
}
}
for( u32 i=0; i<arr->item_count; i++ )
{
- u64 l = fread( buffer+i*stride, read_size, 1, fp );
+ u64 l = fread( buffer+i*stride, read_size, 1, ctx->fp );
if( stride < arr->item_size )
- fseek( fp, arr->item_size - stride, SEEK_CUR );
+ fseek( ctx->fp, arr->item_size - stride, SEEK_CUR );
if( l != 1 )
{
- vg_file_error_info( fp );
- fclose( fp );
+ vg_file_error_info( ctx->fp );
+ fclose( ctx->fp );
vg_fatal_exit();
}
}
}
}
-void af_load_array_file( FILE *fp, array_file_ptr *ptr,
- array_file_meta *arr, void *lin_alloc,
- u32 stride )
+void af_load_array_file( array_file_context *ctx, array_file_ptr *out_ptr,
+ array_file_meta *arr, void *lin_alloc, u32 stride )
{
if( arr->item_count )
{
u32 size = stride*arr->item_count;
- ptr->data = lin_alloc? vg_linear_alloc( lin_alloc, vg_align8(size) ):
- malloc( size );
- af_load_array_file_buffer( fp, arr, ptr->data, stride );
+ out_ptr->data = lin_alloc? vg_linear_alloc( lin_alloc, vg_align8(size) ):
+ malloc( size );
+ af_load_array_file_buffer( ctx, arr, out_ptr->data, stride );
}
else
{
- ptr->data = NULL;
+ out_ptr->data = NULL;
}
- ptr->stride = stride;
- ptr->count = arr->item_count;
+ out_ptr->stride = stride;
+ out_ptr->count = arr->item_count;
}
void *af_arritm( array_file_ptr *arr, u32 index )
return arr->count;
}
-array_file_meta *af_find_array( array_file_ptr *index, const char *name )
+array_file_meta *af_find_array( array_file_context *ctx, const char *name )
{
- for( u32 i=0; i<af_arrcount(index); i++ )
+ for( u32 i=0; i<af_arrcount(&ctx->index); i++ )
{
- array_file_meta *arr = af_arritm( index, i );
+ array_file_meta *arr = af_arritm( &ctx->index, i );
if( !strncmp(arr->name,name,16) )
return arr;
return NULL;
}
-int af_load_array( FILE *fp, array_file_ptr *index, array_file_ptr *ptr,
+int af_load_array( array_file_context *ctx, array_file_ptr *ptr,
const char *name, void *lin_alloc, u32 stride )
{
- array_file_meta *arr = af_find_array( index, name );
+ array_file_meta *arr = af_find_array( ctx, name );
if( arr )
{
- af_load_array_file( fp, ptr, arr, lin_alloc, stride );
+ af_load_array_file( ctx, ptr, arr, lin_alloc, stride );
return 1;
}
else
return 0;
}
}
+
+void af_open( array_file_context *ctx, const char *path,
+ u32 min_version, u32 max_version, void *lin_alloc )
+{
+ ctx->fp = fopen( path, "rb" );
+ if( !ctx->fp )
+ {
+ vg_fatal_condition();
+ vg_info( "open('%s'): %s\n", path, strerror(errno) );
+ vg_fatal_exit();
+ }
+
+ u64 l = fread( &ctx->header, sizeof(array_file_header), 1, ctx->fp );
+ if( l != 1 )
+ {
+ fclose( ctx->fp );
+ vg_fatal_error( "Array file corrupt\n" );
+ }
+
+ if( ctx->header.version < min_version || ctx->header.version > max_version )
+ {
+ vg_fatal_condition();
+ vg_info( "Legacy model version incompatable" );
+ vg_info( "For model: %s\n", path );
+ vg_info( " version: %u (min: %u, max: %u)\n",
+ ctx->header.version, min_version, max_version );
+ fclose( ctx->fp );
+ vg_fatal_exit();
+ }
+
+ af_load_array_file( ctx, &ctx->index, &ctx->header.index, lin_alloc,
+ sizeof(array_file_meta) );
+}
+
+void af_close( array_file_context *ctx )
+{
+ fclose( ctx->fp );
+ ctx->fp = NULL;
+}
typedef struct array_file_ptr array_file_ptr;
typedef struct array_file_meta array_file_meta;
+typedef struct array_file_header array_file_header;
+typedef struct array_file_context array_file_context;
struct array_file_ptr
{
char name[16];
};
+struct array_file_header
+{
+ u32 version;
+ array_file_meta index;
+};
+
+struct array_file_context
+{
+ FILE *fp;
+ array_file_header header;
+ array_file_ptr index;
+};
+
+void af_open( array_file_context *ctx, const char *path,
+ u32 min_version, u32 max_version, void *lin_alloc );
+void af_close( array_file_context *ctx );
+
/* array loading */
-array_file_meta *af_find_array( array_file_ptr *index, const char *name );
-void af_load_array_file( FILE *fp, array_file_ptr *ptr,
+array_file_meta *af_find_array( array_file_context *ctx, const char *name );
+void af_load_array_file( array_file_context *ctx, array_file_ptr *out_ptr,
array_file_meta *arr, void *lin_alloc,
u32 stride );
-int af_load_array( FILE *fp, array_file_ptr *index, array_file_ptr *ptr,
+int af_load_array( array_file_context *ctx, array_file_ptr *ptr,
const char *name, void *lin_alloc, u32 stride );
-#define AF_LOAD_ARRAY_STRUCT( FP, INDEX, PTR, STRUCT, ALLOCATOR ) \
- af_load_array( FP, INDEX, PTR, #STRUCT, ALLOCATOR, sizeof(STRUCT) )
+#define AF_LOAD_ARRAY_STRUCT( CTX, PTR, STRUCT, ALLOCATOR ) \
+ af_load_array( CTX, PTR, #STRUCT, ALLOCATOR, sizeof(STRUCT) )
/* array access */
void *af_arritm( array_file_ptr *arr, u32 index );
world_total &= combined;
/* run unlock triggers. v105+ */
- if( world->meta.info.version >= 105 ){
+ if( world->meta.version >= 105 ){
if( region->flags & (k_ent_route_flag_achieve_gold|
k_ent_route_flag_achieve_silver) ){
if( region->target0[0] ){
u32 cam_id = 0;
- if( __builtin_expect( world->meta.info.version >= 103, 1 ) )
+ if( __builtin_expect( world->meta.version >= 103, 1 ) )
cam_id = route->id_camera;
world_entity_focus_camera( world, cam_id );
vg_linear_clear( vg_mem.scratch );
array_file_ptr fonts;
- MDL_LOAD_ARRAY_STRUCT( mdl, &fonts, ent_font, vg_mem.scratch );
+ AF_LOAD_ARRAY_STRUCT( &mdl->af, &fonts, ent_font, vg_mem.scratch );
font->info = *((ent_font *)af_arritm(&fonts,0));
- MDL_LOAD_ARRAY_STRUCT( mdl, &font->font_variants, ent_font_variant, alloc);
- MDL_LOAD_ARRAY_STRUCT( mdl, &font->glyphs, ent_glyph, alloc );
+ AF_LOAD_ARRAY_STRUCT( &mdl->af, &font->font_variants,
+ ent_font_variant, alloc );
+ AF_LOAD_ARRAY_STRUCT( &mdl->af, &font->glyphs, ent_glyph, alloc );
vg_linear_clear( vg_mem.scratch );
void metascene_load( ms_context *ms, const char *path, void *alloc )
{
- memset( ms, 0, sizeof( ms_context ) );
- FILE *fp = fopen( path, "rb" );
-
- if( !fp )
- {
- vg_fatal_condition();
- vg_info( "metascene_load( '%s' ): %s\n", path, strerror(errno) );
- vg_fatal_exit();
- }
-
- u64 l = fread( &ms->info, sizeof(ms_header), 1, fp );
- if( l != 1 )
+ af_open( &ms->af, path, MS_VERSION_MIN, MS_VERSION_NR, alloc );
+ af_load_array( &ms->af, &ms->strings, "strings", alloc, 1 );
+ AF_LOAD_ARRAY_STRUCT( &ms->af, &ms->infos, ms_scene_info, alloc );
+ AF_LOAD_ARRAY_STRUCT( &ms->af, &ms->instances, ms_instance, alloc );
+ AF_LOAD_ARRAY_STRUCT( &ms->af, &ms->overrides, ms_override, alloc );
+ AF_LOAD_ARRAY_STRUCT( &ms->af, &ms->strips, ms_strip, alloc );
+ AF_LOAD_ARRAY_STRUCT( &ms->af, &ms->tracks, ms_track, alloc );
+ AF_LOAD_ARRAY_STRUCT( &ms->af, &ms->keyframes, ms_keyframe, alloc );
+ af_load_array( &ms->af, &ms->curves, "ms_curves",
+ alloc, sizeof(ms_curve_keyframe) );
+ af_close( &ms->af );
+
+ if( af_arrcount( &ms->infos ) )
{
- vg_fatal_condition();
- vg_info( "Read corruption error" );
- vg_fatal_exit();
+ ms_scene_info *src_inf = af_arritm( &ms->infos, 0 );
+ ms->info = *src_inf;
}
-
- if( ms->info.version < MS_VERSION_MIN )
+ else
{
- vg_fatal_condition();
- vg_info( "Legacy metascene version incompatable" );
- vg_info( "For file: %s\n", path );
- vg_info( " version: %u (min: %u, current: %u)\n",
- ms->info.version, MS_VERSION_MIN, MS_VERSION_NR );
- vg_fatal_exit();
+ vg_fatal_error( "No scene info in metascene.\n" );
}
-
- af_load_array_file( fp, &ms->index, &ms->info.index, alloc,
- sizeof(array_file_meta) );
-
- af_load_array( fp, &ms->index, &ms->strings, "strings", alloc, 1 );
- AF_LOAD_ARRAY_STRUCT( fp, &ms->index, &ms->instances, ms_instance, alloc );
- AF_LOAD_ARRAY_STRUCT( fp, &ms->index, &ms->overrides, ms_override, alloc );
- AF_LOAD_ARRAY_STRUCT( fp, &ms->index, &ms->strips, ms_strip, alloc );
- AF_LOAD_ARRAY_STRUCT( fp, &ms->index, &ms->tracks, ms_track, alloc );
- AF_LOAD_ARRAY_STRUCT( fp, &ms->index, &ms->keyframes, ms_keyframe, alloc );
- af_load_array( fp, &ms->index, &ms->curves, "ms_curves",
- alloc, sizeof(ms_curve_keyframe) );
- fclose( fp );
}
struct
#include "model.h"
#include "world.h"
-#define MS_VERSION_NR 1
-#define MS_VERSION_MIN 1
+#define MS_VERSION_NR 2
+#define MS_VERSION_MIN 2
+typedef struct ms_scene_info ms_scene_info;
typedef struct ms_context ms_context;
-typedef struct ms_header ms_header;
typedef struct ms_instance ms_instance;
typedef struct ms_override ms_override;
typedef struct ms_strip ms_strip;
typedef struct ms_curve_keyframe ms_curve_keyframe;
typedef struct mdl_transform ms_keyframe;
-struct ms_header
+struct ms_scene_info
{
- u32 version;
f32 framerate;
- array_file_meta index;
};
struct ms_context
{
- ms_header info;
- struct array_file_ptr index,
- strings,
+ array_file_context af;
+ ms_scene_info info;
+ struct array_file_ptr strings,
+
+ infos,
instances,
overrides,
strips,
#include "shader_props.h"
#include "array_file.h"
-static void mdl_load_fatal_corrupt( mdl_context *mdl )
-{
- vg_fatal_condition();
- vg_file_error_info( mdl->file );
- fclose( mdl->file );
- vg_fatal_exit();
-}
-
/*
* Model implementation
*/
vg_fatal_exit();
}
- fseek( mdl->file, mdl->pack_base_offset+info->pack_offset, SEEK_SET );
- u64 l = fread( dst, info->pack_size, 1, mdl->file );
+ fseek( mdl->af.fp, mdl->pack_base_offset+info->pack_offset, SEEK_SET );
+ u64 l = fread( dst, info->pack_size, 1, mdl->af.fp );
- if( l != 1 ) mdl_load_fatal_corrupt( mdl );
-}
-
-int mdl_load_array( mdl_context *mdl, array_file_ptr *ptr, const char *name,
- void *lin_alloc, u32 stride )
-{
- return af_load_array( mdl->file, &mdl->index, ptr, name, lin_alloc, stride );
+ if( l != 1 )
+ {
+ af_close( &mdl->af );
+ vg_fatal_error( "Pack data corruption\n" );
+ }
}
-int mdl_load_mesh_block( mdl_context *mdl, void *lin_alloc )
+void mdl_load_mesh_block( mdl_context *mdl, void *lin_alloc )
{
- int s = 1;
- s &= MDL_LOAD_ARRAY_STRUCT( mdl, &mdl->verts, mdl_vert, lin_alloc );
- s &= MDL_LOAD_ARRAY_STRUCT( mdl, &mdl->indices, mdl_indice, lin_alloc );
- return s;
+ AF_LOAD_ARRAY_STRUCT( &mdl->af, &mdl->verts, mdl_vert, lin_alloc );
+ AF_LOAD_ARRAY_STRUCT( &mdl->af, &mdl->indices, mdl_indice, lin_alloc );
}
-int mdl_load_metadata_block( mdl_context *mdl, void *lin_alloc )
+void mdl_load_metadata_block( mdl_context *mdl, void *lin_alloc )
{
- int s = 1;
- s &= mdl_load_array ( mdl, &mdl->strings, "strings", lin_alloc, 1 );
- s &= MDL_LOAD_ARRAY_STRUCT( mdl, &mdl->meshs, mdl_mesh, lin_alloc );
- s &= MDL_LOAD_ARRAY_STRUCT( mdl, &mdl->submeshs, mdl_submesh, lin_alloc );
- s &= MDL_LOAD_ARRAY_STRUCT( mdl, &mdl->textures, mdl_texture, lin_alloc );
- s &= MDL_LOAD_ARRAY_STRUCT( mdl, &mdl->armatures, mdl_armature, lin_alloc );
- s &= MDL_LOAD_ARRAY_STRUCT( mdl, &mdl->bones, mdl_bone, lin_alloc );
- s &= mdl_load_materials( mdl, lin_alloc );
- return s;
+ af_load_array ( &mdl->af, &mdl->strings, "strings", lin_alloc, 1 );
+ AF_LOAD_ARRAY_STRUCT( &mdl->af, &mdl->meshs, mdl_mesh, lin_alloc );
+ AF_LOAD_ARRAY_STRUCT( &mdl->af, &mdl->submeshs, mdl_submesh, lin_alloc );
+ AF_LOAD_ARRAY_STRUCT( &mdl->af, &mdl->textures, mdl_texture, lin_alloc );
+ AF_LOAD_ARRAY_STRUCT( &mdl->af, &mdl->armatures, mdl_armature, lin_alloc );
+ AF_LOAD_ARRAY_STRUCT( &mdl->af, &mdl->bones, mdl_bone, lin_alloc );
+ mdl_load_materials( mdl, lin_alloc );
}
void *mdl_shader_standard( vg_msg *msg, void *alloc )
return 1;
}
-int mdl_load_materials( mdl_context *mdl, void *lin_alloc )
+void mdl_load_materials( mdl_context *mdl, void *lin_alloc )
{
- MDL_LOAD_ARRAY_STRUCT( mdl, &mdl->materials, mdl_material, lin_alloc );
+ AF_LOAD_ARRAY_STRUCT( &mdl->af, &mdl->materials, mdl_material, lin_alloc );
#if (MDL_VERSION_MIN <= 105)
/* load legacy material data into scratch */
array_file_ptr legacy_materials;
- if( mdl->info.version <= 105 )
+ if( mdl->version <= 105 )
{
- mdl_load_array( mdl, &legacy_materials, "mdl_material", vg_mem.scratch,
- sizeof(struct mdl_material_v105) );
+ af_load_array( &mdl->af, &legacy_materials, "mdl_material",
+ vg_mem.scratch, sizeof(struct mdl_material_v105) );
}
#endif
array_file_ptr data;
- mdl_load_array( mdl, &data, "shader_data", vg_mem.scratch, 1 );
+ af_load_array( &mdl->af, &data, "shader_data", vg_mem.scratch, 1 );
if( !lin_alloc )
- return 1;
+ return;
for( u32 i=0; i<af_arrcount(&mdl->materials); i ++ )
{
#if (MDL_VERSION_MIN <= 105)
u8 legacy_buf[512];
- if( mdl->info.version <= 105 )
+ if( mdl->version <= 105 )
{
vg_msg_init( &msg, legacy_buf, sizeof(legacy_buf) );
mdl_legacy_v105_properties( af_arritm( &legacy_materials,i ), &msg );
else
mat->props.compiled = NULL;
}
-
- return 1;
}
/*
void mdl_open( mdl_context *mdl, const char *path, void *lin_alloc )
{
memset( mdl, 0, sizeof( mdl_context ) );
- mdl->file = fopen( path, "rb" );
-
- if( !mdl->file )
- {
- vg_fatal_condition();
- vg_info( "mdl_open('%s'): %s\n", path, strerror(errno) );
- vg_fatal_exit();
- }
-
- u64 l = fread( &mdl->info, sizeof(mdl_header), 1, mdl->file );
- if( l != 1 )
- mdl_load_fatal_corrupt( mdl );
-
- if( mdl->info.version < MDL_VERSION_MIN )
- {
- vg_fatal_condition();
- vg_info( "Legacy model version incompatable" );
- vg_info( "For model: %s\n", path );
- vg_info( " version: %u (min: %u, current: %u)\n",
- mdl->info.version, MDL_VERSION_MIN, MDL_VERSION_NR );
- vg_fatal_exit();
- }
-
- af_load_array_file( mdl->file, &mdl->index, &mdl->info.index, lin_alloc,
- sizeof(array_file_meta) );
+ af_open( &mdl->af, path, MDL_VERSION_MIN, MDL_VERSION_NR, lin_alloc );
+ mdl->version = mdl->af.header.version;
- array_file_meta *pack = af_find_array( &mdl->index, "pack" );
+ array_file_meta *pack = af_find_array( &mdl->af, "pack" );
if( pack ) mdl->pack_base_offset = pack->file_offset;
else mdl->pack_base_offset = 0;
}
*/
void mdl_close( mdl_context *mdl )
{
- fclose( mdl->file );
- mdl->file = NULL;
+ af_close( &mdl->af );
}
/* useful things you can do with the model */
void mdl_async_load_glmesh( mdl_context *mdl, glmesh *mesh, u32 *fixup_table )
{
- array_file_meta *arr_vertices = af_find_array( &mdl->index, "mdl_vert" );
- array_file_meta *arr_indices = af_find_array( &mdl->index, "mdl_indice" );
+ array_file_meta *arr_vertices = af_find_array( &mdl->af, "mdl_vert" );
+ array_file_meta *arr_indices = af_find_array( &mdl->af, "mdl_indice" );
if( arr_vertices && arr_indices )
{
job->vertex_count = arr_vertices->item_count;
job->indice_count = arr_indices->item_count;
- af_load_array_file_buffer( mdl->file, arr_vertices,
+ af_load_array_file_buffer( &mdl->af, arr_vertices,
job->verts, sizeof(mdl_vert) );
- af_load_array_file_buffer( mdl->file, arr_indices, job->indices,
+ af_load_array_file_buffer( &mdl->af, arr_indices, job->indices,
sizeof(mdl_indice) );
if( fixup_table )
u32 glname;
};
-struct mdl_header
-{
- u32 version;
- array_file_meta index;
-};
-
struct mdl_context
{
- FILE *file;
- mdl_header info;
+ array_file_context af;
+ u32 version;
- struct array_file_ptr index,
+ struct array_file_ptr
/* metadata */
strings,
/* mesh buffers */
verts,
indices;
+
u32 pack_base_offset;
/* runtime */
void mdl_open( mdl_context *mdl, const char *path, void *lin_alloc );
void mdl_close( mdl_context *mdl );
-int mdl_load_array( mdl_context *mdl, array_file_ptr *ptr, const char *name,
- void *lin_alloc, u32 stride );
-
-#define MDL_LOAD_ARRAY_STRUCT( MDL, PTR, STRUCT, ALLOCATOR ) \
- mdl_load_array( MDL, PTR, #STRUCT, ALLOCATOR, sizeof(STRUCT) )
-
/* pack access */
void mdl_fread_pack_file( mdl_context *mdl, mdl_file *info, void *dst );
/* standard array groups */
-int mdl_load_metadata_block( mdl_context *mdl, void *lin_alloc );
-int mdl_load_mesh_block( mdl_context *mdl, void *lin_alloc );
-int mdl_load_materials( mdl_context *mdl, void *lin_alloc );
+void mdl_load_metadata_block( mdl_context *mdl, void *lin_alloc );
+void mdl_load_mesh_block( mdl_context *mdl, void *lin_alloc );
+void mdl_load_materials( mdl_context *mdl, void *lin_alloc );
/* load mesh */
void mdl_async_load_glmesh( mdl_context *mdl, glmesh *mesh, u32 *fixup_table );
/* load trail positions */
array_file_ptr markers;
- MDL_LOAD_ARRAY_STRUCT( mdl, &markers, ent_marker, vg_mem.scratch );
+ AF_LOAD_ARRAY_STRUCT( &mdl->af, &markers, ent_marker, vg_mem.scratch );
mdl_close( mdl );
for( u32 i=0; i<af_arrcount( &markers ); i ++ )
dynamic_model_load( &ctx, &board->mdl, path, NULL );
array_file_ptr markers;
- MDL_LOAD_ARRAY_STRUCT( &ctx, &markers, ent_marker, vg_mem.scratch );
+ AF_LOAD_ARRAY_STRUCT( &ctx.af, &markers, ent_marker, vg_mem.scratch );
/* TODO: you get put into a new section, the above is standard mdl loads. */
for( int i=0; i<4; i++ )
v4_copy( gate->q[0], gate2->q[1] );
v4_copy( gate2->q[0], gate->q[1] );
- if( world->meta.info.version < 102 ){
+ if( world->meta.version < 102 ){
/* LEGACY BEHAVIOUR: v101
* this would flip both the client worlds portal's entrance and
* exit. effectively the clients portal would be the opposite
world->heap = heap;
mdl_context *meta = &world->meta;
+ array_file_context *af = &meta->af;
mdl_open( meta, path, world->heap );
mdl_load_metadata_block( meta, world->heap );
vg_info( "%u\n", sizeof(ent_cubemap) );
- MDL_LOAD_ARRAY_STRUCT( meta, &world->ent_gate, ent_gate, heap );
- MDL_LOAD_ARRAY_STRUCT( meta, &world->ent_camera, ent_camera, heap );
- MDL_LOAD_ARRAY_STRUCT( meta, &world->ent_spawn, ent_spawn, heap );
- MDL_LOAD_ARRAY_STRUCT( meta, &world->ent_light, ent_light, heap );
- MDL_LOAD_ARRAY_STRUCT( meta, &world->ent_route_node,ent_route_node, heap );
- MDL_LOAD_ARRAY_STRUCT( meta, &world->ent_path_index,ent_path_index, heap );
- MDL_LOAD_ARRAY_STRUCT( meta, &world->ent_checkpoint,ent_checkpoint, heap );
- MDL_LOAD_ARRAY_STRUCT( meta, &world->ent_route, ent_route, heap );
- MDL_LOAD_ARRAY_STRUCT( meta, &world->ent_water, ent_water, heap );
- MDL_LOAD_ARRAY_STRUCT( meta, &world->ent_audio_clip,ent_audio_clip, heap );
- MDL_LOAD_ARRAY_STRUCT( meta, &world->ent_audio, ent_audio, heap );
- MDL_LOAD_ARRAY_STRUCT( meta, &world->ent_volume, ent_volume, heap );
- MDL_LOAD_ARRAY_STRUCT( meta, &world->ent_traffic, ent_traffic, heap );
- MDL_LOAD_ARRAY_STRUCT( meta, &world->ent_marker, ent_marker, heap );
- MDL_LOAD_ARRAY_STRUCT( meta, &world->ent_skateshop, ent_skateshop, heap );
- MDL_LOAD_ARRAY_STRUCT( meta, &world->ent_swspreview,ent_swspreview, heap );
- MDL_LOAD_ARRAY_STRUCT( meta, &world->ent_ccmd, ent_ccmd, heap );
- MDL_LOAD_ARRAY_STRUCT( meta, &world->ent_objective, ent_objective, heap );
- MDL_LOAD_ARRAY_STRUCT( meta, &world->ent_challenge, ent_challenge, heap );
- MDL_LOAD_ARRAY_STRUCT( meta, &world->ent_relay, ent_relay, heap );
- MDL_LOAD_ARRAY_STRUCT( meta, &world->ent_cubemap, ent_cubemap, heap );
- MDL_LOAD_ARRAY_STRUCT( meta, &world->ent_miniworld, ent_miniworld, heap );
- MDL_LOAD_ARRAY_STRUCT( meta, &world->ent_prop, ent_prop, heap );
- MDL_LOAD_ARRAY_STRUCT( meta, &world->ent_region, ent_region, heap );
- MDL_LOAD_ARRAY_STRUCT( meta, &world->ent_glider, ent_glider, heap );
- MDL_LOAD_ARRAY_STRUCT( meta, &world->ent_npc, ent_npc, heap );
+ AF_LOAD_ARRAY_STRUCT( af, &world->ent_gate, ent_gate, heap );
+ AF_LOAD_ARRAY_STRUCT( af, &world->ent_camera, ent_camera, heap );
+ AF_LOAD_ARRAY_STRUCT( af, &world->ent_spawn, ent_spawn, heap );
+ AF_LOAD_ARRAY_STRUCT( af, &world->ent_light, ent_light, heap );
+ AF_LOAD_ARRAY_STRUCT( af, &world->ent_route_node,ent_route_node, heap );
+ AF_LOAD_ARRAY_STRUCT( af, &world->ent_path_index,ent_path_index, heap );
+ AF_LOAD_ARRAY_STRUCT( af, &world->ent_checkpoint,ent_checkpoint, heap );
+ AF_LOAD_ARRAY_STRUCT( af, &world->ent_route, ent_route, heap );
+ AF_LOAD_ARRAY_STRUCT( af, &world->ent_water, ent_water, heap );
+ AF_LOAD_ARRAY_STRUCT( af, &world->ent_audio_clip,ent_audio_clip, heap );
+ AF_LOAD_ARRAY_STRUCT( af, &world->ent_audio, ent_audio, heap );
+ AF_LOAD_ARRAY_STRUCT( af, &world->ent_volume, ent_volume, heap );
+ AF_LOAD_ARRAY_STRUCT( af, &world->ent_traffic, ent_traffic, heap );
+ AF_LOAD_ARRAY_STRUCT( af, &world->ent_marker, ent_marker, heap );
+ AF_LOAD_ARRAY_STRUCT( af, &world->ent_skateshop, ent_skateshop, heap );
+ AF_LOAD_ARRAY_STRUCT( af, &world->ent_swspreview,ent_swspreview, heap );
+ AF_LOAD_ARRAY_STRUCT( af, &world->ent_ccmd, ent_ccmd, heap );
+ AF_LOAD_ARRAY_STRUCT( af, &world->ent_objective, ent_objective, heap );
+ AF_LOAD_ARRAY_STRUCT( af, &world->ent_challenge, ent_challenge, heap );
+ AF_LOAD_ARRAY_STRUCT( af, &world->ent_relay, ent_relay, heap );
+ AF_LOAD_ARRAY_STRUCT( af, &world->ent_cubemap, ent_cubemap, heap );
+ AF_LOAD_ARRAY_STRUCT( af, &world->ent_miniworld, ent_miniworld, heap );
+ AF_LOAD_ARRAY_STRUCT( af, &world->ent_prop, ent_prop, heap );
+ AF_LOAD_ARRAY_STRUCT( af, &world->ent_region, ent_region, heap );
+ AF_LOAD_ARRAY_STRUCT( af, &world->ent_glider, ent_glider, heap );
+ AF_LOAD_ARRAY_STRUCT( af, &world->ent_npc, ent_npc, heap );
array_file_ptr infos;
- MDL_LOAD_ARRAY_STRUCT( meta, &infos, ent_worldinfo, vg_mem.scratch );
+ AF_LOAD_ARRAY_STRUCT( af, &infos, ent_worldinfo, vg_mem.scratch );
world->skybox = k_skybox_default;
if( af_arrcount(&infos) )
{
world->info = *((ent_worldinfo *)af_arritm(&infos,0));
- if( world->meta.info.version >= 104 )
+ if( world->meta.version >= 104 )
{
if( PS_EQ( &world->meta.strings, world->info.pstr_skybox, "space" ))
{
/*
* LEGACY BEHAVIOUR: < v104 does not have leave events
*/
- if( world->meta.info.version >= 104 ){
+ if( world->meta.version >= 104 ){
ent_call basecall;
basecall.function = k_ent_function_trigger_leave;
basecall.id = mdl_entity_id( k_ent_volume, idx );