make packed strings a *feature* of array files
authorhgn <hgodden00@gmail.com>
Mon, 23 Sep 2024 16:36:06 +0000 (17:36 +0100)
committerhgn <hgodden00@gmail.com>
Mon, 23 Sep 2024 16:36:06 +0000 (17:36 +0100)
21 files changed:
src/array_file.c
src/array_file.h
src/build_control_overlay.c
src/ent_challenge.c
src/ent_miniworld.c
src/ent_region.c
src/ent_tornado.c
src/entity.c
src/font.h
src/menu.c
src/metascene.c
src/metascene.h
src/model.c
src/model.h
src/player_render.c
src/skeleton.h
src/world_entity.c
src/world_gate.c
src/world_load.c
src/world_routes.c
src/world_sfd.c

index b4c78409f1f1d5b20e6ad0f3128ca96f2a5093b7..676bcd25783c8f67cb58c39e42be046391558a94 100644 (file)
@@ -1,20 +1,24 @@
 #include "array_file.h"
 #include <errno.h>
 
-const char *ps_get( array_file_ptr *strings, u32 pstr )
+u32 af_str_hash( array_file_context *af, u32 pstr )
 {
-   return ((char *)af_arritm( strings, pstr )) + 4;
+   return *((u32 *)(af->strings + pstr));
 }
 
-bool ps_consteq( array_file_ptr *strings, u32 pstr, const char *str, u32 djb2 )
+const char *af_str( array_file_context *af, u32 pstr )
 {
-   u32 hash = *((u32 *)af_arritm( strings, pstr ));
-   if( hash == djb2 )
-   {
-      if( !strcmp( str, ps_get( strings, pstr ))) return 1;
-      else return 0;
-   }
-   else return 0;
+   return af->strings + pstr + 4;
+}
+
+bool af_str_eq( array_file_context *af, u32 pstr, 
+                const char *str, u32 str_hash )
+{
+   if( af_str_hash( af, pstr ) == str_hash )
+      if( !strcmp( str, af_str( af, pstr ))) 
+         return 1;
+
+   return 0;
 }
 
 static void af_load_array_file_buffer( array_file_context *ctx, 
@@ -154,6 +158,10 @@ void af_open( array_file_context *ctx, const char *path,
 
    af_load_array_file( ctx, &ctx->index, &ctx->header.index, lin_alloc,
                        sizeof(array_file_meta) );
+
+   array_file_ptr strings;
+   af_load_array( ctx, &strings, "strings", lin_alloc, 1 );
+   ctx->strings = strings.data;
 }
 
 void af_close( array_file_context *ctx )
index 892fa7503c4fb56bdfd137b81ad5903379f895ba..1dfa185d76e9817048e2c27b27cab3c392dcf8ee 100644 (file)
@@ -31,6 +31,7 @@ struct array_file_context
    FILE *fp;
    array_file_header header;
    array_file_ptr index;
+   const void *strings;
 };
 
 void af_open( array_file_context *ctx, const char *path, 
@@ -53,8 +54,10 @@ void *af_arritm( array_file_ptr *arr, u32 index );
 u32 af_arrcount( array_file_ptr *arr );
 
 /* packed string buffer access (with djb2 hash prefix) */
-const char *ps_get( array_file_ptr *strings, u32 pstr );
-bool ps_consteq( array_file_ptr *strings, u32 pstr, const char *str, u32 djb2 );
+const char *af_str( array_file_context *af, u32 pstr );
+u32 af_str_hash( array_file_context *af, u32 pstr );
+bool af_str_eq( array_file_context *af, u32 pstr, 
+                const char *str, u32 str_hash );
 
-#define PS_EQ( STRINGS, PSTR, CONSTR ) \
-   ps_consteq( STRINGS, PSTR, CONSTR, vg_strdjb2( CONSTR ) )
+#define AF_STR_EQ( CTX, PSTR, CONSTR ) \
+   af_str_eq( CTX, PSTR, CONSTR, vg_strdjb2( CONSTR ) )
index 86106b3656c50b506b74a158b576f00032401f69..5ed4d85c40dea5d440abb35b88e1fa83cc876bc2 100644 (file)
@@ -14,7 +14,7 @@ void build_control_overlay(void)
    {
       mdl_mesh *mesh = af_arritm( &ctx.meshs, i );
       fprintf( hdr, "   %s = %u,\n", 
-                  ps_get( &ctx.strings,mesh->pstr_name ), mesh->submesh_start );
+                  af_str( &ctx.af, mesh->pstr_name ), mesh->submesh_start );
    }
 
    fclose( hdr );
index a04066c154f32bc53820c19255fe5b821402d9d5..3e5c317da0f5a389eeee4dfea1673c243738130c 100644 (file)
@@ -14,7 +14,7 @@ entity_call_result ent_challenge_call( world_instance *world, ent_call *call )
       if( !challenge->status )
       {
          vg_info( "challenge( '%s' )\n", 
-                  ps_get( &world->meta.strings, challenge->pstr_alias) );
+                  af_str( &world->meta.af, challenge->pstr_alias) );
          ent_call call;
          call.data = NULL;
          call.function = challenge->target_event;
index 7a134081fe64f24dab1a4b538b34c453d0b0d9db..f83c0377b94cbe67fcb0c2d7be228d44e1044206 100644 (file)
@@ -18,7 +18,7 @@ entity_call_result ent_miniworld_call( world_instance *world, ent_call *call )
 
    if( call->function == 0 ) /* zone() */
    {
-      const char *uid = ps_get( &world->meta.strings, miniworld->pstr_world );
+      const char *uid = af_str( &world->meta.af, miniworld->pstr_world );
       skaterift_load_world_command( 1, (const char *[]){ uid } );
 
       mdl_transform_m4x3( &miniworld->transform, global_miniworld.mmdl );
index 3b178bfaf26431645191aa85aecf648b66214f0a..4f4e27bd6cbe3847492234d3579831777339d300 100644 (file)
@@ -47,9 +47,9 @@ entity_call_result ent_region_call( world_instance *world, ent_call *call )
       }
 
       gui_location_print_ccmd( 1, (const char *[]){
-            ps_get( &world->meta.strings, region->pstr_title)} );
+            af_str( &world->meta.af, region->pstr_title)} );
 
-      vg_strncpy( ps_get( &world->meta.strings, region->pstr_title ), 
+      vg_strncpy( af_str( &world->meta.af, region->pstr_title ), 
                   global_ent_region.location, NETWORK_REGION_MAX,
                   k_strncpy_always_add_null );
       global_ent_region.flags = region->flags;
index b86f61e54d23350fe6c18f49ca41cc48c7b5070a..b255eddccb1bc14bb6a2f818b4326a7aa5cfbba4 100644 (file)
@@ -22,7 +22,7 @@ void ent_tornado_debug(void)
    {
       ent_marker *marker = af_arritm( &world->ent_marker, i );
 
-      if( PS_EQ( &world->meta.strings, marker->pstr_alias, "tornado" ) )
+      if( AF_STR_EQ( &world->meta.af, marker->pstr_alias, "tornado" ) )
       {
          v3f p1;
          v3_add( marker->transform.co, (v3f){0,20,0}, p1 );
@@ -45,7 +45,7 @@ void ent_tornado_forces( v3f co, v3f cv, v3f out_a )
    {
       ent_marker *marker = af_arritm( &world->ent_marker, i );
 
-      if( PS_EQ( &world->meta.strings, marker->pstr_alias, "tornado" ) )
+      if( AF_STR_EQ( &world->meta.af, marker->pstr_alias, "tornado" ) )
       {
          v3f d, dir;
          v3_sub( co, marker->transform.co, d );
@@ -75,7 +75,7 @@ void ent_tornado_pre_update(void)
    {
       ent_marker *marker = af_arritm( &world->ent_marker, i );
 
-      if( PS_EQ( &world->meta.strings, marker->pstr_alias, "tornado" ) )
+      if( AF_STR_EQ( &world->meta.af, marker->pstr_alias, "tornado" ) )
       {
          v3f co;
          vg_rand_sphere( &vg.rand, co );
index dcae73876d8990af7e49332897f77ef622e37954..c27f754cc31045747f38e5d4b151a3fe2a4c8b5d 100644 (file)
@@ -66,7 +66,7 @@ ent_marker *ent_find_marker( mdl_context *mdl, array_file_ptr *arr,
    {
       ent_marker *marker = af_arritm( arr, i );
 
-      if( !strcmp( ps_get( &mdl->strings, marker->pstr_alias ), alias ) )
+      if( !strcmp( af_str( &mdl->af, marker->pstr_alias ), alias ) )
       {
          return marker;
       }
index 913ba40bfec15ec69c6fcc804d672657f3426712..ac02c07a585f27b08ecb0c5e2539bb453c9788f0 100644 (file)
@@ -117,9 +117,8 @@ static u32 font3d_find_variant( font3d *font, const char *name )
    {
       ent_font_variant *variant = af_arritm( &font->font_variants, i );
 
-      if( !strcmp( ps_get( &font->mdl.strings, variant->name ), name ) ){
+      if( !strcmp( af_str( &font->mdl.af, variant->name ), name ) )
          return i;
-      }
    }
 
    return 0;
index 556cc0d7f3249149d913a74848a58078da79688b..8df3fc617d969932c59962d7c80150855ee2089b 100644 (file)
@@ -734,7 +734,7 @@ void menu_gui( ui_context *ctx )
       if( world->status == k_world_status_loaded )
       {
          const char *world_name = 
-            ps_get( &world->meta.strings, world->info.pstr_name );
+            af_str( &world->meta.af, world->info.pstr_name );
 
          vg_strnull( &str, buf, sizeof(buf) );
          vg_strcat( &str, world_name );
@@ -788,8 +788,7 @@ void menu_gui( ui_context *ctx )
             if( !region->zone_volume )
                continue;
 
-            const char *title = ps_get( &world->meta.strings, 
-                                         region->pstr_title );
+            const char *title = af_str( &world->meta.af, region->pstr_title );
             ctx->font = &vgf_default_large;
 
             ui_rect title_box;
@@ -825,7 +824,7 @@ void menu_gui( ui_context *ctx )
 
                vg_strnull( &str, buf, sizeof(buf) );
                vg_strcat( &str, "(Race) " );
-               vg_strcat( &str, ps_get(&world->meta.strings, route->pstr_name));
+               vg_strcat( &str, af_str( &world->meta.af, route->pstr_name ));
 
                if( route->flags & k_ent_route_flag_achieve_silver )
                   vg_strcat( &str, " \xb3");
@@ -852,8 +851,7 @@ void menu_gui( ui_context *ctx )
                }
 
                vg_strnull( &str, buf, sizeof(buf) );
-               vg_strcat( &str, ps_get(&world->meta.strings, 
-                           challenge->pstr_alias));
+               vg_strcat( &str, af_str( &world->meta.af,challenge->pstr_alias));
 
                u32 flags = 0x00;
                if( challenge->status )
index 91749af6f06091286ebb8061c90de40dd7811dec..78cf4e9effe5402cc0f8a54ba3c84e383553da31 100644 (file)
@@ -3,7 +3,6 @@
 void metascene_load( ms_context *ms, const char *path, void *alloc )
 {
    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 );
@@ -116,11 +115,10 @@ void cutscene_debug_ui( ui_context *ctx )
       }
 
       ui_rect box = { strip->offset, layer*32, strip->length, 30 };
-      u32 ps = strip->pstr_name,
-          colour = *((u32 *)af_arritm( &_cutscene.meta.strings, ps ));
+      u32 colour = af_str_hash( &_cutscene.meta.af, strip->pstr_name );
 
       ui_fill( ctx, box, colour | 0xff000000 );
-      ui_text( ctx, box, ps_get( &_cutscene.meta.strings, ps ), 1,
+      ui_text( ctx, box, af_str( &_cutscene.meta.af, strip->pstr_name ), 1,
                k_ui_align_middle_center, 0 );
    }
 
@@ -154,17 +152,16 @@ static void _cutscene_override_asoc( u32 instance_id, u32 override_index,
    out_asoc->orig_data = mdl;
    out_asoc->entity_type = override->entity_type;
    out_asoc->override = override;
-   const char *name = ps_get( &_cutscene.meta.strings, override->pstr_name );
+   const char *name = af_str( &_cutscene.meta.af, override->pstr_name );
+   u32 name_hash = af_str_hash( &_cutscene.meta.af, override->pstr_name );
 
    if( out_asoc->entity_type != 28 ) 
       goto NOT_IMPLEMENTED;
 
-   u32 name_hash = vg_strdjb2( name );
    for( u32 j=0; j<af_arrcount( &mdl->armatures ); j ++ )
    {
       mdl_armature *armature = af_arritm( &mdl->armatures, j );
-      if( ps_consteq( &mdl->strings, armature->pstr_name,
-                       name, name_hash ) )
+      if( af_str_eq( &mdl->af, armature->pstr_name, name, name_hash ) )
       {
          out_asoc->entity_index = j;
          return;
@@ -222,7 +219,8 @@ static void cutscene_load_thread( void *data )
    for( u32 i=0; i < _cutscene.instance_count; i ++ )
    {
       ms_instance *instance = af_arritm( &_cutscene.meta.instances, i );
-      const char *name = ps_get( &_cutscene.meta.strings, instance->pstr_name );
+      const char *name = af_str( &_cutscene.meta.af, instance->pstr_name );
+      u32 name_hash = af_str_hash( &_cutscene.meta.af, instance->pstr_name );
 
       struct model_ref *ref = NULL;
       u32 ref_id = 0;
@@ -231,7 +229,7 @@ static void cutscene_load_thread( void *data )
       {
          struct model_ref *ref_j = &_cutscene.refs[ j ];
 
-         if( ps_consteq( &_cutscene.meta.strings, instance->pstr_name, 
+         if( af_str_eq( &_cutscene.meta.af, instance->pstr_name, 
                          ref_j->name, ref_j->name_hash ) )
          {
             ref = ref_j;
@@ -247,7 +245,7 @@ static void cutscene_load_thread( void *data )
          ref_id = _cutscene.unique_refs;
          ref = &_cutscene.refs[ ref_id ];
          ref->name = name;
-         ref->name_hash = vg_strdjb2( name );
+         ref->name_hash = name_hash;
          vg_info( "Indexed reference '%s'\n", name );
          _cutscene.unique_refs ++;
       }
index ca3aa36745438585eae23ce514cb70a6ef56c9d4..cd57bff074ac98a7665cc5e2945714c3d53c034b 100644 (file)
@@ -24,9 +24,7 @@ struct ms_context
    array_file_context af;
 
    ms_scene_info info;
-   struct array_file_ptr strings,
-                         
-                         infos,
+   struct array_file_ptr infos,
                          instances,
                          overrides,
                          strips,
index 5f1af40964be2dd9b48750b263aa557323baabbc..c22a721b237dee5bf44cd7f73e9a09b74d2ad30f 100644 (file)
@@ -30,7 +30,7 @@ void mdl_fread_pack_file( mdl_context *mdl, mdl_file *info, void *dst )
    {
       vg_fatal_condition();
       vg_info( "Packed file is only a header; it is not packed" );
-      vg_info( "path: %s\n", ps_get( &mdl->strings, info->pstr_path ) );
+      vg_info( "path: %s\n", af_str( &mdl->af, info->pstr_path ) );
       vg_fatal_exit();
    }
 
@@ -52,7 +52,6 @@ void mdl_load_mesh_block( mdl_context *mdl, void *lin_alloc )
 
 void mdl_load_metadata_block( mdl_context *mdl, void *lin_alloc )
 {
-   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 );
@@ -358,7 +357,7 @@ mdl_mesh *mdl_find_mesh( mdl_context *mdl, const char *name )
    for( u32 i=0; i<af_arrcount( &mdl->meshs ); i++ )
    {
       mdl_mesh *mesh = af_arritm( &mdl->meshs, i );
-      if( ps_consteq( &mdl->strings, mesh->pstr_name, name, hash ) ) 
+      if( af_str_eq( &mdl->af, mesh->pstr_name, name, hash ) ) 
          return mesh;
    }
    return NULL;
index 2bcb52c0ae798bd5e86dca1bbcc9ebe5b68799bd..16a422481204ab450bda9d3ae321d1fc7f2c295f 100644 (file)
@@ -256,7 +256,6 @@ struct mdl_context
    struct array_file_ptr 
 
    /* metadata */
-   strings,
    meshs,
    submeshs,
    materials,
index f6725d1c17504bf9999c0707054fba42ea07dc10..a4487bd25c5e44c109ca7253619a91b90225e937 100644 (file)
@@ -31,7 +31,7 @@ void player_get_anim( skeleton_anim *out_anim, const char *name )
    {
       ms_strip *strip = af_arritm( &ms->strips, i );
       
-      if( ps_consteq( &ms->strings, strip->pstr_name, name, hash ) )
+      if( af_str_eq( &ms->af, strip->pstr_name, name, hash ) )
       {
          out_anim->strip = strip;
          out_anim->framerate = localplayer.animations.info.framerate;
@@ -173,7 +173,7 @@ void player_board_load( struct player_board *board, const char *path )
 
       mdl_submesh *sm0 = af_arritm( &ctx.submeshs, mesh->submesh_start );
       
-      const char *alias = ps_get( &ctx.strings, marker->pstr_alias );
+      const char *alias = af_str( &ctx.af, marker->pstr_alias );
       u32 lr = marker->transform.co[0] > 0.0f? 1: 0,
           fb = marker->transform.co[2] > 0.0f? 0: 1;
 
@@ -226,7 +226,7 @@ void player_model_load( struct player_model *board, const char *path)
       {
          mdl_bone *bone = af_arritm( &ctx.bones, armature->bone_start+j );
 
-         if( ps_consteq( &ctx.strings, bone->pstr_name, sb->name, hash ) )
+         if( af_str_eq( &ctx.af, bone->pstr_name, sb->name, hash ) )
          {
             fixup_table[j+1] = i;
             break;
index a62c3e31ff6e17afcbcf7b49660f066ea2a3be95..aafa876bc4b9b90a683127f703113e72e55e1c99 100644 (file)
@@ -480,7 +480,7 @@ void skeleton_setup( struct skeleton *skele, mdl_context *mdl, u32 index,
       v3_copy( bone->end, sb->end );
 
       sb->parent = bone->parent;
-      sb->name   = ps_get( &mdl->strings, bone->pstr_name );
+      sb->name   = af_str( &mdl->af, bone->pstr_name );
       sb->flags  = bone->flags;
       sb->collider = bone->collider;
       sb->orig_bone = bone;
index d551d813770521a95343c248c29238c3886f1c4f..ce9b2f42930f7b0bc832a5fa0c1932694cd151f6 100644 (file)
@@ -238,7 +238,7 @@ void world_gen_entities_init( world_instance *world )
          }
          else
          {
-            clip->_.clip.path = ps_get( &world->meta.strings
+            clip->_.clip.path = af_str( &world->meta.af
                                          clip->_.file.pstr_path );
             clip->_.clip.flags = audio->flags;
             clip->_.clip.data = NULL;
@@ -291,10 +291,10 @@ void world_gen_entities_init( world_instance *world )
    {
       ent_marker *marker = af_arritm( &world->ent_marker, i );
 
-      if( PS_EQ( &world->meta.strings, marker->pstr_alias, "tar_min" ) )
+      if( AF_STR_EQ( &world->meta.af, marker->pstr_alias, "tar_min" ) )
          world->tar_min = marker->transform.co[1];
 
-      if( PS_EQ( &world->meta.strings, marker->pstr_alias, "tar_max" ) )
+      if( AF_STR_EQ( &world->meta.af, marker->pstr_alias, "tar_max" ) )
          world->tar_max = marker->transform.co[1];
    }
 }
@@ -336,7 +336,7 @@ ent_spawn *world_find_spawn_by_name( world_instance *world, const char *name )
    {
       r = af_arritm( &world->ent_spawn, i );
 
-      if( ps_consteq( &world->meta.strings, r->pstr_name, name, hash ) )
+      if( af_str_eq( &world->meta.af, r->pstr_name, name, hash ) )
       {
          rp = r;
          break;
@@ -524,8 +524,8 @@ entity_call_result ent_ccmd_call( world_instance *world, ent_call *call )
    {
       u32 index = mdl_entity_id_id( call->id );
       ent_ccmd *ccmd = af_arritm( &world->ent_ccmd, index );
-      vg_execute_console_input( ps_get(&world->meta.strings, 
-                                        ccmd->pstr_command), 0 );
+      const char *cmd_text = af_str( &world->meta.af, ccmd->pstr_command );
+      vg_execute_console_input( cmd_text, 0 );
       return k_entity_call_result_OK;
    }
    else
@@ -713,19 +713,19 @@ void update_ach_models(void)
       ent_prop *prop = af_arritm( &hub->ent_prop, i );
       if( prop->flags & 0x2 )
       {
-         if( PS_EQ( &hub->meta.strings, prop->pstr_alias, "MARC" ) )
+         if( AF_STR_EQ( &hub->meta.af, prop->pstr_alias, "MARC" ) )
             if( skaterift.achievements & 0x1 )
                prop->flags &= ~0x1;
 
-         if( PS_EQ( &hub->meta.strings, prop->pstr_alias, "ALBERT" ) )
+         if( AF_STR_EQ( &hub->meta.af, prop->pstr_alias, "ALBERT" ) )
             if( skaterift.achievements & 0x2 )
                prop->flags &= ~0x1;
 
-         if( PS_EQ( &hub->meta.strings, prop->pstr_alias, "JANET" ) )
+         if( AF_STR_EQ( &hub->meta.af, prop->pstr_alias, "JANET" ) )
             if( skaterift.achievements & 0x4 )
                prop->flags &= ~0x1;
 
-         if( PS_EQ( &hub->meta.strings, prop->pstr_alias, "BERNADETTA" ) )
+         if( AF_STR_EQ( &hub->meta.af, prop->pstr_alias, "BERNADETTA" ) )
             if( skaterift.achievements & 0x8 )
                prop->flags &= ~0x1;
       }
@@ -784,7 +784,7 @@ void world_entity_start( world_instance *world, vg_msg *sav )
 
    for( u32 i=0; i<af_arrcount(&world->ent_challenge); i++ ){
       ent_challenge *challenge = af_arritm( &world->ent_challenge, i );
-      const char *alias = ps_get( &world->meta.strings, challenge->pstr_alias );
+      const char *alias = af_str( &world->meta.af, challenge->pstr_alias );
 
       u32 result;
       vg_msg_getkvintg( sav, alias, k_vg_msg_u32, &result, NULL );
@@ -805,7 +805,7 @@ void world_entity_start( world_instance *world, vg_msg *sav )
 
          vg_msg route_info = routes_block;
          if( vg_msg_seekframe( &route_info, 
-                               ps_get(&world->meta.strings,route->pstr_name) ) )
+                               af_str(&world->meta.af,route->pstr_name) ) )
          {
 
             u32 flags;
@@ -840,7 +840,7 @@ void world_entity_start( world_instance *world, vg_msg *sav )
                for( u32 j=0; j<VG_ARRAY_LEN(track_infos); j ++ ){
                   struct track_info *inf = &track_infos[j];
                   if( !strcmp(inf->name,
-                              ps_get(&world->meta.strings,route->pstr_name)))
+                              af_str(&world->meta.af,route->pstr_name)))
                   {
                      
                      steamapi_bool set = 0;
@@ -866,7 +866,7 @@ void world_entity_serialize( world_instance *world, vg_msg *sav )
    for( u32 i=0; i<af_arrcount(&world->ent_challenge); i++ ){
       ent_challenge *challenge = af_arritm(&world->ent_challenge,i);
 
-      const char *alias = ps_get( &world->meta.strings, challenge->pstr_alias );
+      const char *alias = af_str( &world->meta.af, challenge->pstr_alias );
       vg_msg_wkvnum( sav, alias, k_vg_msg_u32, 1, &challenge->status );
    }
    
@@ -875,7 +875,7 @@ void world_entity_serialize( world_instance *world, vg_msg *sav )
       for( u32 i=0; i<af_arrcount(&world->ent_route); i++ ){
          ent_route *route = af_arritm( &world->ent_route, i );
          
-         vg_msg_frame( sav, ps_get( &world->meta.strings, route->pstr_name ) );
+         vg_msg_frame( sav, af_str( &world->meta.af, route->pstr_name ) );
          {
             vg_msg_wkvnum( sav, "flags", k_vg_msg_u32, 1, &route->flags );
             vg_msg_wkvnum( sav, "best_laptime", 
index 891cf710fd21264c29cbddc4fe1bfeb8718a8b0b..9e12e2c592f6eda3fe6e909e2f97d5fe7dce055f 100644 (file)
@@ -351,7 +351,7 @@ void world_link_gates_async( void *payload, u32 size )
       if( !(gate->flags & k_ent_gate_nonlocal) ) continue;
       if( gate->flags & k_ent_gate_linked ) continue;
 
-      const char *key = ps_get( &world->meta.strings, gate->key );
+      const char *key = af_str( &world->meta.af, gate->key );
       vg_info( "key: %s\n", key );
 
       for( u32 i=0; i<VG_ARRAY_LEN(world_static.instances); i++ ){
@@ -366,7 +366,7 @@ void world_link_gates_async( void *payload, u32 size )
             if( !(gate2->flags & k_ent_gate_nonlocal) ) continue;
             if( gate2->flags & k_ent_gate_linked ) continue;
 
-            const char *key2 = ps_get( &other->meta.strings, gate2->key );
+            const char *key2 = af_str( &other->meta.af, gate2->key );
             vg_info( " key2: %s\n", key2 );
 
             if( strcmp( key, key2 ) ) continue;
index efa51367fa2d96911184dcf9d381d0fcea68c667..1dbd3155f8cc51574bf5cfe1b5802290ca3442de 100644 (file)
@@ -82,7 +82,7 @@ static void world_instance_load_mdl( u32 instance_id, const char *path ){
 
       if( world->meta.version >= 104 )
       {
-         if( PS_EQ( &world->meta.strings, world->info.pstr_skybox, "space" ))
+         if( AF_STR_EQ( &world->meta.af, world->info.pstr_skybox, "space" ))
          {
             world->skybox = k_skybox_space;
          }
index c8d506866c87b878767fd600a9754d5b51592712..4a0177371e0453feec4f60dac9a97007970726b3 100644 (file)
@@ -41,9 +41,10 @@ void world_routes_clear( world_instance *world )
    world_static.last_use = 0.0;
 }
 
-static void world_routes_time_lap( world_instance *world, ent_route *route ){
-   vg_info( "------- time lap %s -------\n", 
-            ps_get(&world->meta.strings,route->pstr_name) );
+static void world_routes_time_lap( world_instance *world, ent_route *route )
+{
+   const char *route_name = af_str( &world->meta.af, route->pstr_name);
+   vg_info( "------- time lap %s -------\n", route_name );
 
    double start_time = 0.0;
    u32 last_version=0;
@@ -128,7 +129,7 @@ static void world_routes_time_lap( world_instance *world, ent_route *route ){
       char mod_uid[ ADDON_UID_MAX ];
       addon_alias_uid( alias, mod_uid );
       network_publish_laptime( mod_uid, 
-                               ps_get( &world->meta.strings, route->pstr_name ),
+                               af_str( &world->meta.af, route->pstr_name ),
                                lap_time );
    }
 
@@ -565,10 +566,10 @@ void world_gen_routes_ent_init( world_instance *world )
          route->flags |= k_ent_route_flag_out_of_zone;
 
       route->anon.official_track_id = 0xffffffff;
+      const char *route_name = af_str( &world->meta.af, route->pstr_name );
       for( u32 j=0; j<VG_ARRAY_LEN(track_infos); j ++ )
       {
-         if( !strcmp(track_infos[j].name, 
-                     ps_get( &world->meta.strings ,route->pstr_name )))
+         if( !strcmp( track_infos[j].name, route_name ))
          {
             route->anon.official_track_id = j;
          }
index 6d406770050b929eee1942054004a45e3a108d9e..40a5029bac80094439239713ca5c2bde5aa5e2b7 100644 (file)
@@ -184,7 +184,7 @@ void world_sfd_compile_active_scores(void)
       board = &world->leaderboard_cache[ world_sfd.active_route_board ];
       ent_route *route = af_arritm( &world->ent_route, 
                                      world_sfd.active_route_board );
-      name = ps_get( &world->meta.strings, route->pstr_name );
+      name = af_str( &world->meta.af, route->pstr_name );
    }
          
    world_sfd_compile_scores( board, name );
@@ -222,7 +222,7 @@ void world_sfd_update( world_instance *world, v3f pos )
 
             network_request_scoreboard( 
                   mod_uid, 
-                  ps_get( &world->meta.strings, route->pstr_name ),
+                  af_str( &world->meta.af, route->pstr_name ),
                   NETWORK_LEADERBOARD_ALLTIME_AND_CURRENT_WEEK, closest );
          }
       }