+ struct logic_achievement *ach = &world->logic_achievements[ uid ];
+
+ if( ach->achieved )
+ return;
+
+ steam_set_achievement( ach->achievement_id );
+ steam_store_achievements();
+
+ ach->achieved = 1;
+}
+
+VG_STATIC void world_run_relay( world_instance *world,
+ struct relay_target *rt );
+
+VG_STATIC void world_trigger_relay( world_instance *world, u32 uid )
+{
+ struct logic_relay *relay = &world->logic_relays[ uid ];
+
+ for( int i=0; i<relay->target_count; i++ )
+ {
+ world_run_relay( world, &relay->targets[i] );
+ }
+}
+
+VG_STATIC void world_trigger_audio( world_instance *world, u32 uid )
+{
+ struct world_audio_thing *wat = &world->audio_things[ uid ];
+
+ audio_lock();
+ audio_player_playclip( &wat->player,
+ &wat->temp_embedded_clip );
+ audio_unlock();
+}
+
+VG_STATIC void world_run_relay( world_instance *world,
+ struct relay_target *rt )
+{
+ struct entity_instruction
+ {
+ enum classtype classtype;
+ void (*p_trigger)( world_instance *world, u32 uid );
+ }
+ entity_instructions[] =
+ {
+ { k_classtype_logic_achievement, world_trigger_achievement },
+ { k_classtype_logic_relay, world_trigger_relay },
+ { k_classtype_audio, world_trigger_audio }
+ };