From: hgn Date: Wed, 28 May 2025 21:03:56 +0000 (+0100) Subject: recycle youre leflet X-Git-Url: https://harrygodden.com/git/?a=commitdiff_plain;h=112012442377878a9d0d0dc7d8ca51049e431dcd;p=carveJwlIkooP6JGAAIwe30JlM.git recycle youre leflet --- diff --git a/content_skaterift/maps/mp_line1/main.mdl b/content_skaterift/maps/mp_line1/main.mdl index f5e0d8e..83c567e 100644 Binary files a/content_skaterift/maps/mp_line1/main.mdl and b/content_skaterift/maps/mp_line1/main.mdl differ diff --git a/content_skaterift/maps/mp_mtzero/before.mdl b/content_skaterift/maps/mp_mtzero/before.mdl index e000c27..640bbf3 100644 Binary files a/content_skaterift/maps/mp_mtzero/before.mdl and b/content_skaterift/maps/mp_mtzero/before.mdl differ diff --git a/content_skaterift/maps/mp_mtzero/main.mdl b/content_skaterift/maps/mp_mtzero/main.mdl index 0363762..3134faf 100644 Binary files a/content_skaterift/maps/mp_mtzero/main.mdl and b/content_skaterift/maps/mp_mtzero/main.mdl differ diff --git a/content_skaterift/models/battery.mdl b/content_skaterift/models/battery.mdl new file mode 100644 index 0000000..5811319 Binary files /dev/null and b/content_skaterift/models/battery.mdl differ diff --git a/content_skaterift/models/glider.mdl b/content_skaterift/models/glider.mdl index 0a2ca3c..f230ecc 100644 Binary files a/content_skaterift/models/glider.mdl and b/content_skaterift/models/glider.mdl differ diff --git a/src/ent_atom.c b/src/ent_atom.c index 24a8494..d290cba 100644 --- a/src/ent_atom.c +++ b/src/ent_atom.c @@ -105,7 +105,7 @@ entity_event_result _ent_atom_event( ent_event *event ) { if( event->flags & k_ent_event_data_const_i32 ) { - i32 new = _ent_atom_get( event->recieve_entity_id ) | event->data.const_i32; + i32 new = _ent_atom_get( event->recieve_entity_id ) & event->data.const_i32; _ent_atom_set( event->recieve_entity_id, new ); vg_info( KBLU "Value of atom '%s' is now %d\n", _ent_atom_name( event->recieve_entity_id ), new ); } diff --git a/src/player.c b/src/player.c index 6078f5f..5430997 100644 --- a/src/player.c +++ b/src/player.c @@ -70,9 +70,11 @@ void player_init(void) for( u32 i=0; isystem_register ) sys->system_register(); + if( sys->system_register ) + sys->system_register(); } + vg_console_reg_var( "player_battery", &localplayer.has_battery, k_var_dtype_i32, 0 ); vg_console_reg_cmd( "respawn", localplayer_cmd_respawn, NULL ); VG_VAR_F32( k_cam_damp ); VG_VAR_F32( k_cam_spring ); @@ -85,8 +87,14 @@ void player_init(void) vg_console_reg_var( "cinema", &k_cinema, k_var_dtype_f32, 0 ); vg_console_reg_var( "cinema_fixed", &k_cinema_fixed, k_var_dtype_i32, 0 ); #endif - vg_console_reg_var( "invert_y", &k_invert_y, - k_var_dtype_i32, VG_VAR_PERSISTENT ); + vg_console_reg_var( "invert_y", &k_invert_y, k_var_dtype_i32, VG_VAR_PERSISTENT ); + + void *alloc = vg_mem.rtmemory; + mdl_context *mdl = &localplayer.battery; + mdl_open( mdl, "models/battery.mdl", alloc ); + mdl_load_metadata_block( mdl, alloc ); + mdl_async_full_load_std( mdl, NULL ); + mdl_close( mdl ); } void player__debugtext( ui_context *ctx, int size, const char *fmt, ... ) diff --git a/src/player.h b/src/player.h index 771426b..b04df1f 100644 --- a/src/player.h +++ b/src/player.h @@ -136,8 +136,10 @@ struct localplayer * Rendering */ mdl_context skeleton_meta; + mdl_context battery; ms_context animations; struct skeleton skeleton; + i32 has_battery; u8 id_hip, id_chest, diff --git a/src/player_glide.c b/src/player_glide.c index e7876ed..4899bf4 100644 --- a/src/player_glide.c +++ b/src/player_glide.c @@ -83,7 +83,8 @@ static i32 k_glide_pause = 0; void player_glide_pre_update(void) { - if( button_down(k_srbind_use) ){ + if( button_down(k_srbind_use) ) + { localplayer.subsystem = k_player_subsystem_skate; localplayer.glider_orphan = 1; @@ -474,9 +475,7 @@ void player_glide_bind(void) /* allocate effects */ for( u32 i=0; imesh ); for( u32 i=0; imesh_count; i ++ ) { @@ -572,8 +568,7 @@ void render_glider_model( vg_camera *cam, world_instance *world, * that can hold that information instead so we can save it into * the replay */ -void player_glide_render( vg_camera *cam, world_instance *world, - player_pose *pose ) +void player_glide_render( vg_camera *cam, world_instance *world, player_pose *pose ) { if( !((localplayer.subsystem == k_player_subsystem_glide) || (localplayer.observing_system == k_player_subsystem_glide) || @@ -595,7 +590,8 @@ void player_glide_render( vg_camera *cam, world_instance *world, WORLD_BIND_LIGHT_BUFFERS_UB0_TEX234( world, model_board_view ); ms_keyframe kf_res; - if( localplayer.glider_orphan ){ + if( localplayer.glider_orphan ) + { rb_extrapolate( &player_glide.rb, kf_res.co, kf_res.q ); v3_fill( kf_res.s, 1.0f ); @@ -603,7 +599,8 @@ void player_glide_render( vg_camera *cam, world_instance *world, q_mulv( kf_res.q, (v3f){0,-0.5f,0}, temp ); v3_add( temp, kf_res.co, kf_res.co ); } - else { + else + { f32 target; if( localplayer.subsystem == k_player_subsystem_glide ) target = 1.0f; else target = 0.0f; @@ -613,11 +610,8 @@ void player_glide_render( vg_camera *cam, world_instance *world, vg_slewf( &player_glide.t, target, vg.time_frame_delta * 4.0f ); ms_keyframe kf_backpack; - struct skeleton *sk = &localplayer.skeleton; - m4x3_mulv( localplayer.final_mtx[localplayer.id_chest ], - sk->bones[localplayer.id_chest].co, - kf_backpack.co ); + m4x3_mulv( localplayer.final_mtx[localplayer.id_chest ], sk->bones[localplayer.id_chest].co, kf_backpack.co ); v4f qyaw, qpitch, qchest, q; q_axis_angle( qyaw, (v3f){0,1,0}, VG_TAUf*0.25f ); @@ -629,7 +623,8 @@ void player_glide_render( vg_camera *cam, world_instance *world, q_normalize( kf_backpack.q ); f32 scale; - if( player_glide.t <= 0.0f ){ + if( player_glide.t <= 0.0f ) + { f32 st = player_glide.t + 1.0f, sst = vg_smoothstepf(st), isst= 1.0f - sst; @@ -639,18 +634,12 @@ void player_glide_render( vg_camera *cam, world_instance *world, q_axis_angle( qspin, (v3f){0,0,1}, VG_TAUf * isst * 0.5f ); q_mul( kf_backpack.q, qspin, kf_backpack.q ); kf_backpack.co[1] += isst * 1.0f; - v3_muladds( kf_backpack.co, - localplayer.final_mtx[ localplayer.id_chest ][0], - isst * 0.25f, - kf_backpack.co ); + v3_muladds( kf_backpack.co, localplayer.final_mtx[ localplayer.id_chest ][0], isst * 0.25f, kf_backpack.co ); } - else{ + else scale = vg_lerpf( 0.2f, 1.0f, vg_smoothstepf(player_glide.t) ); - } - v3_fill( kf_backpack.s, scale ); - v3_copy( pose->root_co, kf_res.co ); v4_copy( pose->root_q, kf_res.q ); v3_fill( kf_res.s, scale ); @@ -664,7 +653,7 @@ void player_glide_render( vg_camera *cam, world_instance *world, m3x3_scale( mmdl, kf_res.s ); v3_copy( kf_res.co, mmdl[3] ); - render_glider_model( cam, world, mmdl, k_board_shader_player ); + render_glider_model( cam, world, mmdl, k_board_shader_player, &player_glide.glider ); /* totally FUCKED */ v4_copy( kf_res.q, player_glide.remote_animator.root_q ); diff --git a/src/player_glide.h b/src/player_glide.h index 2a66764..8d10d17 100644 --- a/src/player_glide.h +++ b/src/player_glide.h @@ -50,7 +50,7 @@ struct player_glide u32 trail_count; v3f trail_positions[2]; - mdl_context glider; + mdl_context glider, battery; } extern player_glide; extern struct player_subsystem_interface player_subsystem_glide; @@ -69,8 +69,7 @@ bool glider_physics( v2f steer ); void player_glide_animator_exchange( bitpack_ctx *ctx, void *data ); void player_glide_render( vg_camera *cam, world_instance *world, player_pose *pose ); -void render_glider_model( vg_camera *cam, world_instance *world, - m4x3f mmdl, enum board_shader shader ); +void render_glider_model( vg_camera *cam, world_instance *world, m4x3f mmdl, enum board_shader shader, mdl_context *mdl ); void player_glide_remote_animator_exchange( bitpack_ctx *ctx, void *data ); void player_glide_equip_glider(void); void player_glide_render_effects( vg_camera *cam ); diff --git a/src/player_remote.c b/src/player_remote.c index 618b663..7bb2a46 100644 --- a/src/player_remote.c +++ b/src/player_remote.c @@ -753,12 +753,13 @@ void render_remote_players( world_instance *world, vg_camera *cam ) u32 index = draw_list[j]; struct network_player *player = &netplayers.list[index]; - if( !player->render_glider ) continue; + if( !player->render_glider ) + continue; if( player->render_glider ) { v3f *glider_mtx = netplayers.glider_mtx[ index ]; - render_glider_model( cam, world, glider_mtx, k_board_shader_entity ); + render_glider_model( cam, world, glider_mtx, k_board_shader_entity, &player_glide.glider ); } } } diff --git a/src/player_render.c b/src/player_render.c index 904b77f..ab42b48 100644 --- a/src/player_render.c +++ b/src/player_render.c @@ -322,88 +322,6 @@ void player__observe_system( enum player_subsystem id ) } } -#if 0 -void player__animate_from_replay( replay_buffer *replay ) -{ - VG_ASSERT(0); - replay_frame *frame = replay->cursor_frame, - *next = NULL; - if( frame ) - { - next = frame->r; - - struct player_subsystem_interface *sys0 = player_subsystems[frame->system]; - void *a0 = replay_frame_data( frame, k_replay_framedata_animator ); - - struct replay_glider_data - *g0 = replay_frame_data( frame, k_replay_framedata_glider ), - *g1; - - f32 t = 0.0f; - - if( next ) - { - t = replay_subframe_time( replay ); - - player_pose pose0, pose1; - struct player_subsystem_interface *sys1 = player_subsystems[next->system]; - void *a1 = replay_frame_data( next, k_replay_framedata_animator ); - - sys0->pose( a0, &pose0 ); - sys1->pose( a1, &pose1 ); - - lerp_player_pose( &pose0, &pose1, t, &localplayer.pose ); - g1 = replay_frame_data( next, k_replay_framedata_glider ); - } - else - { - sys0->pose( a0, &localplayer.pose ); - g1 = NULL; - } - - player__observe_system( frame->system ); - if( sys0->sfx_comp ) - sys0->sfx_comp( a0 ); - - if( g0 ) - { - if( g0->glider_orphan ) - { - if( g1 ) - { - v3_lerp( g0->co, g1->co, t, player_glide.rb.co ); - q_nlerp( g0->q, g1->q, t, player_glide.rb.q ); - } - else - { - v3_copy( g0->co, player_glide.rb.co ); - v4_copy( g0->q, player_glide.rb.q ); - } - - rb_update_matrices( &player_glide.rb ); - } - - if( g1 ) - player_glide.t = vg_lerpf( g0->t, g1->t, t ); - else - player_glide.t = g0->t; - - localplayer.have_glider = g0->have_glider; - localplayer.glider_orphan = g0->glider_orphan; - } - else /* no glider data in g1, or edge case we dont care about */ - { - localplayer.have_glider = 0; - localplayer.glider_orphan = 0; - player_glide.t = 0.0f; - } - } - else return; - - apply_full_skeleton_pose( &localplayer.skeleton, &localplayer.pose, localplayer.final_mtx ); -} -#endif - void player__pre_render(void) { /* shadowing/ao info */ @@ -601,6 +519,29 @@ void player__render( vg_camera *cam ) glEnable( GL_CULL_FACE ); player_glide_render( cam, world, &localplayer.pose ); + + if( localplayer.has_battery ) + { + ms_keyframe kf_backpack; + struct skeleton *sk = &localplayer.skeleton; + m4x3_mulv( localplayer.final_mtx[localplayer.id_chest ], sk->bones[localplayer.id_chest].co, kf_backpack.co ); + + v4f qyaw, qpitch, qchest, q; + q_axis_angle( qyaw, (v3f){0,1,0}, VG_TAUf*0.25f ); + q_axis_angle( qpitch, (v3f){1,0,0}, VG_TAUf*0.25f ); + m3x3_q( localplayer.final_mtx[ localplayer.id_chest ], qchest ); + q_mul( qyaw, qpitch, q ); + q_mul( qchest, q, kf_backpack.q ); + q_normalize( kf_backpack.q ); + v3_fill( kf_backpack.s, 0.2f ); + + m4x3f mmdl; + q_m3x3( kf_backpack.q, mmdl ); + m3x3_scale( mmdl, kf_backpack.s ); + v3_copy( kf_backpack.co, mmdl[3] ); + render_glider_model( cam, world, mmdl, k_board_shader_player, &localplayer.battery ); + } + glDisable( GL_CULL_FACE ); } diff --git a/src/world_map.c b/src/world_map.c index 0c62719..f6b4957 100644 --- a/src/world_map.c +++ b/src/world_map.c @@ -49,6 +49,14 @@ static void respawn_map_draw_icon( vg_camera *cam, enum gui_icon icon, v3f pos, m4x4_mulv( cam->mtx.pv, v, v ); v2_divs( v, v[3], v ); + u32 selected_type = mdl_entity_id_type( world_map.selected_entity_id ), + selected_index = mdl_entity_id_id( world_map.selected_entity_id ); + if( (selected_type == k_ent_spawn) && (world_map.spawn_timer > 0.0f) ) + { + f32 t = vg_smoothstepf( world_map.spawn_timer ); + size *= t; + } + gui_draw_icon( icon, (v2f){ v[0]*0.5f+0.5f,v[1]*0.5f+0.5f }, size ); } diff --git a/src/world_render.c b/src/world_render.c index 24429e3..7a451b0 100644 --- a/src/world_render.c +++ b/src/world_render.c @@ -1065,7 +1065,7 @@ static void render_other_entities( world_instance *world, vg_camera *cam ) scale = vg_smoothstepf( vg_clampf( 5.0f-dist*5.0f, 0.0f,1.0f ) ); m3x3_scalef( mdl, scale ); - render_glider_model( cam, world, mdl, k_board_shader_entity ); + render_glider_model( cam, world, mdl, k_board_shader_entity, &player_glide.glider ); } cutscene_render( world, cam );