From 31a0c48dc4da47bad1f21b820f66604221e22029 Mon Sep 17 00:00:00 2001 From: hgn Date: Mon, 23 Sep 2024 17:36:06 +0100 Subject: [PATCH] make packed strings a *feature* of array files --- src/array_file.c | 28 ++++++++++++++++++---------- src/array_file.h | 11 +++++++---- src/build_control_overlay.c | 2 +- src/ent_challenge.c | 2 +- src/ent_miniworld.c | 2 +- src/ent_region.c | 4 ++-- src/ent_tornado.c | 6 +++--- src/entity.c | 2 +- src/font.h | 3 +-- src/menu.c | 10 ++++------ src/metascene.c | 20 +++++++++----------- src/metascene.h | 4 +--- src/model.c | 5 ++--- src/model.h | 1 - src/player_render.c | 6 +++--- src/skeleton.h | 2 +- src/world_entity.c | 30 +++++++++++++++--------------- src/world_gate.c | 4 ++-- src/world_load.c | 2 +- src/world_routes.c | 13 +++++++------ src/world_sfd.c | 4 ++-- 21 files changed, 82 insertions(+), 79 deletions(-) diff --git a/src/array_file.c b/src/array_file.c index b4c7840..676bcd2 100644 --- a/src/array_file.c +++ b/src/array_file.c @@ -1,20 +1,24 @@ #include "array_file.h" #include -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 ) diff --git a/src/array_file.h b/src/array_file.h index 892fa75..1dfa185 100644 --- a/src/array_file.h +++ b/src/array_file.h @@ -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 ) ) diff --git a/src/build_control_overlay.c b/src/build_control_overlay.c index 86106b3..5ed4d85 100644 --- a/src/build_control_overlay.c +++ b/src/build_control_overlay.c @@ -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 ); diff --git a/src/ent_challenge.c b/src/ent_challenge.c index a04066c..3e5c317 100644 --- a/src/ent_challenge.c +++ b/src/ent_challenge.c @@ -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; diff --git a/src/ent_miniworld.c b/src/ent_miniworld.c index 7a13408..f83c037 100644 --- a/src/ent_miniworld.c +++ b/src/ent_miniworld.c @@ -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 ); diff --git a/src/ent_region.c b/src/ent_region.c index 3b178bf..4f4e27b 100644 --- a/src/ent_region.c +++ b/src/ent_region.c @@ -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; diff --git a/src/ent_tornado.c b/src/ent_tornado.c index b86f61e..b255edd 100644 --- a/src/ent_tornado.c +++ b/src/ent_tornado.c @@ -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 ); diff --git a/src/entity.c b/src/entity.c index dcae738..c27f754 100644 --- a/src/entity.c +++ b/src/entity.c @@ -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; } diff --git a/src/font.h b/src/font.h index 913ba40..ac02c07 100644 --- a/src/font.h +++ b/src/font.h @@ -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; diff --git a/src/menu.c b/src/menu.c index 556cc0d..8df3fc6 100644 --- a/src/menu.c +++ b/src/menu.c @@ -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 ) diff --git a/src/metascene.c b/src/metascene.c index 91749af..78cf4e9 100644 --- a/src/metascene.c +++ b/src/metascene.c @@ -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; jarmatures ); 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 ++; } diff --git a/src/metascene.h b/src/metascene.h index ca3aa36..cd57bff 100644 --- a/src/metascene.h +++ b/src/metascene.h @@ -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, diff --git a/src/model.c b/src/model.c index 5f1af40..c22a721 100644 --- a/src/model.c +++ b/src/model.c @@ -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; imeshs ); 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; diff --git a/src/model.h b/src/model.h index 2bcb52c..16a4224 100644 --- a/src/model.h +++ b/src/model.h @@ -256,7 +256,6 @@ struct mdl_context struct array_file_ptr /* metadata */ - strings, meshs, submeshs, materials, diff --git a/src/player_render.c b/src/player_render.c index f6725d1..a4487bd 100644 --- a/src/player_render.c +++ b/src/player_render.c @@ -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; diff --git a/src/skeleton.h b/src/skeleton.h index a62c3e3..aafa876 100644 --- a/src/skeleton.h +++ b/src/skeleton.h @@ -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; diff --git a/src/world_entity.c b/src/world_entity.c index d551d81..ce9b2f4 100644 --- a/src/world_entity.c +++ b/src/world_entity.c @@ -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; ient_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; jname, - 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; ient_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; ient_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", diff --git a/src/world_gate.c b/src/world_gate.c index 891cf71..9e12e2c 100644 --- a/src/world_gate.c +++ b/src/world_gate.c @@ -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; iflags & 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; diff --git a/src/world_load.c b/src/world_load.c index efa5136..1dbd315 100644 --- a/src/world_load.c +++ b/src/world_load.c @@ -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; } diff --git a/src/world_routes.c b/src/world_routes.c index c8d5068..4a01773 100644 --- a/src/world_routes.c +++ b/src/world_routes.c @@ -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; jmeta.strings ,route->pstr_name ))) + if( !strcmp( track_infos[j].name, route_name )) { route->anon.official_track_id = j; } diff --git a/src/world_sfd.c b/src/world_sfd.c index 6d40677..40a5029 100644 --- a/src/world_sfd.c +++ b/src/world_sfd.c @@ -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 ); } } -- 2.25.1