wind rushing sound
[carveJwlIkooP6JGAAIwe30JlM.git] / world_entity.c
index 947a3bdc387c11a13ffa6b980231c5e42fefa619..ec7c2fe13426a5cbc0d773ef7711080bee0b0e80 100644 (file)
@@ -11,6 +11,7 @@
 #include "ent_challenge.h"
 #include "ent_skateshop.h"
 #include "ent_route.h"
+#include "ent_traffic.h"
 
 static void world_entity_focus( u32 entity_id ){
    localplayer.immobile = 1;
@@ -276,8 +277,7 @@ ent_spawn *world_find_spawn_by_name( world_instance *world, const char *name )
    return rp;
 }
 
-static void ent_volume_call( world_instance *world, ent_call *call )
-{
+static void ent_volume_call( world_instance *world, ent_call *call ){
    u32 index = mdl_entity_id_id( call->id );
    ent_volume *volume = mdl_arritm( &world->ent_volume, index );
    if( !volume->target ) return;
@@ -287,9 +287,9 @@ static void ent_volume_call( world_instance *world, ent_call *call )
 
       if( volume->flags & k_ent_volume_flag_particles ){
          float *co = alloca( sizeof(float)*3 );
-         co[0] = vg_randf64()*2.0f-1.0f;
-         co[1] = vg_randf64()*2.0f-1.0f;
-         co[2] = vg_randf64()*2.0f-1.0f;
+         co[0] = vg_randf64(&vg.rand)*2.0f-1.0f;
+         co[1] = vg_randf64(&vg.rand)*2.0f-1.0f;
+         co[2] = vg_randf64(&vg.rand)*2.0f-1.0f;
          m4x3_mulv( volume->to_world, co, co );
 
          call->function = k_ent_function_particle_spawn;
@@ -335,7 +335,7 @@ static void ent_audio_call( world_instance *world, ent_call *call ){
    else
       return;
 
-   float chance = vg_randf64()*100.0f,
+   float chance = vg_randf64(&vg.rand)*100.0f,
          bar = 0.0f;
 
    for( u32 i=0; i<audio->clip_count; i++ ){
@@ -560,6 +560,29 @@ static void entity_bh_debug( void *user, u32 item_index ){
    }
 }
 
+static void update_ach_models(void){
+   world_instance *hub = &world_static.instances[k_world_purpose_hub];
+   if( hub->status != k_world_status_loaded ) return;
+
+   for( u32 i=0; i<mdl_arrcount( &hub->ent_prop ); i ++ ){
+      ent_prop *prop = mdl_arritm( &hub->ent_prop, i );
+      if( prop->flags & 0x2 ){
+         if( MDL_CONST_PSTREQ( &hub->meta, prop->pstr_alias, "MARC" ) )
+            if( skaterift.achievements & 0x1 )
+               prop->flags &= ~0x1;
+         if( MDL_CONST_PSTREQ( &hub->meta, prop->pstr_alias, "ALBERT" ) )
+            if( skaterift.achievements & 0x2 )
+               prop->flags &= ~0x1;
+         if( MDL_CONST_PSTREQ( &hub->meta, prop->pstr_alias, "JANET" ) )
+            if( skaterift.achievements & 0x4 )
+               prop->flags &= ~0x1;
+         if( MDL_CONST_PSTREQ( &hub->meta, prop->pstr_alias, "BERNADETTA" ) )
+            if( skaterift.achievements & 0x8 )
+               prop->flags &= ~0x1;
+      }
+   }
+}
+
 static void entity_bh_closest( void *user, u32 item_index, v3f point,
                                   v3f closest ){
    world_instance *world = user;
@@ -652,7 +675,7 @@ static void world_entity_start( world_instance *world, vg_msg *sav ){
             }
 
             /* LEGACY: check if steam achievements can give us a medal */
-            if( steam_ready  && steam_stats_ready ){
+            if( steam_ready && steam_stats_ready ){
                for( u32 j=0; j<vg_list_size(track_infos); j ++ ){
                   struct track_info *inf = &track_infos[j];
                   if( !strcmp(inf->name,