THE REST
authorhgn <hgodden00@gmail.com>
Tue, 28 Nov 2023 14:53:22 +0000 (14:53 +0000)
committerhgn <hgodden00@gmail.com>
Tue, 28 Nov 2023 14:53:22 +0000 (14:53 +0000)
12 files changed:
addon.h
ent_objective.c
ent_region.c
maps_src/dev_hub/main.mdl
maps_src/dev_tutorial/main.mdl [new file with mode: 0644]
maps_src/mp_mtzero/main.mdl
maps_src/mp_spawn/main.mdl
menu.h
shaders/model_gate_unlinked.h
shaders/scene_vertex_blend.h
skaterift.c
steam.h

diff --git a/addon.h b/addon.h
index 5ca812cc94a2ec0777bd6d2b1203e0a92b2af3d1..59645daed4ef8ec603daf1e7c5654cbafaf3d2cd 100644 (file)
--- a/addon.h
+++ b/addon.h
@@ -20,6 +20,8 @@ struct addon_alias {
 };
 
 #define ADDON_REG_HIDDEN 0x1
+#define ADDON_REG_MTZERO 0x2
+#define ADDON_REG_CITY   0x4
 
 struct {
    struct addon_reg{
index 97e33d8cb5c54caf922fc167348a3b595c6f10eb..ce5ad0f2168c9067d504a0ca8cc17d4f05b0c8c8 100644 (file)
@@ -44,23 +44,7 @@ static void ent_objective_pass( world_instance *world,
          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" );
-            steam_store_achievements();
-         }
-      }
+      ent_region_re_eval( world );
    }
 }
 
index eecf22d05ff65d1b4846bdb324c56733ed0c2b33..fd24f4e1cd3b6f3dc98bfc6b025475b011de76f7 100644 (file)
@@ -62,6 +62,9 @@ static void ent_region_call( world_instance *world, ent_call *call ){
  * reevaluate all achievements to calculate the compiled achievement
  */
 static void ent_region_re_eval( world_instance *world ){
+   u32 world_total = k_ent_route_flag_achieve_gold | 
+                     k_ent_route_flag_achieve_silver;
+
    for( u32 i=0; i<mdl_arrcount(&world->ent_region); i ++ ){
       ent_region *region = mdl_arritm(&world->ent_region, i);
 
@@ -109,5 +112,25 @@ static void ent_region_re_eval( world_instance *world ){
       }
 
       region->flags = combined;
+      world_total &= combined;
+   }
+
+   u32 instance_id = world - world_static.instances;
+
+   if( world_static.instance_addons[instance_id]->flags & ADDON_REG_MTZERO ){
+      if( world_total & k_ent_route_flag_achieve_gold ){
+         steam_set_achievement( "MTZERO_GOLD" );
+         steam_store_achievements();
+      }
+
+      if( world_total & k_ent_route_flag_achieve_silver ){
+         steam_set_achievement( "MTZERO_SILVER" );
+         steam_store_achievements();
+      }
+   }
+
+   if( world_static.instance_addons[instance_id]->flags & ADDON_REG_CITY ){
+      steam_set_achievement( "CITY_COMPLETE" );
+      steam_store_achievements();
    }
 }
index 6362bb8e3cb13308fdb2eccf7788a4f445ddc85b..1c4e6998e626217c35bd8a317feca9e448db81c3 100644 (file)
Binary files a/maps_src/dev_hub/main.mdl and b/maps_src/dev_hub/main.mdl differ
diff --git a/maps_src/dev_tutorial/main.mdl b/maps_src/dev_tutorial/main.mdl
new file mode 100644 (file)
index 0000000..5ee4be4
Binary files /dev/null and b/maps_src/dev_tutorial/main.mdl differ
index 3f7148dbc438e24b8c983bfad031f552ef4e7b7c..76139c8b6bbdce0b417c8e8813377a7f68687a42 100644 (file)
Binary files a/maps_src/mp_mtzero/main.mdl and b/maps_src/mp_mtzero/main.mdl differ
index c42dc1bd4172d0c26e9171f12aed12c22f4d105e..74fb300edc4c9393851f66d429484b571f54aaca 100644 (file)
Binary files a/maps_src/mp_spawn/main.mdl and b/maps_src/mp_spawn/main.mdl differ
diff --git a/menu.h b/menu.h
index 737c849e4b892c53e532694ba422259d26010684..6df04dbf6da80e364b53f5fa6b94d7645d9be710 100644 (file)
--- a/menu.h
+++ b/menu.h
@@ -609,11 +609,6 @@ static void menu_render(void){
       ui_split( panel, k_ui_axis_h, 28, 0, title, panel );
       ui_text( title, "Mt.Zero Software", 1, k_ui_align_middle_center, 0 );
 
-      ui_split( panel, k_ui_axis_h, 8, 0, title, panel );
-      ui_split( panel, k_ui_axis_h, 28, 0, title, panel );
-      ui_text( title, "A game by Harry Godden", 1, 
-               k_ui_align_middle_center, 0 );
-
       ui_split( panel, k_ui_axis_h, 8, 0, title, panel );
       ui_split( panel, k_ui_axis_h, 28*2, 0, title, panel );
       ui_text( title, "Free Software", 2, k_ui_align_middle_center, 0 );
index b617ab59148f37cdfba6001b4e7e638cea09c9eb..1fda296a7a51e05b7300403adb13c0269be401da 100644 (file)
@@ -97,19 +97,34 @@ static struct vg_shader _shader_model_gate_unlinked = {
 "\n"
 "#line     12        0 \n"
 "\n"
+"const int NOISE_LOOP = 3;\n"
+"vec3 digital_noise( uvec3 iuv ){\n"
+"   iuv *=uvec3(8,2524,7552);\n"
+"   for( int i=0; i<NOISE_LOOP; i++ )\n"
+"      iuv += (iuv.yzx<<2) ^ (iuv.yxz)+iuv.z;\n"
+"   return vec3(iuv)*(1.0/float(0xffffffffU));\n"
+"}\n"
+"\n"
+"vec2 rand_hash22( vec2 p ){\n"
+"   vec3 p3 = fract(vec3(p.xyx) * 213.8976123);\n"
+"   p3 += dot(p3, p3.yzx+19.19);\n"
+"   return fract(vec2((p3.x + p3.y)*p3.z, (p3.x+p3.z)*p3.y));\n"
+"}\n"
+"\n"
 "void main(){\n"
 "   compute_motion_vectors();\n"
 "\n"
 "   vec2 ssuv = gl_FragCoord.xy;\n"
-"   float opacity = 1.0-smoothstep(0.0,1.0,aUv.y+uColour.a);\n"
+"   float grad = 1.0-aUv.y*0.1;\n"
+"   float opacity = rand_hash22( vec2(floor(aUv.y*100.0),floor(aCo.z*10.0+uTime*40.0)) ).r*grad;\n"
 "   \n"
 "   vec3 vDither = vec3( dot( vec2( 171.0, 231.0 ), ssuv) );\n"
 "   float dither = fract( vDither.g / 71.0 ) - 0.5;\n"
 "\n"
-"   if( opacity+dither<0.5 )\n"
+"   if( opacity<0.9 )\n"
 "      discard;\n"
 "\n"
-"   FragColor = uColour;\n"
+"   FragColor = vec4(0.7,0.5,0.5,1.0);\n"
 "}\n"
 ""},
 };
index c5206d125dc08e4667b78b26644aaeb4878a45a7..2cc345b6c95768a7ff6d9b82f9d3764d84f5bba3 100644 (file)
@@ -477,7 +477,7 @@ static struct vg_shader _shader_scene_vertex_blend = {
 "   vec4 rgarbage = texture( uTexGarbage, uvdiffuse );\n"
 "\n"
 "   // Colour blending\n"
-"   float fblendclip = step(0.380,aNorm.w + (rgarbage.r-0.5)*-1.740)*0.380;\n"
+"   float fblendclip = step(0.380,aNorm.w + (rgarbage.r-0.5)*-1.740)*0.320;\n"
 "   vec2 uvgradients = aUv + vec2( fblendclip, 0.0 );\n"
 "\n"
 "   vfrag = texture( uTexGradients, uvgradients ).rgb;\n"
@@ -489,7 +489,7 @@ static struct vg_shader _shader_scene_vertex_blend = {
 "   }\n"
 "\n"
 "   vfrag = scene_compute_lighting( vfrag, qnorm, aWorldCo );\n"
-"   oColour = vec4(vec3(aNorm.w), 1.0);\n"
+"   oColour = vec4(vfrag, 1.0);\n"
 "}\n"
 ""},
 };
index 775637702f9e0d2cf428089c26aa44b5d13ad249..714ed11cbdd44f05a73585a2e998aa8a0a406c40 100644 (file)
@@ -156,9 +156,9 @@ static void skaterift_restore_state(void){
    kvsav.cur = orig;
 }
 
-static addon_reg *skaterift_mount_world_unloadable( const char *path ){
+static addon_reg *skaterift_mount_world_unloadable( const char *path, u32 ext ){
    addon_reg *reg = addon_mount_local_addon( path, k_addon_type_world, ".mdl" );
-   reg->flags |= ADDON_REG_HIDDEN;
+   reg->flags |= (ADDON_REG_HIDDEN | ext);
    return reg;
 }
 
@@ -216,9 +216,10 @@ static void vg_load(void){
     */
 
    /* hub world */
-   addon_reg *hub = skaterift_mount_world_unloadable( "maps/dev_hub" );
-   skaterift_mount_world_unloadable( "maps/mp_spawn" );
-   skaterift_mount_world_unloadable( "maps/mp_mtzero" );
+   addon_reg *hub = skaterift_mount_world_unloadable( "maps/dev_hub", 0 );
+   skaterift_mount_world_unloadable( "maps/mp_spawn", ADDON_REG_CITY );
+   skaterift_mount_world_unloadable( "maps/mp_mtzero", ADDON_REG_MTZERO );
+   skaterift_mount_world_unloadable( "maps/dev_tutorial", 0 );
 
    /* load home/permanent world manually */
    world_static.load_state = k_world_loader_load;
diff --git a/steam.h b/steam.h
index dcfc1c8bb970335eaad43809b92311a9c6e6e76e..e0569a7a8046d50c23e451342c2e0d656843a27b 100644 (file)
--- a/steam.h
+++ b/steam.h
@@ -48,9 +48,10 @@ static HSteamPipe hSteamClientPipe;
 
 static const char *steam_achievement_names[] = 
 {
-   "ALBERT", "MARC", 
+   "ALBERT", "MARC", "JANET", "BERNADETTA",
    "ROUTE_MPY", "ROUTE_MPG", "ROUTE_MPB", "ROUTE_MPR",
-   "ROUTE_TO", "ROUTE_TC"
+   "ROUTE_TO", "ROUTE_TC", "CITY_COMPLETE", "MTZERO_SILVER", "MTZERO_GOLD",
+   "80FT"
 };
 
 static void steam_store_achievements(void)