- // Parse attribs
- if( *c != '\n' )
- {
- while( *c )
- {
- if( reg_start < reg_end )
- {
- if( *c >= 'a' && *c <= 'z' )
- {
- arrpush( map.cells[ map.io[ reg_start ] ].conditions, *c );
- }
- else
- {
- if( *c == ',' || *c == '\n' )
- {
- reg_start ++;
-
- if( *c == '\n' )
- break;
- }
- else
- {
- vg_error( "Unkown attrib '%c' (row: %u)\n", *c, map.y );
- return 0;
- }
- }
- }
- else
- {
- vg_error( "Over-assigned values (row: %u)\n", map.y );
- return 0;
- }
-
- c ++;
- }
- }
-
- if( reg_start != reg_end )
- {
- vg_error( "Not enough values assigned (row: %u, %u of %u)\n", map.y, reg_start, reg_end );
- return 0;
- }
-
- if( cx != map.x )
- {
- vg_error( "Map row underflow (row: %u, %u<%u)\n", map.y, cx, map.x );
- return 0;
- }
-
- row = arraddnptr( map.cells, map.x );
- cx = 0;
- map.y ++;
- reg_end = reg_start = arrlen( map.io );
- }
- else
- {
- if( cx == map.x )
- {
- vg_error( "Map row overflow (row: %u, %u>%u)\n", map.y, cx, map.x );
- return 0;
- }
-
- row[ cx ].conditions = NULL;
-
- // Parse the various cell types
- if( *c == '+' || *c == '-' )
- {
- arrpush( map.io, cx + map.y*map.x );
- row[ cx ++ ].flags = *c == '+'? CELL_FLAG_INPUT: CELL_FLAG_OUTPUT;
- reg_end ++;
- }
- else if( *c == '#' )
- {
- row[ cx ++ ].flags = CELL_FLAG_WALL;
- }
- else
- {
- row[ cx ++ ].flags = 0x00;
- }
- }
-
- c ++;
- }
-
- // Origin top left corner
- map.origin[0] = -((float)map.x) * 0.5f;
- map.origin[2] = -((float)map.y) * 0.5f;
-
- vg_success( "Map loaded! (%u:%u)\n", map.x, map.y );
- return 1;