From: hgn Date: Fri, 30 May 2025 22:56:30 +0000 (+0100) Subject: CCCCCCCCCCCCCCCCCCCC X-Git-Url: https://harrygodden.com/git/?a=commitdiff_plain;h=9c169a9564afafd4c085303c6a450abb86fd80db;p=carveJwlIkooP6JGAAIwe30JlM.git CCCCCCCCCCCCCCCCCCCC --- diff --git a/build.c b/build.c index 6735278..c2e1912 100644 --- a/build.c +++ b/build.c @@ -120,9 +120,10 @@ void build_game_metadata(void) { "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_VALLEY | 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 } + { "Training Island", "Australia", "content_skaterift/maps/dev_tutorial/addon.inf", ADDON_REG_CAMPAIGN | ADDON_REG_VOLC }, + { "Center Island", "Australia", "content_skaterift/maps/dev_hub/addon.inf", ADDON_REG_CAMPAIGN | ADDON_REG_HUB }, + { "Downtown", "USA, Georgia", "content_skaterift/maps/mp_spawn/addon.inf", ADDON_REG_CAMPAIGN | ADDON_REG_CITY | ADDON_REG_PREMIUM }, + { "Moon", "Venus", "content_skaterift/maps/vm/addon.inf", ADDON_REG_VENUS | ADDON_REG_PREMIUM }, }; for( u32 i=0; imeta.af, event->pstr_recieve_event, "interact" ) ) { + vg_audio_lock(); + vg_audio_oneshot( &audio_ui[1], 1.0f, 0.0f, 0, 0 ); + vg_audio_unlock(); _ent_npc_speech( npc_id, af_str( &world->meta.af, npc->pstr_context_id ) ); return k_entity_event_result_OK; } @@ -581,6 +584,9 @@ entity_event_result ent_npc_event( ent_event *event ) if( AF_STR_EQ( &world->meta.af, event->pstr_recieve_event, "interact" ) ) { + vg_audio_lock(); + vg_audio_oneshot( &audio_ui[1], 1.0f, 0.0f, 0, 0 ); + vg_audio_unlock(); _ent_npc_speech( npc_id, af_str( &world->meta.af, npc->pstr_context_id ) ); return k_entity_event_result_OK; } diff --git a/src/ent_script.c b/src/ent_script.c index c29f4cb..3ccd61e 100644 --- a/src/ent_script.c +++ b/src/ent_script.c @@ -11,6 +11,7 @@ _ent_script; #include "scripts/tutorial_island.c" #include "scripts/board_maker.c" #include "scripts/l1_speed.c" +#include "scripts/boost.c" struct ent_script_table_entry _ent_script_table[] = { @@ -19,6 +20,7 @@ struct ent_script_table_entry _ent_script_table[] = { "board_maker", _skaterift_script_board_maker }, { "generic", _skaterift_script_generic }, { "l1_speed", _script_l1_speed }, + { "boost", _script_boost }, { NULL } }; diff --git a/src/ent_tornado.c b/src/ent_tornado.c index 920210a..cb38b8a 100644 --- a/src/ent_tornado.c +++ b/src/ent_tornado.c @@ -58,7 +58,7 @@ void ent_tornado_forces( v3f co, v3f cv, v3f out_a ) if( v3_dot( dir, cv ) < 0.0f ) v3_negate( dir, dir ); - f32 s = vg_maxf(0.0f, 1.0f-dist/k_tornado_range), + f32 s = vg_clampf(dist/k_tornado_range, 0.0f, 1.0f), F0 = s*k_tornado_strength, F1 = s*s*k_tornado_strength; diff --git a/src/gameserver.c b/src/gameserver.c index 1696087..3782d72 100644 --- a/src/gameserver.c +++ b/src/gameserver.c @@ -623,7 +623,7 @@ static void gameserver_rx_200_300( SteamNetworkingMessage_t *msg ) char exbuf[1024]; u32 l = network_msgstring( chat->msg, msg->m_cbSize, sizeof(netmsg_chat), exbuf, sizeof(exbuf) ); vg_info( "Rcon: %s\n", exbuf ); - vg_execute_console_input( exbuf, 0 ); + vg_execute_console_input( exbuf, 0, 0 ); } } } diff --git a/src/menu.c b/src/menu.c index 524af94..7229a94 100644 --- a/src/menu.c +++ b/src/menu.c @@ -385,11 +385,11 @@ void menu_update_world_list(void) { menu_update_world_filter(); world_map.selected_superworld_locked = 0; - if( world_map.superworld_list_selected == k_superworld_infinite ) world_map.selected_superworld_locked = 1; + if( world_map.superworld_list_selected == k_superworld_infinite ) + world_map.selected_superworld_locked = 1; + if( world_map.superworld_list_selected == k_superworld_venus_moon ) - { world_map.selected_superworld_locked = !_atom_get( k_atom_list_global, "unlock_venus" ); - } if( world_map.selected_superworld_locked ) { @@ -412,7 +412,14 @@ void menu_update_world_list(void) } i32 max_display_count = menu.world_list_nominal_display_count; - if( max_display_count <= 0 ) max_display_count = 1; + if( max_display_count <= 0 ) + max_display_count = 1; + + bool unlock_mtzero = _atom_get( k_atom_list_global, "unlock_mtzero" ), + unlock_city = _atom_get( k_atom_list_global, "unlock_city" ), + unlock_valley = _atom_get( k_atom_list_global, "unlock_valley" ), + unlock_venus = _atom_get( k_atom_list_global, "unlock_venus" ), + completed = _atom_get( k_atom_list_global, "winner" ); u32 page_base = (*selected_world_index / max_display_count) * max_display_count; for( u32 i=0; iflags & ADDON_REG_VOLC ) + if( unlock_mtzero ) + flags |= MENU_WORLD_FLAG_DONE; + if( reg->flags & ADDON_REG_MTZERO ) - unlocked = _atom_get( k_atom_list_global, "unlock_mtzero" )?1:0; + { + if( unlock_mtzero ) + { + if( unlock_city ) + flags |= MENU_WORLD_FLAG_DONE; + } + else + flags |= MENU_WORLD_FLAG_LOCKED; + } + if( reg->flags & ADDON_REG_CITY ) - unlocked = _atom_get( k_atom_list_global, "unlock_city" )?1:0; - if( reg->flags & ADDON_REG_VALLEY ) - unlocked = _atom_get( k_atom_list_global, "unlock_valley" )?1:0; + { + if( unlock_city ) + { + if( unlock_valley ) + flags |= MENU_WORLD_FLAG_DONE; + } + else + flags |= MENU_WORLD_FLAG_LOCKED; + } - menu.world_list_entries[ menu.world_list_display_count ] = unlocked? addon_id: 0; + if( reg->flags & ADDON_REG_VALLEY ) + { + if( unlock_valley ) + { + if( unlock_venus ) + flags |= MENU_WORLD_FLAG_DONE; + } + else + flags |= MENU_WORLD_FLAG_LOCKED; + } - if( unlocked ) + if( reg->flags & ADDON_REG_VENUS ) { - const char *name = NULL; - vg_msg msg; - vg_msg_init( &msg, reg->metadata, reg->metadata_len ); + if( unlock_venus ) + { + if( completed ) + flags |= MENU_WORLD_FLAG_DONE; + } + else + flags |= MENU_WORLD_FLAG_LOCKED; + } - if( vg_msg_seekframe( &msg, "workshop" ) ) - name = vg_msg_getkvstr( &msg, "title" ); + if( reg->flags & ADDON_REG_HUB ) + flags |= MENU_WORLD_FLAG_HUB; - if( !name ) - name = reg->alias.foldername; + const char *name = NULL; + vg_msg msg; + vg_msg_init( &msg, reg->metadata, reg->metadata_len ); - menu.world_list_names[ menu.world_list_display_count ] = name; - } - else - menu.world_list_names[ menu.world_list_display_count ] = "..."; + if( vg_msg_seekframe( &msg, "workshop" ) ) + name = vg_msg_getkvstr( &msg, "title" ); + + if( !name ) + name = reg->alias.foldername; + + menu.world_list_names[ menu.world_list_display_count ] = name; + menu.world_list_entries[ menu.world_list_display_count ] = addon_id; + menu.world_list_flags[ menu.world_list_display_count ] = flags; menu.world_list_display_count ++; } } diff --git a/src/menu.h b/src/menu.h index d25fbeb..16869f3 100644 --- a/src/menu.h +++ b/src/menu.h @@ -3,6 +3,10 @@ #define MENU_STACK_SIZE 8 #define MENU_WORLD_MAX_COUNT 10 +#define MENU_WORLD_FLAG_HUB 0x1 +#define MENU_WORLD_FLAG_DONE 0x2 +#define MENU_WORLD_FLAG_LOCKED 0x4 + #include "vg/vg_engine.h" #include "entity.h" #include "world_map.h" @@ -61,6 +65,7 @@ struct global_menu addon_id world_list_entries[ MENU_WORLD_MAX_COUNT ]; const char *world_list_names[ MENU_WORLD_MAX_COUNT ]; + u32 world_list_flags[ MENU_WORLD_MAX_COUNT ]; i32 world_list_display_count, world_list_total_count, diff --git a/src/save.c b/src/save.c index 357f0cb..7f180ff 100644 --- a/src/save.c +++ b/src/save.c @@ -99,11 +99,14 @@ static void skaterift_populate_main_savedata( savedata_file *file ) skaterift_write_viewslot( &sav, "board", k_addon_type_board, localplayer.board_view_slot ); skaterift_write_viewslot( &sav, "playermodel", k_addon_type_player, localplayer.playermodel_view_slot ); - addon_reg *reg = addon_details( _world.main.addon_id ); - if( reg ) - skaterift_write_addon_alias( &sav, "location", ®->alias ); - else - vg_error( "Tried to reference un-registered world in save file.\n" ); + if( skaterift.no_save_location == 0 ) + { + addon_reg *reg = addon_details( _world.main.addon_id ); + if( reg ) + skaterift_write_addon_alias( &sav, "location", ®->alias ); + else + vg_error( "Tried to reference un-registered world in save file.\n" ); + } } vg_msg_end_frame( &sav ); @@ -137,7 +140,9 @@ static void skaterift_populate_world_savedata( savedata_file *file ) vg_msg_frame( &sav, "player" ); { - vg_msg_wkvnum( &sav, "position", k_vg_msg_float|k_vg_msg_32b, 3, localplayer.rb.co ); + /* 30.05.25: this was changed to 'co' to unfuck existing players from falling through modified worlds etc */ + //vg_msg_wkvnum( &sav, "position", k_vg_msg_float|k_vg_msg_32b, 3, localplayer.rb.co ); + vg_msg_wkvnum( &sav, "co", k_vg_msg_float|k_vg_msg_32b, 3, localplayer.rb.co ); } vg_msg_end_frame( &sav ); diff --git a/src/scripts/boost.c b/src/scripts/boost.c new file mode 100644 index 0000000..2f3fb42 --- /dev/null +++ b/src/scripts/boost.c @@ -0,0 +1,29 @@ +static bool _script_boost( ent_script_event *event ) +{ + if( event->type == k_escript_event_world_event ) + { + struct script_event_world_io *inf = event->info; + world_instance *world = &_world.main; + if( AF_STR_EQ( &world->meta.af, inf->event->pstr_recieve_event, "boost" ) ) + { + // TODO: Make this dynamiclly fetched from a handler for the entity itself. (or not, fuck you) + if( inf->event->flags & k_ent_event_data_const_entity_id ) + { + u32 marker_id = inf->event->data.const_entity_id; + if( mdl_entity_id_type( marker_id ) != k_ent_marker ) + { + vg_error( "boost not called with not a marker\n" ); + return 0; + } + ent_marker *marker = af_arritm( &world->ent_marker, mdl_entity_id_id(marker_id) ); + + v3f fwd = { 0, 1, 0 }; + q_mulv( marker->transform.q, fwd, fwd ); + + v3_muladds( localplayer.rb.v, fwd, skaterift.boost_scale, localplayer.rb.v ); + } + } + } + + return 1; +} diff --git a/src/scripts/explode.c b/src/scripts/explode.c index cb8304e..d5de82d 100644 --- a/src/scripts/explode.c +++ b/src/scripts/explode.c @@ -37,7 +37,7 @@ static bool _skaterift_script_explode( ent_script_event *event ) } } vg_audio_lock(); - vg_audio_oneshot_3d( &audio_wood_break, where, 100.0f, 1.0f, 0, 0 ); + vg_audio_oneshot_3d( &audio_wood_break, where, 100.0f, 0.6f, 0, 0 ); vg_audio_unlock(); } } diff --git a/src/skaterift.c b/src/skaterift.c index 40568cf..feae789 100644 --- a/src/skaterift.c +++ b/src/skaterift.c @@ -78,6 +78,16 @@ static void skaterift_load_player_content(void) player_board_load( &localplayer.fallback_board, "models/board_none.mdl", vg_mem.rtmemory ); } +int skaterift_quit_command( int argc, const char *argv[] ) +{ + if( argc >= 1 ) + if( !strcmp( argv[0], "1" ) ) + skaterift.no_save_location = 1; + + vg.window_should_close = 1; + return 1; +} + static void game_load_co( vg_coroutine *co ) { if( co_begin( co ) ) @@ -107,9 +117,11 @@ static void game_load_co( vg_coroutine *co ) vg_loader_step( network_init, network_end ); vg_loader_set_user_information( "Initializing subsystems" ); + vg_console_reg_cmd( "quit", skaterift_quit_command, NULL ); vg_console_reg_cmd( "load_world", skaterift_load_world_command, NULL ); vg_console_reg_var( "immobile", &localplayer.immobile, k_var_dtype_i32, 0 ); vg_console_reg_var( "allow_resume", &skaterift.allow_replay_resume, k_var_dtype_i32, VG_VAR_CHEAT ); + vg_console_reg_var( "boost_scale", &skaterift.boost_scale, k_var_dtype_f32, VG_VAR_CHEAT ); vg_loader_step( menu_init, NULL ); vg_loader_step( _user_profile_init, NULL ); vg_loader_step( control_overlay_init, NULL ); diff --git a/src/skaterift.h b/src/skaterift.h index 292a895..4aa5fd8 100644 --- a/src/skaterift.h +++ b/src/skaterift.h @@ -36,5 +36,8 @@ struct skaterift_globals u64 full_ready_mask; const char *override_load_world; + + f32 boost_scale; + bool no_save_location; } extern skaterift; diff --git a/src/world_entity.c b/src/world_entity.c index dabece9..d71b6fc 100644 --- a/src/world_entity.c +++ b/src/world_entity.c @@ -423,7 +423,7 @@ entity_event_result ent_ccmd_event( ent_event *event ) ent_ccmd *ccmd = af_arritm( &world->ent_ccmd, mdl_entity_id_id( event->recieve_entity_id )); const char *cmd_text = af_str( &world->meta.af, ccmd->pstr_command ); vg_info( "ccmd: %s\n", cmd_text ); - vg_execute_console_input( cmd_text, 0 ); + vg_execute_console_input( cmd_text, 0, 1 ); return k_entity_event_result_OK; } else @@ -628,6 +628,7 @@ void entity_bh_closest( void *user, u32 item_index, v3f point, v3f closest ) void world_entity_start( world_instance *world, vg_msg *sav ) { vg_info( "Start instance %p\n", world ); + k_gravity = 9.6f; _event_system.timed_event_count = 0; for( u32 i=0; ient_event ); i ++ ) diff --git a/src/world_load.c b/src/world_load.c index 528aec8..0c913b5 100644 --- a/src/world_load.c +++ b/src/world_load.c @@ -366,7 +366,7 @@ void async_worldsave_go( vg_async_task *task ) vg_msg player_frame = sav; if( vg_msg_seekframe( &player_frame, "player" ) ) { - if( vg_msg_getkvvecf( &player_frame, "position", k_vg_msg_v3f, localplayer.rb.co, NULL ) ) + if( vg_msg_getkvvecf( &player_frame, "co", k_vg_msg_v3f, localplayer.rb.co, NULL ) ) restored_player_position = 1; } diff --git a/src/world_map.c b/src/world_map.c index f6b4957..ebc8c30 100644 --- a/src/world_map.c +++ b/src/world_map.c @@ -658,7 +658,8 @@ void world_map_gui( ui_context *ctx, ui_rect main_area, i32 mh, i32 mv, bool *al ctx->font = &vgf_default_title; ui_rect super_location_box = { back_box[0] - (120+8), back_box[1], 120, 32 }; - ui_text( ctx, super_location_box, "Earth", 1, k_ui_align_middle_center, ui_colour( ctx, k_ui_gray ) ); + ui_text( ctx, super_location_box, _superworld_names[world_map.superworld_list_selected], 1, + k_ui_align_middle_center, ui_colour( ctx, k_ui_gray ) ); if( go_to_super ) { @@ -976,9 +977,11 @@ void world_map_gui( ui_context *ctx, ui_rect main_area, i32 mh, i32 mv, bool *al for( u32 i=0; ifont->sy*2 }; + + if( menu_button( ctx, panel, R == (page_base + i), clickable, name ) ) { menu.clicked_world_id = addon_id; menu.clicked_world_name = menu.world_list_names[i]; } + + if( menu.world_list_flags[i] & MENU_WORLD_FLAG_DONE ) + ui_text( ctx, tickbox, "\xb3\xb3", 1, k_ui_align_middle_center, ui_colour( ctx, k_ui_yellow ) ); + + if( menu.world_list_flags[i] & MENU_WORLD_FLAG_HUB ) + { + ctx->font = &vgf_default_small; + ui_text( ctx, tickbox, "(hub)", 1, k_ui_align_middle_center, 0 ); + ctx->font = &vgf_default_large; + } } if( menu_button( ctx, panel, R == -999, page