#include "ent_region.h"
#include "gui.h"
+#include "network_common.h"
+#include "network.h"
+
+static u32 region_spark_colour( u32 flags ){
+ if( flags & k_ent_route_flag_achieve_gold )
+ return 0xff8ce0fa;
+ else if( flags & k_ent_route_flag_achieve_silver )
+ return 0xffc2c2c2;
+ else
+ return 0x00;
+}
static void ent_region_call( world_instance *world, ent_call *call ){
ent_region *region =
gui_location_print_ccmd( 1, (const char *[]){
mdl_pstr(&world->meta,region->pstr_title)} );
+
+ vg_strncpy( mdl_pstr(&world->meta,region->pstr_title),
+ global_ent_region.location, NETWORK_REGION_MAX,
+ k_strncpy_always_add_null );
+ global_ent_region.flags = region->flags;
+ network_send_region();
+
+ localplayer.effect_data.spark.colour = region_spark_colour(region->flags);
}
else if( call->function == 1 ){ /* leave */
for( u32 i=0; i<mdl_arrcount(&world->ent_route); i ++ ){
ent_route *route = mdl_arritm( &world->ent_route, i );
route->flags |= k_ent_route_flag_out_of_zone;
}
+ localplayer.effect_data.spark.colour = 0x00;
}
}
* 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);
combined &= route->flags;
}
+ for( u32 j=0; j<mdl_arrcount(&world->ent_challenge); j ++ ){
+ ent_challenge *challenge = mdl_arritm( &world->ent_challenge, j );
+
+ v3f local;
+ m4x3_mulv( volume->to_local, challenge->transform.co, local );
+ if( !((fabsf(local[0]) <= 1.0f) &&
+ (fabsf(local[1]) <= 1.0f) &&
+ (fabsf(local[2]) <= 1.0f)) ){
+ continue;
+ }
+
+ u32 flags = 0x00;
+ if( challenge->status ){
+ flags |= k_ent_route_flag_achieve_gold;
+ flags |= k_ent_route_flag_achieve_silver;
+ }
+
+ combined &= flags;
+ }
+
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();
+ }
+ }
- /* TODO: Challenges */
+ if( world_static.instance_addons[instance_id]->flags & ADDON_REG_CITY ){
+ steam_set_achievement( "CITY_COMPLETE" );
+ steam_store_achievements();
}
}