maths api changes
authorhgn <hgodden00@gmail.com>
Mon, 15 May 2023 16:12:04 +0000 (17:12 +0100)
committerhgn <hgodden00@gmail.com>
Mon, 15 May 2023 16:12:04 +0000 (17:12 +0100)
19 files changed:
audio.h
blender_export.py
ent_skateshop.c
ent_skateshop.h
entity.h
maps_src/mp_gridmap.mdl
maps_src/mp_mtzero.mdl
maps_src/mp_spawn.mdl
models_src/ch_jordan.mdl
models_src/ch_new.mdl
models_src/ch_outlaw.mdl
models_src/rs_buggy.mdl [new file with mode: 0644]
player_ragdoll.c
player_skate.c
player_walk.c
skaterift.c
world.h
world_gen.h
world_routes.h

diff --git a/audio.h b/audio.h
index 51445b665b6edfc70e49a8d247e326bf90be157a..e6e76bdd22d5940a1ffb3beff528485d06b4854a 100644 (file)
--- a/audio.h
+++ b/audio.h
@@ -186,6 +186,8 @@ VG_STATIC void audio_ambient_sprite_play( v3f co, audio_clip *clip )
    audio_unlock();
 }
 
+VG_STATIC
+enum audio_sprite_type world_audio_sample_sprite_random(v3f origin, v3f output);
 VG_STATIC void audio_ambient_sprites_update( world_instance *world, v3f co )
 {
    static float accum = 0.0f;
@@ -201,11 +203,13 @@ VG_STATIC void audio_ambient_sprites_update( world_instance *world, v3f co )
    
    if( sprite_type != k_audio_sprite_type_none ){
       if( sprite_type == k_audio_sprite_type_grass ){
-         audio_ambient_sprite_play( sprite_pos, &audio_grass[rand()%4] );
+         audio_ambient_sprite_play( sprite_pos, &audio_grass[vg_randu32()%4] );
       }
       else if( sprite_type == k_audio_sprite_type_water ){
-         if( world->water.enabled )
-            audio_ambient_sprite_play( sprite_pos, &audio_water[rand()%6] );
+         if( world->water.enabled ){
+            audio_ambient_sprite_play( sprite_pos, 
+                                       &audio_water[vg_randu32()%6] );
+         }
       }
    }
 }
index b7068fe5d47c5fadd50f7dcb59a7c967ec652269..f27123773e24397891e41edd2769e5297af79e84 100644 (file)
@@ -340,13 +340,29 @@ class ent_traffic(Structure):
                ("index",c_uint32)]
 #}
 
-class ent_skateshop(Structure):
+# Skateshop
+# ---------------------------------------------------------------
+class ent_skateshop_characters(Structure):
 #{
-   _fields_ = [("transform",mdl_transform),
-               ("id_display",c_uint32),
+   _fields_ = [("id_display",c_uint32),
+               ("id_info",c_uint32)]
+#}
+class ent_skateshop_boards(Structure):
+#{
+   _fields_ = [("id_display",c_uint32),
                ("id_info",c_uint32),
-               ("id_rack",c_uint32),
-               ("id_camera",c_uint32)]
+               ("id_rack",c_uint32)]
+#}  
+class ent_skateshop_anon_union(Union):
+#{
+   _fields_ = [("boards",ent_skateshop_boards),
+               ("character",ent_skateshop_characters)]
+#}
+class ent_skateshop(Structure):
+#{
+   _fields_ = [("transform",mdl_transform), ("type",c_uint32),
+               ("id_camera",c_uint32), 
+               ("_anonymous_union",ent_skateshop_anon_union)]
 #}
 
 class ent_swspreview(Structure):
@@ -356,6 +372,8 @@ class ent_swspreview(Structure):
                ("id_display1",c_uint32)]
 #}
 
+# Menu
+# -----------------------------------------------------------------
 class ent_menuitem_slider(Structure):
 #{
    _fields_ = [("id_min",c_uint32),
@@ -363,26 +381,22 @@ class ent_menuitem_slider(Structure):
                ("id_handle",c_uint32),
                ("pstr_data",c_uint32)]
 #}
-
 class ent_menuitem_button(Structure):
 #{
    _fields_ = [("pstr",c_uint32)]
 #}
-
 class ent_menuitem_checkmark(Structure):
 #{
    _fields_ = [("id_check",c_uint32),
                ("pstr_data",c_uint32),
                ("offset",c_float*3)]
 #}
-
 class ent_menuitem_page(Structure):
 #{
    _fields_ = [("pstr_name",c_uint32),
                ("id_entrypoint",c_uint32),
                ("id_viewpoint",c_uint32)]
 #}
-
 class ent_menuitem_anon_union(Union):
 #{
    _fields_ = [("slider",ent_menuitem_slider),
@@ -390,7 +404,6 @@ class ent_menuitem_anon_union(Union):
                ("checkmark",ent_menuitem_checkmark),
                ("page",ent_menuitem_page)]
 #}
-
 class ent_menuitem(Structure):
 #{
    _fields_ = [("type",c_uint32), ("groups",c_uint32),
@@ -1658,9 +1671,18 @@ def sr_compile( collection ):
          elif ent_type == 'ent_skateshop':#{
             skateshop = ent_skateshop()
             obj_data = obj.SR_data.ent_skateshop[0]
-            skateshop.id_display = sr_entity_id( obj_data.mark_display )
-            skateshop.id_info = sr_entity_id( obj_data.mark_info )
-            skateshop.id_rack = sr_entity_id( obj_data.mark_rack )
+            skateshop.type = int(obj_data.tipo)
+            if skateshop.type == 0:#{
+               boardshop = skateshop._anonymous_union.boards
+               boardshop.id_display = sr_entity_id( obj_data.mark_display )
+               boardshop.id_info = sr_entity_id( obj_data.mark_info )
+               boardshop.id_rack = sr_entity_id( obj_data.mark_rack )
+            #}
+            elif skateshop.type == 1:#{
+               charshop = skateshop._anonymous_union.character
+               charshop.id_display = sr_entity_id( obj_data.mark_display )
+               charshop.id_info = sr_entity_id( obj_data.mark_info )
+            #}
             skateshop.id_camera = sr_entity_id( obj_data.cam )
             compile_obj_transform( obj, skateshop.transform )
             sr_ent_push(skateshop)
@@ -2774,6 +2796,9 @@ class SR_OBJECT_ENT_TRAFFIC(bpy.types.PropertyGroup):
 
 class SR_OBJECT_ENT_SKATESHOP(bpy.types.PropertyGroup):
 #{
+   tipo: bpy.props.EnumProperty( name='Type',
+                                 items=[('0','boards',''),
+                                        ('1','character','')] )
    mark_rack: bpy.props.PointerProperty( \
            type=bpy.types.Object, name="Board Rack", \
            poll=lambda self,obj: sr_filter_ent_type(obj,['ent_marker']))
@@ -3861,21 +3886,33 @@ def cv_draw():
             #}
          #}
          elif ent_type == 'ent_skateshop':#{
-            cc = (0.0,0.9,0.6)
-            cc1 = (0.4,0.9,0.2)
-            cc2 = (0.9,0.6,0.1)
-
             data = obj.SR_data.ent_skateshop[0]
             display = data.mark_display
             info = data.mark_info
-            rack = data.mark_rack
 
-            rack_cu = Vector((3.15,2.0,0.1))*0.5
-            rack_co = Vector((0.0,0.0,0.0))
-            display_cu = Vector((0.3,1.2,0.1))*0.5
-            display_co = Vector((0.0,0.0,0.1))*0.5
-            info_cu = Vector((1.2,0.01,0.3))*0.5
-            info_co = Vector((0.0,0.0,0.0))*0.5
+            if data.tipo == '0':#{
+               cc = (0.0,0.9,0.6)
+               cc1 = (0.4,0.9,0.2)
+               cc2 = (0.9,0.6,0.1)
+
+               rack = data.mark_rack
+
+               rack_cu = Vector((3.15,2.0,0.1))*0.5
+               rack_co = Vector((0.0,0.0,0.0))
+               display_cu = Vector((0.3,1.2,0.1))*0.5
+               display_co = Vector((0.0,0.0,0.1))*0.5
+               info_cu = Vector((1.2,0.01,0.3))*0.5
+               info_co = Vector((0.0,0.0,0.0))*0.5
+            #}
+            elif data.tipo == '1':#{
+               rack = None
+               cc1 = (1.0,0.0,0.0)
+               cc2 = (1.0,0.5,0.0)
+               display_cu = Vector((0.4,0.4,2.0))*0.5
+               display_co = Vector((0.0,0.0,1.0))*0.5
+               info_cu = Vector((1.2,0.01,0.3))*0.5
+               info_co = Vector((0.0,0.0,0.0))*0.5
+            #}
 
             if rack:
                cv_draw_ucube( rack.matrix_world, cc, rack_cu, rack_co )
index 92e7660255ef06f813b800bb0f4e6dd79e4f8c96..e7049b5a6309b03c7a1b1088528bb16c795ae024 100644 (file)
@@ -451,6 +451,7 @@ VG_STATIC struct cache_board *skateshop_selected_cache_if_loaded(void)
 /*
  * VG event preupdate 
  */
+void temp_update_playermodel(void);
 VG_STATIC void global_skateshop_preupdate(void)
 {
    float rate = vg_minf( 1.0f, vg.time_frame_delta * 2.0f );
@@ -462,18 +463,30 @@ VG_STATIC void global_skateshop_preupdate(void)
    world_instance *world = get_active_world();
 
    ent_skateshop *shop = global_skateshop.ptr_ent;
+
+   /* camera positioning */
    ent_camera *ref = mdl_arritm( &world->ent_camera, 
                                  mdl_entity_id_id(shop->id_camera) );
-   ent_marker *display = mdl_arritm( &world->ent_marker,
-                                 mdl_entity_id_id(shop->id_display) );
-   
+      
    v3f dir = {0.0f,-1.0f,0.0f};
    mdl_transform_vector( &ref->transform, dir, dir );
    player_vector_angles( localplayer.cam_override_angles, dir, 1.0f, 0.0f );
-   
+
    v3f lookat;
-   v3_sub( display->transform.co, localplayer.rb.co, lookat );
-   
+   if( shop->type == k_skateshop_type_boardshop ){
+      ent_marker *display = mdl_arritm( &world->ent_marker,
+                                    mdl_entity_id_id(shop->boards.id_display) );
+      
+      v3_sub( display->transform.co, localplayer.rb.co, lookat );
+      
+   }
+   else if( shop->type == k_skateshop_type_charshop ){
+      v3_sub( ref->transform.co, localplayer.rb.co, lookat );
+   }
+   else{
+      vg_fatal_error( "Unknown store (%u)\n", shop->type );
+   }
+
    q_axis_angle( localplayer.rb.q, (v3f){0.0f,1.0f,0.0f}, 
                  atan2f(lookat[0],lookat[2]) );
 
@@ -481,60 +494,83 @@ VG_STATIC void global_skateshop_preupdate(void)
    localplayer.cam_override_fov = ref->fov;
    localplayer.cam_override_strength = global_skateshop.factive;
 
-   gui_helper_action( axis_display_string( k_sraxis_mbrowse_h ), "browse" );
-   gui_helper_action( button_display_string( k_srbind_mback ), "exit" );
+   /* input */
+   if( shop->type == k_skateshop_type_boardshop ){
+      gui_helper_action( axis_display_string( k_sraxis_mbrowse_h ), "browse" );
+      gui_helper_action( button_display_string( k_srbind_mback ), "exit" );
 
-   int moved = 0;
-   struct cache_board *selected_cache = skateshop_selected_cache_if_loaded();
+      struct cache_board *selected_cache = skateshop_selected_cache_if_loaded();
 
-   if( selected_cache ){
-      gui_helper_action( button_display_string( k_srbind_maccept ), "pick" );
-   }
+      if( selected_cache ){
+         gui_helper_action( button_display_string( k_srbind_maccept ), "pick" );
+      }
 
-   /*
-    * Controls
-    * ----------------------
-    */
+      /*
+       * Controls
+       * ----------------------
+       */
 
-   if( global_skateshop.interaction_cooldown > 0.0f ){
-      global_skateshop.interaction_cooldown -= vg.time_delta;
-      return;
-   }
-
-   if( button_down( k_srbind_mleft ) ){
-      if( global_skateshop.selected_registry_id > 0 ){
-         global_skateshop.selected_registry_id --;
-         moved = 1;
+      if( button_down( k_srbind_mleft ) ){
+         if( global_skateshop.selected_registry_id > 0 ){
+            global_skateshop.selected_registry_id --;
+         }
       }
-   }
 
-   if( button_down( k_srbind_mright ) ){
-      if( global_skateshop.selected_registry_id+1 < 
-               global_skateshop.registry_count )
-      {
-         global_skateshop.selected_registry_id ++;
-         moved = 1;
+      if( button_down( k_srbind_mright ) ){
+         if( global_skateshop.selected_registry_id+1 < 
+                  global_skateshop.registry_count )
+         {
+            global_skateshop.selected_registry_id ++;
+         }
       }
-   }
 
-   if( moved ){
-      global_skateshop.interaction_cooldown = 0.125f;
-      return;
-   }
+      if( selected_cache && button_down( k_srbind_maccept ) ){
+         vg_info( "chose board from skateshop (%u)\n", 
+                     global_skateshop.selected_registry_id );
 
-   if( selected_cache && button_down( k_srbind_maccept ) ){
-      vg_info( "chose board from skateshop (%u)\n", 
-                  global_skateshop.selected_registry_id );
+         if( localplayer.board_view_slot ){
+            unwatch_cache_board( localplayer.board_view_slot );
+         }
+
+         localplayer.board_view_slot = selected_cache;
+         watch_cache_board( localplayer.board_view_slot );
 
-      if( localplayer.board_view_slot ){
-         unwatch_cache_board( localplayer.board_view_slot );
+         global_skateshop_exit();
+         return;
+      }
+   }
+   else if( shop->type == k_skateshop_type_charshop ){
+      gui_helper_action( axis_display_string( k_sraxis_mbrowse_h ), "browse" );
+      gui_helper_action( button_display_string( k_srbind_mback ), "exit" );
+      gui_helper_action( button_display_string( k_srbind_maccept ), "pick" );
+
+      if( button_down( k_srbind_mleft ) ){
+         if( cl_playermdl_id > 0 ){
+            cl_playermdl_id --;
+         }
+         else{
+            cl_playermdl_id = 2; /* HACK */
+         }
+         temp_update_playermodel(); /* HACK */
       }
 
-      localplayer.board_view_slot = selected_cache;
-      watch_cache_board( localplayer.board_view_slot );
+      if( button_down( k_srbind_mright ) ){
+         if( cl_playermdl_id+1 < 3 ){
+            cl_playermdl_id ++;
+         }
+         else{
+            cl_playermdl_id = 0;  /* HACK */
+         }
+         temp_update_playermodel(); /* HACK */
+         /*lol*/
+      }
 
-      global_skateshop_exit();
-      return;
+      if( button_down( k_srbind_maccept ) ){
+         global_skateshop_exit();
+      }
+   }
+   else{
+      vg_fatal_error( "Unknown store (%u)\n", shop->type );
    }
 
    if( button_down( k_srbind_mback ) ){
@@ -543,22 +579,17 @@ VG_STATIC void global_skateshop_preupdate(void)
    }
 }
 
-/*
- * World: render event
- */
-VG_STATIC void skateshop_render(void)
+VG_STATIC void skateshop_render_boardshop(void)
 {
-   if( !global_skateshop.active ) return;
-      
-   ent_skateshop *shop = global_skateshop.ptr_ent;
    world_instance *world = get_active_world();
+   ent_skateshop *shop = global_skateshop.ptr_ent;
 
    u32 slot_count = vg_list_size(global_skateshop.shop_view_slots);
 
    ent_marker *mark_rack = mdl_arritm( &world->ent_marker, 
-                                  mdl_entity_id_id(shop->id_rack)),
+                                  mdl_entity_id_id(shop->boards.id_rack)),
               *mark_display = mdl_arritm( &world->ent_marker,
-                                  mdl_entity_id_id(shop->id_display));
+                                  mdl_entity_id_id(shop->boards.id_display));
 
    int visibility[ SKATESHOP_VIEW_SLOT_MAX ];
    SDL_AtomicLock( &global_skateshop.sl_cache_access );
@@ -607,7 +638,7 @@ fade_out:;
    }
 
    ent_marker *mark_info = mdl_arritm( &world->ent_marker, 
-                                        mdl_entity_id_id(shop->id_info));
+                                        mdl_entity_id_id(shop->boards.id_info));
    m4x3f mtext, mrack;
    mdl_transform_m4x3( &mark_info->transform, mtext );
    mdl_transform_m4x3( &mark_rack->transform, mrack );
@@ -681,6 +712,30 @@ fade_out:;
                        info->author_name, &main_camera, mmdl );
 }
 
+VG_STATIC void skateshop_render_charshop(void)
+{
+}
+
+/*
+ * World: render event
+ */
+VG_STATIC void skateshop_render(void)
+{
+   if( !global_skateshop.active ) return;
+      
+   ent_skateshop *shop = global_skateshop.ptr_ent;
+
+   if( shop->type == k_skateshop_type_boardshop ){
+      skateshop_render_boardshop();
+   }
+   else if( shop->type == k_skateshop_type_charshop ){
+      skateshop_render_charshop();
+   }
+   else{
+      vg_fatal_error( "Unknown store (%u)\n", shop->type );
+   }
+}
+
 /*
  * Entity logic: entrance event
  */
@@ -708,8 +763,10 @@ VG_STATIC void ent_skateshop_call( world_instance *world, ent_call *call )
       localplayer._walk.move_speed = 0.0f;
       global_skateshop.ptr_ent = shop;
       
-      skateshop_update_viewpage();
-      workshop_op_item_scan();
+      if( shop->type == k_skateshop_type_boardshop ){
+         skateshop_update_viewpage();
+         workshop_op_item_scan();
+      }
    }
 }
 
index 4f84f7ae03dc68ddfd009cfc7b9dc387bb09b359..2cc5d5a15ad41b8cd0640988fdae391d0ff2a987 100644 (file)
@@ -63,7 +63,6 @@ struct{
           registry_count;
 
    u32 selected_registry_id;
-   float interaction_cooldown;
 }
 static global_skateshop;
 
index a92f4bf1055d96d1fadb50d0c57e6f9280409bde..bf6b2d5b776655dc7242ffa4f7b83a86b63a1d8d 100644 (file)
--- a/entity.h
+++ b/entity.h
@@ -215,12 +215,29 @@ struct ent_marker{
    u32 pstr_alias;
 };
 
+enum skateshop_type{
+   k_skateshop_type_boardshop,
+   k_skateshop_type_charshop
+};
+
 struct ent_skateshop{
    mdl_transform transform;
-   u32 id_display,
-       id_info,
-       id_rack,
-       id_camera;
+   u32 type, id_camera;
+
+   union{
+      struct{
+         u32 id_display,
+             id_info,
+             id_rack;
+      }
+      boards;
+
+      struct{
+         u32 id_display,
+             id_info;
+      }
+      character;
+   };
 };
 
 struct ent_swspreview{
index 84df95832e6e36da18fe234998287048b3c8eae0..ea3174f3c9bcf70df493ae1cb873f60310c42b2f 100644 (file)
Binary files a/maps_src/mp_gridmap.mdl and b/maps_src/mp_gridmap.mdl differ
index df5243b55c91adde011e716b487c183415260b78..25e97272bb7c00061d45def780402fdf0cc7b31c 100644 (file)
Binary files a/maps_src/mp_mtzero.mdl and b/maps_src/mp_mtzero.mdl differ
index 9cdba1b924db46b605a4750b33bc5b92cf46e5cf..87f130e9cd147f1af41487908762bb2862acdde5 100644 (file)
Binary files a/maps_src/mp_spawn.mdl and b/maps_src/mp_spawn.mdl differ
index f2bc80654fc896649d210fe5fb3b057626986cd6..5d12a1a38d589bca0661fdbc6c646e7f12cdef10 100644 (file)
Binary files a/models_src/ch_jordan.mdl and b/models_src/ch_jordan.mdl differ
index 086ffead7de019a39afb77e155d814310a903341..4e6b96ff663ec4c01f347ab380f7746f3b9f8de8 100644 (file)
Binary files a/models_src/ch_new.mdl and b/models_src/ch_new.mdl differ
index 2e9eccde468d4da704845d37002bb32f5de0ab1d..04ac7945aed6b38d3ecb0256b30338b302fec05c 100644 (file)
Binary files a/models_src/ch_outlaw.mdl and b/models_src/ch_outlaw.mdl differ
diff --git a/models_src/rs_buggy.mdl b/models_src/rs_buggy.mdl
new file mode 100644 (file)
index 0000000..c814154
Binary files /dev/null and b/models_src/rs_buggy.mdl differ
index a1733b765289449b93e62b2aa1b78ffcea20ec81..7b5308816d228d173df193b93f2569c9ea80b44a 100644 (file)
@@ -446,7 +446,7 @@ VG_STATIC void player_ragdoll_iter( struct player_ragdoll *rd )
    if( stress ){
       temp_filter = 20;
       audio_lock();
-      audio_oneshot_3d( &audio_hits[rand()%5], stress->co, 20.0f, 1.0f );
+      audio_oneshot_3d( &audio_hits[vg_randu32()%5], stress->co, 20.0f, 1.0f );
       audio_unlock();
    }
 }
index ae3272cfbb097c1f3e43dcb46439d8e0e6ac787a..f38f6d4302a38c8914ac4b60c4de46ebd470b56d 100644 (file)
@@ -980,7 +980,7 @@ VG_STATIC void skate_apply_jump_model( player_instance *player )
       s->state.jump_time = vg.time;
 
       audio_lock();
-      audio_oneshot_3d( &audio_jumps[rand()%2], player->rb.co, 40.0f, 1.0f );
+      audio_oneshot_3d( &audio_jumps[vg_randu32()%2], player->rb.co, 40.0f, 1.0f );
       audio_unlock();
    }
 }
@@ -2196,7 +2196,7 @@ VG_STATIC void player__skate_update( player_instance *player )
          if( !prev_contacts[i] ){
             v3f co;
             m4x3_mulv( player->rb.to_world, wheels[i].pos, co );
-            audio_oneshot_3d( &audio_taps[rand()%4], co, 40.0f, 0.75f );
+            audio_oneshot_3d( &audio_taps[vg_randu32()%4], co, 40.0f, 0.75f );
          }
       }
       audio_unlock();
@@ -2570,11 +2570,11 @@ begin_collision:;
 
       if( s->state.activity == k_skate_activity_ground ){
          if( (fabsf(s->state.slip) > 0.75f) ){
-            audio_oneshot_3d( &audio_lands[rand()%2+3], player->rb.co, 
+            audio_oneshot_3d( &audio_lands[vg_randu32()%2+3], player->rb.co, 
                               40.0f, 1.0f );
          }
          else{
-            audio_oneshot_3d( &audio_lands[rand()%3], player->rb.co, 
+            audio_oneshot_3d( &audio_lands[vg_randu32()%3], player->rb.co, 
                               40.0f, 1.0f );
          }
       }
@@ -2665,7 +2665,7 @@ VG_STATIC void player__skate_animate( player_instance *player,
 
    float curspeed  = v3_length( player->rb.v ),
          kickspeed = vg_clampf( curspeed*(1.0f/40.0f), 0.0f, 1.0f ),
-         kicks     = (vg_randf()-0.5f)*2.0f*kickspeed,
+         kicks     = (vg_randf64()-0.5f)*2.0f*kickspeed,
          sign      = vg_signf( kicks );
 
    s->wobble[0] = vg_lerpf( s->wobble[0], kicks*kicks*sign, 6.0f*vg.time_delta);
index be2195f42437e9fabdbe0674dd27c6368b648a3d..c3b6c2eba2418dc50ec546a1cea3ddbb0c55bbd1 100644 (file)
@@ -652,19 +652,19 @@ VG_STATIC void player__walk_post_update( player_instance *player )
       audio_lock();
       if( w->surface == k_surface_prop_concrete ){
          audio_oneshot_3d( 
-               &audio_footsteps[rand()%vg_list_size(audio_footsteps)], 
+               &audio_footsteps[vg_randu32()%vg_list_size(audio_footsteps)], 
                player->rb.co, 40.0f, 1.0f 
          );
       }
       else if( w->surface == k_surface_prop_grass ){
          audio_oneshot_3d( 
-           &audio_footsteps_grass[rand()%vg_list_size(audio_footsteps_grass)],
+           &audio_footsteps_grass[vg_randu32()%vg_list_size(audio_footsteps_grass)],
             player->rb.co, 40.0f, 1.0f 
          );
       }
       else if( w->surface == k_surface_prop_wood ){
          audio_oneshot_3d( 
-           &audio_footsteps_wood[rand()%vg_list_size(audio_footsteps_wood)],
+           &audio_footsteps_wood[vg_randu32()%vg_list_size(audio_footsteps_wood)],
             player->rb.co, 40.0f, 1.0f 
          );
       }
index 457aa22e27e11b0ff5a646d0e9d26f2503764750..9409bf33b8d5aac08b06b1d054ce2e104f590f38 100644 (file)
@@ -139,18 +139,8 @@ VG_STATIC void vg_load(void)
    /* 'systems' are completely loaded now */
    /* load home world */
 
-#if 1
    world_load( 0, "maps/mp_spawn.mdl" );
-#else
-   world_load( 0, "maps/mp_mtzero.mdl" );
-#endif
-
-#if 0
-   world_load( &world_global.worlds[1], "maps/mp_gridmap.mdl" );
-   world_link_nonlocal_gates( 0, 1 );
-   world_load( &world_global.worlds[2], "maps/mp_mtzero.mdl" );
-   world_link_nonlocal_gates( 0, 2 );
-#endif
+   world_load( 1, "maps/mp_mtzero.mdl" );
 
    vg_console_load_autos();
    menu_link();
diff --git a/world.h b/world.h
index 962b96405c87ccb076122ee2eb89d6a82bfbc90a..420523bc2a28cbcf08fccd609ada40cfc8baf87c 100644 (file)
--- a/world.h
+++ b/world.h
@@ -421,9 +421,9 @@ VG_STATIC void ent_volume_call( world_instance *world, ent_call *call )
 
       if( volume->type == k_volume_subtype_particle ){
          float *co = alloca( sizeof(float)*3 );
-         co[0] = vg_randf()*2.0f-1.0f;
-         co[1] = vg_randf()*2.0f-1.0f;
-         co[2] = vg_randf()*2.0f-1.0f;
+         co[0] = vg_randf64()*2.0f-1.0f;
+         co[1] = vg_randf64()*2.0f-1.0f;
+         co[2] = vg_randf64()*2.0f-1.0f;
          m4x3_mulv( volume->to_world, co, co );
 
          call->function = k_ent_function_particle_spawn;
@@ -452,7 +452,7 @@ VG_STATIC void ent_audio_call( world_instance *world, ent_call *call )
    else
       vg_fatal_error( "ent_audio_call (invalid function id)" );
 
-   float chance = vg_randf()*100.0f,
+   float chance = vg_randf64()*100.0f,
          bar = 0.0f;
 
    for( u32 i=0; i<audio->clip_count; i++ ){
@@ -838,7 +838,7 @@ VG_STATIC struct world_surface *ray_hit_surface( world_instance *world,
  */
 
 VG_STATIC 
-enum audio_sprite_type world_audio_sample_sprite_random(v3f origin, v3f output);
+enum audio_sprite_type world_audio_sample_sprite_kandom(v3f origin, v3f output);
 VG_STATIC void world_audio_sample_distances( v3f co, int *index, float *value );
 
 #include "audio.h"
@@ -849,9 +849,9 @@ VG_STATIC void world_audio_sample_distances( v3f co, int *index, float *value );
 VG_STATIC 
 enum audio_sprite_type world_audio_sample_sprite_random(v3f origin, v3f output)
 {
-   v3f chance = { (vg_randf()-0.5f) * 30.0f, 
+   v3f chance = { (vg_randf64()-0.5f) * 30.0f, 
                   8.0f,
-                  (vg_randf()-0.5f) * 30.0f };
+                  (vg_randf64()-0.5f) * 30.0f };
    
    v3f pos;
    v3_add( chance, origin, pos );
index c274eace18e621cc15b3b7ed81915e644781a56c..c8c7fb797b419ca80da92801d127b3c7c3ff2dd9 100644 (file)
@@ -39,7 +39,7 @@ VG_STATIC void world_add_blob( world_instance *world,
 
    float angle = v3_dot(hit->normal,(v3f){0.0f,1.0f,0.0f});
    q_axis_angle( qsurface, axis, angle );
-   q_axis_angle( qrandom, (v3f){0.0f,1.0f,0.0f}, vg_randf()*VG_TAUf );
+   q_axis_angle( qrandom, (v3f){0.0f,1.0f,0.0f}, vg_randf64()*VG_TAUf );
    q_mul( qsurface, qrandom, qsurface );
    q_m3x3( qsurface, transform );
    v3_copy( hit->pos, transform[3] );
@@ -108,7 +108,7 @@ VG_STATIC void world_apply_procedural_foliage( world_instance *world,
 
    for( u32 i=0; i<particles; i++ ){
       v3f pos;
-      v3_mul( volume, (v3f){ vg_randf(), 1000.0f, vg_randf() }, pos );
+      v3_mul( volume, (v3f){ vg_randf64(), 1000.0f, vg_randf64() }, pos );
       pos[1] = 1000.0f;
       v3_add( pos, world->scene_geo.bbx[0], pos );
       
@@ -790,6 +790,8 @@ matched:;
 
 VG_STATIC void world_load( u32 index, const char *path )
 {
+   vg_rand_seed( 9001 );
+
    world_instance *world = &world_global.worlds[index];
    world_init_blank( world );
    world->status = k_world_status_loading;
index 1b46a36e205a969746ca88ba744100a05e69a81b..9308daa3b6a9e74cc660cbf3afcb97dedab47cae 100644 (file)
@@ -637,7 +637,7 @@ VG_STATIC void world_routes_fixedupdate( world_instance *world )
    rb_presolve_contacts( rb_contact_buffer, rb_contact_count );
 
    for( int i=0; i<rb_contact_count; i++ ){
-      rb_contact_restitution( rb_contact_buffer+i, vg_randf() );
+      rb_contact_restitution( rb_contact_buffer+i, vg_randf64() );
    }
 
    for( int i=0; i<6; i++ ){
@@ -819,13 +819,13 @@ VG_STATIC void world_routes_fracture( world_instance *world, ent_gate *gate,
             v3_muls( origin, -1.0f, particle->mlocal[3] );
 
             v3_copy( world_co, particle->obj.rb.co );
-            v3_muls( imp_v, 1.0f+vg_randf(), particle->obj.rb.v );
+            v3_muls( imp_v, 1.0f+vg_randf64(), particle->obj.rb.v );
             particle->obj.rb.v[1] += 2.0f;
 
             v4_copy( q, particle->obj.rb.q );
-            particle->obj.rb.w[0] = vg_randf()*2.0f-1.0f;
-            particle->obj.rb.w[1] = vg_randf()*2.0f-1.0f;
-            particle->obj.rb.w[2] = vg_randf()*2.0f-1.0f;
+            particle->obj.rb.w[0] = vg_randf64()*2.0f-1.0f;
+            particle->obj.rb.w[1] = vg_randf64()*2.0f-1.0f;
+            particle->obj.rb.w[2] = vg_randf64()*2.0f-1.0f;
 
             particle->obj.type = k_rb_shape_sphere;
             particle->obj.inf.sphere.radius = r*0.6f;