From 05a31009d77d16855801b0e25f943694203f6193 Mon Sep 17 00:00:00 2001 From: hgn Date: Tue, 25 Feb 2025 15:14:43 +0000 Subject: [PATCH] Adding name and such to world map list --- build.c | 82 +++++++++++++++--- .../maps/dev_flatworld/addon.inf | Bin 0 -> 86 bytes content_skaterift/maps/dev_heaven/addon.inf | Bin 0 -> 82 bytes content_skaterift/maps/dev_hub/addon.inf | Bin 0 -> 89 bytes content_skaterift/maps/dev_tutorial/addon.inf | Bin 0 -> 91 bytes content_skaterift/maps/mp_line1/addon.inf | Bin 0 -> 82 bytes content_skaterift/maps/mp_mtzero/addon.inf | Bin 0 -> 90 bytes content_skaterift/maps/mp_spawn/addon.inf | Bin 0 -> 84 bytes .../playermodels/skaterift_ela/addon.inf | Bin 0 -> 70 bytes .../playermodels/skaterift_fbi/addon.inf | Bin 0 -> 81 bytes .../playermodels/skaterift_fbi2/addon.inf | Bin 0 -> 83 bytes .../playermodels/skaterift_j/addon.inf | Bin 0 -> 66 bytes .../playermodels/skaterift_jesus/addon.inf | Bin 0 -> 85 bytes .../skaterift_president/addon.inf | Bin 0 -> 93 bytes src/addon.c | 73 +++++++++++----- src/addon.h | 11 --- src/addon_types.h | 10 +++ src/menu.c | 11 ++- src/skaterift.c | 26 ++---- src/world_load.c | 33 +++++++ src/world_map.c | 5 +- 21 files changed, 178 insertions(+), 73 deletions(-) create mode 100644 content_skaterift/maps/dev_flatworld/addon.inf create mode 100644 content_skaterift/maps/dev_heaven/addon.inf create mode 100644 content_skaterift/maps/dev_hub/addon.inf create mode 100644 content_skaterift/maps/dev_tutorial/addon.inf create mode 100644 content_skaterift/maps/mp_line1/addon.inf create mode 100644 content_skaterift/maps/mp_mtzero/addon.inf create mode 100644 content_skaterift/maps/mp_spawn/addon.inf create mode 100644 content_skaterift/playermodels/skaterift_ela/addon.inf create mode 100644 content_skaterift/playermodels/skaterift_fbi/addon.inf create mode 100644 content_skaterift/playermodels/skaterift_fbi2/addon.inf create mode 100644 content_skaterift/playermodels/skaterift_j/addon.inf create mode 100644 content_skaterift/playermodels/skaterift_jesus/addon.inf create mode 100644 content_skaterift/playermodels/skaterift_president/addon.inf diff --git a/build.c b/build.c index cb72732..a99b68b 100644 --- a/build.c +++ b/build.c @@ -29,7 +29,7 @@ void write_msg( vg_msg *msg, const char *path ){ } void write_generic_addon_inf( u32 type, const char *title, - const char *content, const char *dest ) + const char *content, const char *dest, u32 flags ) { u8 descriptor_buf[ 512 ]; vg_msg descriptor = {0}; @@ -41,6 +41,8 @@ void write_generic_addon_inf( u32 type, const char *title, vg_msg_wkvnum( &descriptor, "type", k_vg_msg_u32, 1, &type ); vg_msg_end_frame( &descriptor ); vg_msg_wkvstr( &descriptor, "content", content ); + if( flags ) + vg_msg_wkvnum( &descriptor, "flags", k_vg_msg_u32, 1, &flags ); write_msg( &descriptor, dest ); } @@ -54,38 +56,94 @@ void build_game_metadata(void) vg_info( "Building game metadata\n" ); write_generic_addon_inf( k_addon_type_board, "Longboard", "board.mdl", - "content_skaterift/boards/skaterift_long/addon.inf"); + "content_skaterift/boards/skaterift_long/addon.inf", 0 ); write_generic_addon_inf( k_addon_type_board, "Fractal", "board.mdl", - "content_skaterift/boards/skaterift_fract/addon.inf"); + "content_skaterift/boards/skaterift_fract/addon.inf", 0 ); write_generic_addon_inf( k_addon_type_board, "Striped", "board.mdl", - "content_skaterift/boards/skaterift_striped/addon.inf"); + "content_skaterift/boards/skaterift_striped/addon.inf", 0 ); write_generic_addon_inf( k_addon_type_board, "Licco", "board.mdl", - "content_skaterift/boards/skaterift_licco/addon.inf"); + "content_skaterift/boards/skaterift_licco/addon.inf", 0 ); write_generic_addon_inf( k_addon_type_board, "Hypno", "board.mdl", - "content_skaterift/boards/skaterift_spiral/addon.inf"); + "content_skaterift/boards/skaterift_spiral/addon.inf", 0 ); write_generic_addon_inf( k_addon_type_board, "Shark", "board.mdl", - "content_skaterift/boards/skaterift_shark/addon.inf"); + "content_skaterift/boards/skaterift_shark/addon.inf", 0 ); write_generic_addon_inf( k_addon_type_player, "De'folde", "ch_new.mdl", - "content_skaterift/playermodels/skaterift_new/addon.inf" ); + "content_skaterift/playermodels/skaterift_new/addon.inf", 0 ); write_generic_addon_inf( k_addon_type_player, "Jordan", "ch_jordan.mdl", - "content_skaterift/playermodels/skaterift_jordan/addon.inf" ); + "content_skaterift/playermodels/skaterift_jordan/addon.inf", 0 ); write_generic_addon_inf( k_addon_type_player, "Outlaw", "ch_outlaw.mdl", - "content_skaterift/playermodels/skaterift_outlaw/addon.inf" ); + "content_skaterift/playermodels/skaterift_outlaw/addon.inf", 0 ); write_generic_addon_inf( k_addon_type_player, "Chip", "ch_chip.mdl", - "content_skaterift/playermodels/skaterift_chip/addon.inf" ); + "content_skaterift/playermodels/skaterift_chip/addon.inf", 0 ); write_generic_addon_inf( k_addon_type_player, "Aaron", "ch_aaron.mdl", - "content_skaterift/playermodels/skaterift_aaron/addon.inf" ); + "content_skaterift/playermodels/skaterift_aaron/addon.inf", 0 ); + write_generic_addon_inf( k_addon_type_player, + "J", "ch_j.mdl", + "content_skaterift/playermodels/skaterift_j/addon.inf", 0 ); + write_generic_addon_inf( k_addon_type_player, + "Ela", "ch_ela.mdl", + "content_skaterift/playermodels/skaterift_ela/addon.inf", 0 ); + + write_generic_addon_inf( k_addon_type_player, + "Jesus", "ch_jesus.mdl", + "content_skaterift/playermodels/skaterift_jesus/addon.inf", ADDON_REG_HIDDEN ); + write_generic_addon_inf( k_addon_type_player, + "FBI", "ch_fbi.mdl", + "content_skaterift/playermodels/skaterift_fbi/addon.inf", ADDON_REG_HIDDEN ); + write_generic_addon_inf( k_addon_type_player, + "FBI2", "ch_fbi2.mdl", + "content_skaterift/playermodels/skaterift_fbi2/addon.inf", ADDON_REG_HIDDEN ); + write_generic_addon_inf( k_addon_type_player, + "President", "ch_president.mdl", + "content_skaterift/playermodels/skaterift_president/addon.inf", ADDON_REG_HIDDEN ); + + + struct + { + const char *title, *location, *file; + u32 flags; + } + maps[] = + { + { "Mt.Zero Island", "Australia", "content_skaterift/maps/mp_mtzero/addon.inf", ADDON_REG_CAMPAIGN | ADDON_REG_MTZERO | ADDON_REG_PREMIUM }, + { "Flat World", "...", "content_skaterift/maps/dev_flatworld/addon.inf", ADDON_REG_CAMPAIGN | ADDON_REG_HIDDEN }, + { "Heaven", "...", "content_skaterift/maps/dev_heaven/addon.inf", ADDON_REG_CAMPAIGN | ADDON_REG_HIDDEN }, + { "Valley", "Cambodia", "content_skaterift/maps/mp_line1/addon.inf", ADDON_REG_CAMPAIGN | ADDON_REG_PREMIUM }, + { "Training Island", "Australia", "content_skaterift/maps/dev_tutorial/addon.inf", ADDON_REG_CAMPAIGN }, + { "Center Island", "Australia", "content_skaterift/maps/dev_hub/addon.inf", ADDON_REG_CAMPAIGN }, + { "Downtown", "USA, Georgia", "content_skaterift/maps/mp_spawn/addon.inf", ADDON_REG_CAMPAIGN | ADDON_REG_CITY | ADDON_REG_PREMIUM } + }; + + for( u32 i=0; im7@mBaEw%sQHA|%MOQev j7_4AAgucX$c==?H7C`G3OZ162C8ptA74N39S9Je=%eES% literal 0 HcmV?d00001 diff --git a/content_skaterift/maps/dev_heaven/addon.inf b/content_skaterift/maps/dev_heaven/addon.inf new file mode 100644 index 0000000000000000000000000000000000000000..95f251938b19adca44e56dd20b023787c51b152d GIT binary patch literal 82 zcmWN`u@QhE3Jgv0LJb`ltqy#$dZqQ;S!x4^S>Wj2pLQO literal 0 HcmV?d00001 diff --git a/content_skaterift/maps/dev_hub/addon.inf b/content_skaterift/maps/dev_hub/addon.inf new file mode 100644 index 0000000000000000000000000000000000000000..c295c1c9e060bd77ce75b5f41c15b838c628aa6c GIT binary patch literal 89 zcmWN{yAgmO5Jl0aDTyUmflU}0TfvSj!tfnf$1$aHN$%@wDoQJoQV`3hqOFsmz%HwhxSv_&1zO`yAB8Ttb-5gX6| literal 0 HcmV?d00001 diff --git a/content_skaterift/maps/dev_tutorial/addon.inf b/content_skaterift/maps/dev_tutorial/addon.inf new file mode 100644 index 0000000000000000000000000000000000000000..9a0bf69823273aedc9f54fc7daf1f92bcf2847a3 GIT binary patch literal 91 zcmWN|K@vbP3(9w(0kmPs=4_7RPs0%v@2Zq4x?ewfOB|~J literal 0 HcmV?d00001 diff --git a/content_skaterift/maps/mp_line1/addon.inf b/content_skaterift/maps/mp_line1/addon.inf new file mode 100644 index 0000000000000000000000000000000000000000..0e44d05ea3480ecbfa1ba669a9e66f12770d1eeb GIT binary patch literal 82 zcmWN`OAde_3pJ`qHpR eQf|R1rjE)m0E|6LR?dni5v(3 literal 0 HcmV?d00001 diff --git a/content_skaterift/maps/mp_spawn/addon.inf b/content_skaterift/maps/mp_spawn/addon.inf new file mode 100644 index 0000000000000000000000000000000000000000..79e6c2651199ac77ad0d8efc754a2942b4c7d6b8 GIT binary patch literal 84 zcmWN`%ME}a6a>JPD=k=qRoHLIF_vltNpGY(m-cmGHS_?v8ct52JA5CzbWmh9pX7ADpXU{DVsAV=Vgv1M|7?NbkzP#tGz@e&EsI76FT92YFX h2o-MyP2NoC0d#ujB$NcZTkYnD>xgJJnzKUv{{b9`7;OLm literal 0 HcmV?d00001 diff --git a/content_skaterift/playermodels/skaterift_fbi2/addon.inf b/content_skaterift/playermodels/skaterift_fbi2/addon.inf new file mode 100644 index 0000000000000000000000000000000000000000..0705e5d2a18174cd11e626e0aba7b85a5db7cbd1 GIT binary patch literal 83 zcmWN{u?>JA5CzbWmh57|2o@&R4qy-uAs`SqV{DyVU;V_LYiKSPNcJ2F(>Nwvp4C7Y2c{QAS#A~BI8pIzyM;92; literal 0 HcmV?d00001 diff --git a/content_skaterift/playermodels/skaterift_j/addon.inf b/content_skaterift/playermodels/skaterift_j/addon.inf new file mode 100644 index 0000000000000000000000000000000000000000..9e372d1e19bbd62ebed1fa847ff8cae5f1396cb8 GIT binary patch literal 66 zcmV~$OAbIV6a~AD|gQDsFf>fhht(DEO7p2RKr?4#nM51 Ue7j%*FuI_P(ufeZJfC~T55uPvj{pDw literal 0 HcmV?d00001 diff --git a/content_skaterift/playermodels/skaterift_jesus/addon.inf b/content_skaterift/playermodels/skaterift_jesus/addon.inf new file mode 100644 index 0000000000000000000000000000000000000000..18e258cb63f5247f5bed33ee8a10a271b31ca110 GIT binary patch literal 85 zcmWm4u?>JA5CzbWmh9pnwhmwj9-<&e;E1tha`n|u-CRQToT25ANSLX%3T>KrE?9yQ gDu)wvc`{)HFlft3C<&}z&%aOC7SUZadxiSO3$qg%p8x;= literal 0 HcmV?d00001 diff --git a/content_skaterift/playermodels/skaterift_president/addon.inf b/content_skaterift/playermodels/skaterift_president/addon.inf new file mode 100644 index 0000000000000000000000000000000000000000..da72eec4f5a50d719747c3791194afecc3ffc912 GIT binary patch literal 93 zcmXxbu?>JA5CzbWmh9pzCJtZ-96~^jz!_ufalias.type == type ) { + typecount ++; + if( addon_filter( reg, whitelist, blacklist ) ) { if( reg == a ) @@ -326,23 +328,28 @@ static addon_reg *addon_alloc_reg( PublishedFileId_t workshop_id, enum addon_typ /* * If the addon.inf exists int the folder, load into the reg */ -static int addon_try_load_metadata( addon_reg *reg, vg_str folder_path ){ +static int addon_try_load_metadata( addon_reg *reg, vg_str folder_path ) +{ vg_str meta_path = folder_path; vg_strcat( &meta_path, "/addon.inf" ); - if( !vg_strgood( &meta_path ) ){ + if( !vg_strgood( &meta_path ) ) + { vg_error( "The metadata path is too long\n" ); return 0; } FILE *fp = fopen( meta_path.buffer, "rb" ); - if( !fp ){ + if( !fp ) + { vg_error( "Could not open the '%s'\n", meta_path.buffer ); return 0; } reg->metadata_len = fread( reg->metadata, 1, 512, fp ); - if( reg->metadata_len != 512 ){ - if( !feof(fp) ){ + if( reg->metadata_len != 512 ) + { + if( !feof(fp) ) + { fclose(fp); vg_error( "unknown error codition" ); reg->metadata_len = 0; @@ -353,13 +360,15 @@ static int addon_try_load_metadata( addon_reg *reg, vg_str folder_path ){ return 1; } -static void addon_print_info( addon_reg *reg ){ +static void addon_print_info( addon_reg *reg ) +{ vg_info( "addon_reg #%u{\n", addon_system.registry_count ); vg_info( " type: %d\n", reg->alias.type ); vg_info( " workshop_id: " PRINTF_U64 "\n", reg->alias.workshop_id ); vg_info( " folder: [%u]%s\n", reg->foldername_hash, reg->alias.foldername ); vg_info( " metadata_len: %u\n", reg->metadata_len ); vg_info( " cache_id: %hu\n", reg->cache_id ); + vg_info( " flags: %hu\n", reg->flags ); vg_info( "}\n" ); } @@ -404,9 +413,7 @@ static addon_reg *addon_mount_workshop_folder( PublishedFileId_t workshop_id, vg /* * Mount a local folder. may or may not have addon.inf */ -addon_reg *addon_mount_local_addon( const char *folder, - enum addon_type type, - const char *content_ext ) +addon_reg *addon_mount_local_addon( const char *folder, enum addon_type type, const char *content_ext ) { char folder_path_buf[4096]; vg_str folder_path; @@ -433,7 +440,16 @@ addon_reg *addon_mount_local_addon( const char *folder, addon_set_foldername( reg, folder_name ); addon_try_load_metadata( reg, folder_path ); - if( reg->metadata_len == 0 ) + if( reg->metadata_len ) + { + vg_msg msg; + vg_msg_init( &msg, reg->metadata, reg->metadata_len ); + + u32 flags = 0x00; + vg_msg_getkvintg( &msg, "flags", k_vg_msg_u32, &flags, NULL ); + reg->flags |= flags; + } + else { /* create our own content commands */ vg_msg msg; @@ -445,13 +461,16 @@ addon_reg *addon_mount_local_addon( const char *folder, vg_warn( "Creating own metadata for: %s\n", folder_path.buffer ); vg_dir subdir; - if( !vg_dir_open(&subdir, folder_path.buffer) ){ + if( !vg_dir_open(&subdir, folder_path.buffer) ) + { vg_error( "Failed to open '%s'\n", folder_path.buffer ); return NULL; } - while( vg_dir_next_entry(&subdir) ){ - if( vg_dir_entry_type(&subdir) == k_vg_entry_type_file ){ + while( vg_dir_next_entry(&subdir) ) + { + if( vg_dir_entry_type(&subdir) == k_vg_entry_type_file ) + { const char *fname = vg_dir_entry_name(&subdir); vg_str file = folder_path; vg_strcat( &file, "/" ); @@ -471,7 +490,8 @@ addon_reg *addon_mount_local_addon( const char *folder, if( !content_count ) return NULL; if( msg.error == k_vg_msg_error_OK ) reg->metadata_len = msg.cur.co; - else{ + else + { vg_error( "Error creating metadata: %d\n", msg.error ); return NULL; } @@ -588,11 +608,13 @@ void addon_mount_content_folder( enum addon_type type, */ int addon_get_content_folder( addon_reg *reg, vg_str *folder, int async) { - if( reg->alias.workshop_id ){ + if( reg->alias.workshop_id ) + { struct async_workshop_filepath_info *info = NULL; vg_async_item *call = NULL; - if( async ){ + if( async ) + { call = vg_async_alloc( sizeof(struct async_workshop_filepath_info) ); info = call->payload; } @@ -603,23 +625,26 @@ int addon_get_content_folder( addon_reg *reg, vg_str *folder, int async) info->id = reg->alias.workshop_id; info->len = folder->len; - if( async ){ + if( async ) + { vg_async_dispatch( call, async_workshop_get_filepath ); vg_async_stall(); /* too bad! */ } - else { + else + { async_workshop_get_filepath( info, 0 ); } - if( info->buf[0] == '\0' ){ - vg_error( "Failed SteamAPI_GetItemInstallInfo(" PRINTF_U64 ")\n", - reg->alias.workshop_id ); + if( folder->buffer[0] == '\0' ) + { + vg_error( "Failed SteamAPI_GetItemInstallInfo(" PRINTF_U64 ")\n", reg->alias.workshop_id ); return 0; } folder->i = strlen( folder->buffer ); return 1; } - else{ + else + { folder->i = 0; const char *local_folder = diff --git a/src/addon.h b/src/addon.h index 9cbfb68..d0f9060 100644 --- a/src/addon.h +++ b/src/addon.h @@ -15,16 +15,6 @@ struct addon_alias char foldername[ ADDON_FOLDERNAME_MAX ]; }; -#define ADDON_REG_HIDDEN 0x1 -#define ADDON_REG_MTZERO 0x2 -#define ADDON_REG_CITY 0x4 -#define ADDON_REG_PREMIUM 0x8 - -#define ADDON_REG_CAMPAIGN 0x10 -#define ADDON_REG_WORKSHOP 0x20 -#define ADDON_REG_VENUS 0x40 -#define ADDON_REG_INFINITE 0x80 - struct addon_system { struct addon_reg @@ -34,7 +24,6 @@ struct addon_system u8 metadata[512]; /* vg_msg buffer */ u32 metadata_len; u32 flags; - u16 cache_id; } *registry; diff --git a/src/addon_types.h b/src/addon_types.h index 45cd7ac..8e0b5dc 100644 --- a/src/addon_types.h +++ b/src/addon_types.h @@ -12,6 +12,16 @@ enum addon_type{ #define ADDON_MOUNTED_MAX 128 /* total count that we have knowledge of */ #define ADDON_UID_MAX 76 +#define ADDON_REG_HIDDEN 0x1 +#define ADDON_REG_MTZERO 0x2 +#define ADDON_REG_CITY 0x4 +#define ADDON_REG_PREMIUM 0x8 + +#define ADDON_REG_CAMPAIGN 0x10 +#define ADDON_REG_WORKSHOP 0x20 +#define ADDON_REG_VENUS 0x40 +#define ADDON_REG_INFINITE 0x80 + #ifdef VG_ENGINE struct addon_type_info diff --git a/src/menu.c b/src/menu.c index ed82d77..34358cc 100644 --- a/src/menu.c +++ b/src/menu.c @@ -33,7 +33,7 @@ void menu_init(void) static void menu_update_world_filter(void) { menu.world_list_whitelist = 0; - menu.world_list_blacklist = 0;//ADDON_REG_HIDDEN; + menu.world_list_blacklist = ADDON_REG_HIDDEN; if( world_map.superworld_list_selected == k_superworld_campaign ) menu.world_list_whitelist = ADDON_REG_CAMPAIGN; @@ -384,10 +384,15 @@ void menu_update_world_list(void) menu.world_list_whitelist, menu.world_list_blacklist ); menu.world_list_entries[ menu.world_list_display_count ] = reg; + const char *name = NULL; + vg_msg msg; vg_msg_init( &msg, reg->metadata, reg->metadata_len ); - const char *name = vg_msg_getkvstr( &msg, "location" ); + if( vg_msg_seekframe( &msg, "workshop" ) ) + { + name = vg_msg_getkvstr( &msg, "title" ); + } if( !name ) name = reg->alias.foldername; @@ -836,7 +841,7 @@ void menu_gui( ui_context *ctx ) char buf[128]; vg_str str; vg_strnull( &str, buf, sizeof(buf) ); - u32 colour; + u32 colour = 0; network_status_string( &str, &colour ); menu_standard_widget( ctx, inner_online_panel, label_box, 1 ); ui_text( ctx, label_box, buf, 1, k_ui_align_middle_left, colour ); diff --git a/src/skaterift.c b/src/skaterift.c index 13b0771..a13ec26 100644 --- a/src/skaterift.c +++ b/src/skaterift.c @@ -65,26 +65,6 @@ void game_launch_opt(void) skaterift.override_load_world = arg; } -static addon_reg *skaterift_mount_world_unloadable( const char *path, u32 ext ) -{ - addon_reg *reg = addon_mount_local_addon( path, k_addon_type_world, ".mdl" ); - if( !reg ) vg_fatal_error( "world not found\n" ); - reg->flags |= (ext); - return reg; -} - -static void skaterift_load_world_content(void) -{ - /* hub world */ - _world.default_hub_addon = skaterift_mount_world_unloadable( "maps/dev_hub", ADDON_REG_CAMPAIGN ); - skaterift_mount_world_unloadable( "maps/dev_heaven", ADDON_REG_CAMPAIGN | ADDON_REG_HIDDEN ); - skaterift_mount_world_unloadable( "maps/mp_spawn", ADDON_REG_CAMPAIGN | ADDON_REG_CITY|ADDON_REG_PREMIUM ); - skaterift_mount_world_unloadable( "maps/mp_mtzero", ADDON_REG_CAMPAIGN | ADDON_REG_MTZERO|ADDON_REG_PREMIUM ); - skaterift_mount_world_unloadable( "maps/dev_tutorial",ADDON_REG_CAMPAIGN ); - skaterift_mount_world_unloadable( "maps/dev_flatworld", ADDON_REG_HIDDEN ); - skaterift_mount_world_unloadable( "maps/mp_line1", ADDON_REG_CAMPAIGN | ADDON_REG_PREMIUM ); -} - static void skaterift_load_player_content(void) { particle_alloc( &particles_grind, 300 ); @@ -129,7 +109,11 @@ void game_load(void) vg_loader_set_user_information( "Loading content files" ); vg_loader_step( audio_init, NULL ); - vg_loader_step( skaterift_load_world_content, NULL ); + + _world.default_hub_addon = addon_mount_local_addon( "maps/dev_hub", k_addon_type_world, ".mdl" ); + if( !_world.default_hub_addon ) + vg_fatal_error( "Hub world not found\n" ); + vg_console_load_autos(); vg_loader_set_user_information( "Mounting addons" ); diff --git a/src/world_load.c b/src/world_load.c index e4e04f4..8b537ce 100644 --- a/src/world_load.c +++ b/src/world_load.c @@ -52,6 +52,39 @@ static void world_instance_load_mdl( world_instance *world, const char *path, vo #endif AF_LOAD_ARRAY_STRUCT( af, &world->ent_spawn, ent_spawn, heap ); + + if( af_arrcount( &world->ent_spawn ) == 0 ) + { + vg_warn( "There are no spawn points in the world; defaulting to first non-local gate.\n" ); + world->ent_spawn.data = vg_linear_alloc( heap, 1*sizeof(ent_spawn) ); + world->ent_spawn.count = 1; + world->ent_spawn.stride = sizeof(ent_spawn); + + ent_gate *found_gate = NULL; + for( u32 i=0; ient_gate ); i ++ ) + { + ent_gate *gate = af_arritm( &world->ent_gate, i ); + if( gate->flags & k_ent_gate_nonlocal ) + { + found_gate = gate; + break; + } + } + + ent_spawn *fallback_spawn = af_arritm( &world->ent_spawn, 0 ); + fallback_spawn->pstr_name = 0; + q_identity( fallback_spawn->transform.q ); + v3_copy( (v3f){1,1,1}, fallback_spawn->transform.s ); + + if( found_gate ) + v3_copy( found_gate->co[0], fallback_spawn->transform.co ); + else + { + vg_warn( "There are no non-local gates either. Defaulting to 0,0,0.\n" ); + v3_zero( fallback_spawn->transform.co ); + } + } + 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 ); diff --git a/src/world_map.c b/src/world_map.c index 214647e..87df0ca 100644 --- a/src/world_map.c +++ b/src/world_map.c @@ -346,8 +346,8 @@ void render_world_map(void) f32 a = v3_dot(v0,v1); cam.fov = acosf( a ) * 45.0f; - cam.angles[0] -= 0.07f*a + ofs[0]*0.1f; - cam.angles[1] += 0.03f*a + ofs[1]*0.1f; + cam.angles[0] -= /*0.07f*a*/ + ofs[0]*0.1f; + cam.angles[1] += /*0.03f*a*/ + ofs[1]*0.1f; cam.angles[2] = ofs[2]*0.01f; world_map_update_final_camera( &cam ); @@ -371,6 +371,7 @@ void render_world_map(void) vg_framebuffer_bind( g_render.fb_workshop_preview, 1.0f ); glClearColor( 0.02f,0.02f,0.08f, 0.0f ); glClear( GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT ); + glDisable( GL_CULL_FACE ); vg_camera cam, *smooth_cam = &world_map.superworld_cam; ent_camera *cam_temp = af_arritm( &world_map.ent_camera, world_map.superworld_list_selected ); -- 2.25.1