static void parse_planet_header(az_load_planet_t *loader) { int num_zones, num_hints, num_rooms, num_paragraphs, start_room_num; READ("@P z%d h%d r%d t%d s%d\n", &num_zones, &num_hints, &num_rooms, &num_paragraphs, &start_room_num); if (num_zones < 1 || num_zones > AZ_MAX_NUM_ZONES || num_hints < 0 || num_hints > AZ_MAX_NUM_HINTS || num_rooms < 1 || num_rooms > AZ_MAX_NUM_ROOMS || num_paragraphs < 0 || num_paragraphs > AZ_MAX_NUM_PARAGRAPHS || start_room_num < 0 || start_room_num >= num_rooms) FAIL(); loader->num_zones = num_zones; loader->num_hints = num_hints; loader->num_paragraphs = num_paragraphs; loader->planet->num_zones = 0; loader->planet->zones = AZ_ALLOC(num_zones, az_zone_t); loader->planet->num_hints = 0; loader->planet->hints = AZ_ALLOC(num_hints, az_hint_t); loader->planet->num_rooms = num_rooms; loader->planet->rooms = AZ_ALLOC(num_rooms, az_room_t); loader->planet->num_paragraphs = 0; loader->planet->paragraphs = AZ_ALLOC(num_paragraphs, char*); loader->planet->start_room = start_room_num; char ch = '\0'; if (az_rscanf(loader->reader, " $s%c", &ch) < 1 || ch != ':') FAIL(); loader->planet->on_start = az_read_script(loader->reader); if (loader->planet->on_start == NULL) FAIL(); scan_to_bang(loader); }
az_music_parser_t *new_music_parser( az_music_t *music, FILE *file, int num_drums, const az_sound_data_t *drums) { assert(num_drums >= 0); assert(drums != NULL || num_drums == 0); az_music_parser_t *parser = AZ_ALLOC(1, az_music_parser_t); parser->music = music; parser->file = file; parser->line = 1; parser->num_drums = num_drums; parser->drums = drums; AZ_ARRAY_LOOP(part_index, parser->part_indices) *part_index = -1; parser->loudness_multiplier = 1.0; parser->seconds_per_whole_note = 2.0; parser->current_part = -1; parser->current_track = -1; return parser; }