- {
- k_classtype_logic_relay,
- (void*)&world->logic_relays,
- sizeof(struct logic_relay)
- },
-#endif
-
- {
- k_classtype_logic_achievement,
- k_classtype_none,
- (void*)&world->logic_achievements,
- sizeof(struct logic_achievement)
- },
- {
- k_classtype_world_light,
- k_classtype_none,
- (void*)&world->lights,
- sizeof(struct world_light)
- },
- {
- k_classtype_nonlocal_gate,
- k_classtype_none,
- (void*)&world->nonlocal_gates,
- sizeof(struct nonlocal_gate)
- },
- {
- k_classtype_soundscape,
- k_classtype_none,
- (void*)&world->soundscapes,
- sizeof(struct soundscape)
- }
- };
-
- for( int i=0; i<vg_list_size(entity_counts); i++ )
- entity_counts[i].count = 0;
-
- for( int i=0; i<world->meta->info.node_count; i++ )
- {
- mdl_node *pnode = mdl_node_from_id( world->meta, i );
-
- for( int j=0; j<vg_list_size(entity_counts); j ++ )
- {
- if( (pnode->classtype == entity_counts[j].ct) ||
- (pnode->classtype == entity_counts[j].ct1) )
- {
- pnode->sub_uid = entity_counts[j].count;
- entity_counts[j].count ++;
- break;
- }
- }
- }
-
- for( int i=0; i<vg_list_size(entity_counts); i++ )
- {
- struct countable *counter = &entity_counts[i];
-
- u32 bufsize = counter->item_size*counter->count;
- *counter->to_allocate = vg_linear_alloc( world_global.generic_heap,
- bufsize );
- memset( *counter->to_allocate, 0, bufsize );
- }
-
- logic_bricks_world_gen_allocate( world );
-}
-
-VG_STATIC void world_pct_spawn( world_instance *world, mdl_node *pnode )
-{
- struct respawn_point *rp = &world->spawns[ world->spawn_count ++ ];
-
- v3_copy( pnode->co, rp->co );
- v4_copy( pnode->q, rp->q );
- rp->name = mdl_pstr( world->meta, pnode->pstr_name );
-}
-
-VG_STATIC void world_pct_water( world_instance *world, mdl_node *pnode )
-{
- if( world->water.enabled )
- {
- vg_warn( "Multiple water surfaces in level! ('%s')\n",
- mdl_pstr( world->meta, pnode->pstr_name ));
- return;
- }
-
- world->water.enabled = 1;
- water_set_surface( world, pnode->co[1] );
-}