update finalized version
authorhgn <hgodden00@gmail.com>
Sun, 13 Aug 2023 12:58:10 +0000 (13:58 +0100)
committerhgn <hgodden00@gmail.com>
Sun, 13 Aug 2023 12:58:10 +0000 (13:58 +0100)
ent_objective.c
maps_src/mp_spawn/main.mdl
skaterift.c

index c037eaf5cbb5cb5afe1d55527a5c4c59317cc341..ff31c4f597beded3cf5a7d9822e8701f59c54b3c 100644 (file)
@@ -5,6 +5,7 @@
 #include "world_load.h"
 #include "entity.h"
 #include "audio.h"
+#include "steam.h"
 
 VG_STATIC void ent_objective_pass( world_instance *world, 
                                    ent_objective *objective ){
@@ -29,6 +30,7 @@ VG_STATIC void ent_objective_pass( world_instance *world,
       audio_oneshot( &audio_challenge[2], 1.0f, 0.0f );
       world_static.challenge_target = NULL;
       world_static.challenge_timer = 0.0f;
+      world_static.focused_entity = 0;
 
       if( objective->id_win ){
          ent_call call;
@@ -37,6 +39,23 @@ VG_STATIC void ent_objective_pass( world_instance *world,
          call.id = objective->id_win;
          entity_call( world, &call );
       }
+
+      u32 world_completed = 1;
+      for( u32 i=0; i<mdl_arrcount(&world->ent_challenge); i++ ){
+         ent_challenge *challenge = mdl_arritm( &world->ent_challenge, i );
+         if( !challenge->status ){
+            world_completed = 0;
+            break;
+         }
+      }
+
+      if( world_completed ){
+         const char *understate = "Understate DIY park";
+         if( mdl_pstreq( &world->meta, world->info.pstr_name, 
+                         understate, vg_strdjb2( understate ))){
+            steam_set_achievement( "CITY_COMPLETE" );
+         }
+      }
    }
 }
 
index 078f952c3c820962735d9885294979b0c9d81fcf..97e890efdd832df4a223f8ac9f2cf08bffe9dda8 100644 (file)
Binary files a/maps_src/mp_spawn/main.mdl and b/maps_src/mp_spawn/main.mdl differ
index 9b90548c3f64a28f4e62949ce5c83f77b7d240cd..c2fc2664d0263c16d33f66e4c40d9452da4f2652 100644 (file)
@@ -13,7 +13,7 @@
 
 #if 1
 
-//#define SR_NETWORKED
+#define SR_NETWORKED
 
 #ifndef VG_RELEASE
  #define VG_DEVWINDOW
@@ -104,6 +104,9 @@ static void skaterift_restore_state(void){
    kvsav.len = sav.len;
    kvsav.max = sizeof(sav.buf);
 
+   u32 board_reg_id = 0,
+       player_reg_id = 0;
+
    vg_msg player = kvsav;
    if( vg_msg_seekframe( &player, "player", 0 ) ){
       addon_alias q;
@@ -111,21 +114,23 @@ static void skaterift_restore_state(void){
       /* board */
       skaterift_read_addon_alias( &player, "board", k_addon_type_board, &q );
       u32 reg_id = addon_match( &q );
-      if( reg_id != 0xffffffff ){
-         localplayer.board_view_slot = 
-            addon_cache_create_viewer( k_addon_type_board, reg_id );
-      }
+      if( reg_id != 0xffffffff ) 
+         board_reg_id = reg_id;
+
 
       /* playermodel */
       skaterift_read_addon_alias( &player, "playermodel", 
                                   k_addon_type_player, &q );
       reg_id = addon_match( &q );
-
-      if( reg_id == 0xffffffff ) reg_id = 0;
-      localplayer.playermodel_view_slot = 
-         addon_cache_create_viewer( k_addon_type_player, reg_id );
+      if( reg_id != 0xffffffff ) 
+         player_reg_id = reg_id;
    }
 
+   localplayer.board_view_slot = 
+      addon_cache_create_viewer( k_addon_type_board, board_reg_id );
+   localplayer.playermodel_view_slot = 
+      addon_cache_create_viewer( k_addon_type_player, player_reg_id );
+
    vg_msg world = kvsav;
    if( vg_msg_seekframe( &world, "world", 0 ) ){
       addon_alias q;